Skip to content

Commit 79c233e

Browse files
committed
Apply requested changes, remove componion object of TemplateFile
1 parent 590f939 commit 79c233e

File tree

6 files changed

+45
-53
lines changed

6 files changed

+45
-53
lines changed

scala3doc/src/dotty/dokka/compat.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ def JList[T](e: T*): JList[T] = e.asJava
2020
def JSet[T](e: T*): JSet[T] = e.toSet.asJava
2121
def JMap[K, V](e: (K, V)*): JMap[K, V] = e.toMap.asJava
2222
def JMap2[K, V](): JMap[K, V] = ??? // e.toMap.asJava
23+
def newHMap[K, V](m: JMap[K, V]): HMap[K, V] = new HMap[K, V](m)
2324

2425
type JList[T] = java.util.List[T]
2526
type JSet[T] = java.util.Set[T]
2627
type JMap[K, V] = java.util.Map[K, V]
28+
type HMap[K, V] = java.util.HashMap[K, V]
2729

2830
type SourceSetWrapper = DokkaConfiguration$DokkaSourceSet
2931
type DokkaSourceSet = DokkaConfiguration.DokkaSourceSet
@@ -57,3 +59,9 @@ extension [V] (map: JMap[SourceSetWrapper, V]):
5759
extension [V](jlist: JList[V]):
5860
def ++ (other: JList[V]): JList[V] =
5961
Stream.of(jlist, other).flatMap(_.stream).collect(Collectors.toList())
62+
63+
extension (m: Any):
64+
def toJava: Any = m match
65+
case sm: Map[_, _] => sm.map(kv => (kv._1, kv._2.toJava)).asJava
66+
case sl: Iterable[_] => new java.util.ArrayList(sl.map( _.toJava ).asJava.asInstanceOf[java.util.Collection[_]])
67+
case _ => m

scala3doc/src/dotty/dokka/site/SidebarParser.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ object Sidebar:
3232
val mapper = ObjectMapper(YAMLFactory())
3333
val raw = mapper.readValue(content, RawTypeRef)
3434

35-
raw.get("sidebar").asScala.toList.map(toSidebar)
35+
raw.get("sidebar").asScala.toList.map(toSidebar)

scala3doc/src/dotty/dokka/site/StaticSiteContext.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class StaticSiteContext(val root: File, sourceSets: Set[SourceSetWrapper]):
8282
def loadIndexPage(): TemplateFile =
8383
val indexFiles = from.listFiles { file =>file.getName == "index.md" || file.getName == "index.html" }
8484
indexFiles.size match
85-
case 0 => emptyTemplate(from)
85+
case 0 => emptyTemplate(from, from.getName)
8686
case 1 => loadTemplateFile(indexFiles.head).copy(file = from)
8787
case _ =>
8888
val msg = s"ERROR: Multiple index pages found under ${from.toPath}"
@@ -115,7 +115,7 @@ class StaticSiteContext(val root: File, sourceSets: Set[SourceSetWrapper]):
115115
case Sidebar.Category(title, nested) =>
116116
// Add support for index.html/index.md files!
117117
val fakeFile = new File(root, title)
118-
LoadedTemplate(emptyTemplate(fakeFile), nested.map(loadSidebarContent), fakeFile)
118+
LoadedTemplate(emptyTemplate(fakeFile, title), nested.map(loadSidebarContent), fakeFile)
119119

120120
private def loadAllFiles() =
121121
def dir(name: String)= List(new File(root, name)).filter(_.isDirectory)

scala3doc/src/dotty/dokka/site/common.scala

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,16 @@ val defaultMarkdownOptions: DataHolder =
4040
"https://github.global.ssl.fastly.net/images/icons/emoji/"
4141
)
4242

43-
def emptyTemplate(file: File): TemplateFile = TemplateFile(
43+
def emptyTemplate(file: File, title: String): TemplateFile = TemplateFile(
4444
file = file,
4545
isHtml = true,
4646
rawCode = "",
47-
settings = Map.empty
47+
settings = Map.empty,
48+
name = file.getName.stripSuffix(".html"),
49+
title = title,
50+
hasFrame = true,
51+
resources = List.empty,
52+
layout = None
4853
)
4954

5055
final val ConfigSeparator = "---"
@@ -69,16 +74,37 @@ def loadTemplateFile(file: File): TemplateFile = {
6974
extension (v: java.util.List[String]) def getSettingValue: String | List[String] =
7075
if v.size == 1 then v.get(0) else v.asScala.toList
7176

72-
val globalKeys = Set("extraJS", "extraCSS", "layout", "hasFrame")
77+
val globalKeys = Set("extraJS", "extraCSS", "layout", "hasFrame", "name")
7378
val (global, inner) = yamlCollector.getData.asScala.toMap.transform((_, v) => v.getSettingValue)
7479
.partition((k,_) => globalKeys.contains(k))
7580
val settings = global ++ Map("page" -> inner)
7681

82+
extension (settings: Map[String, Element]):
83+
private def stringSetting(name: String): Option[String] = settings.getOrElse(name, null).match {
84+
case List(elem: String) => Some(elem)
85+
case elem: String => Some(elem)
86+
case _ => None
87+
}.map(_.stripPrefix("\"").stripSuffix("\""))
88+
89+
private def listSetting(name: String): Option[List[String]] = settings.getOrElse(name, null).match {
90+
case elem: List[_] => Some(elem.asInstanceOf[List[String]])
91+
case elem: String => Some(List(elem))
92+
case _ => None
93+
}
94+
95+
val isHtml = file.getName.endsWith(".html")
96+
val name = settings.stringSetting("name").getOrElse(file.getName.stripSuffix(if (isHtml) ".html" else ".md"))
97+
7798
TemplateFile(
7899
file = file,
79-
isHtml = file.getName.endsWith(".html"),
100+
isHtml = isHtml,
80101
rawCode = content.mkString(LineSeparator),
81102
settings = settings,
103+
name = name,
104+
title = settings.getOrElse("page", settings).asInstanceOf[Map[String, Object]].stringSetting("title").getOrElse(name),
105+
hasFrame = !settings.stringSetting("hasFrame").contains("false"),
106+
resources = (settings.listSetting("extraCSS") ++ settings.listSetting("extraJS")).flatten.toList,
107+
layout = settings.stringSetting("layout")
82108
)
83109
}
84110

scala3doc/src/dotty/dokka/site/templates.scala

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@ import com.vladsch.flexmark.parser.{Parser, ParserEmulationProfile}
1515
import com.vladsch.flexmark.util.options.{DataHolder, MutableDataSet}
1616
import com.vladsch.flexmark.html.HtmlRenderer
1717
import liqp.Template
18-
import java.util.{ Map => JMap, HashMap => HMap, ArrayList, Collection }
1918

20-
import scala.collection.JavaConverters._
2119
import scala.io.Source
2220

2321
case class RenderingContext(
@@ -66,13 +64,8 @@ case class TemplateFile(
6664
val layoutTemplate = layout.map(name =>
6765
ctx.layouts.getOrElse(name, throw new RuntimeException(s"No layouts named $name in ${ctx.layouts}")))
6866

69-
def toJava(m: Any): Any = m match
70-
case sm: Map[_, _] => sm.map(kv => (kv._1, toJava(kv._2))).asJava
71-
case sl: Iterable[_] => new ArrayList(sl.map( toJava ).asJava.asInstanceOf[Collection[_]])
72-
case _ => m
73-
7467
// Library requires mutable maps..
75-
val mutableProperties = new HMap[String, Object](toJava(ctx.properties).asInstanceOf[JMap[String, Object]])
68+
val mutableProperties = HMap(ctx.properties.toJava.asInstanceOf[JMap[String, Object]])
7669
val rendered = Template.parse(this.rawCode).render(mutableProperties)
7770
// We want to render markdown only if next template is html
7871
val code = if (isHtml || layoutTemplate.exists(!_.isHtml)) rendered else
@@ -83,38 +76,3 @@ case class TemplateFile(
8376
case None => ResolvedPage(code, resources ++ ctx.resources)
8477
case Some(layoutTemplate) =>
8578
layoutTemplate.resolveInner(ctx.nest(code, file, resources))
86-
87-
object TemplateFile:
88-
extension (settings: Map[String, Element]):
89-
private def stringSetting(name: String): Option[String] = settings.getOrElse(name, null).match {
90-
case List(elem: String) => Some(elem)
91-
case elem: String => Some(elem)
92-
case _ => None
93-
}.map(_.stripPrefix("\"").stripSuffix("\""))
94-
95-
private def listSetting(name: String): Option[List[String]] = settings.getOrElse(name, null).match {
96-
case elem: List[_] => Some(elem.asInstanceOf[List[String]])
97-
case elem: String => Some(List(elem))
98-
case _ => None
99-
}
100-
101-
def apply(
102-
file: File,
103-
isHtml: Boolean,
104-
rawCode: String,
105-
settings: Map[String, Element],
106-
): TemplateFile = {
107-
val name = settings.stringSetting("name").getOrElse(file.getName.stripSuffix(if (isHtml) ".html" else ".md"))
108-
109-
TemplateFile(
110-
file = file,
111-
isHtml,
112-
rawCode = rawCode,
113-
settings = settings,
114-
name = name,
115-
title = settings.getOrElse("page", settings).asInstanceOf[Map[String, Object]].stringSetting("title").getOrElse(name),
116-
hasFrame = !settings.stringSetting("hasFrame").contains("false"),
117-
resources = (settings.listSetting("extraCSS") ++ settings.listSetting("extraJS")).flatten.toList,
118-
layout = settings.stringSetting("layout")
119-
)
120-
}

scala3doc/test/dotty/dokka/site/TemplateFileTests.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class TemplateFileTests:
2626
else
2727
val (code, ext) = remaining.head
2828
testTemplate(code, ext) { template =>
29-
val newCtx = ctx.copy(layouts = ctx.layouts + (template.name() -> template))
29+
val newCtx = ctx.copy(layouts = ctx.layouts + (template.name -> template))
3030
rec(newCtx, remaining.drop(1))
3131
}
3232

@@ -41,7 +41,7 @@ class TemplateFileTests:
4141
|code""".stripMargin
4242
) { t =>
4343
assertEquals(t.rawCode, "code")
44-
assertEquals(t.title(), "myTitle")
44+
assertEquals(t.title, "myTitle")
4545
}
4646

4747

@@ -243,4 +243,4 @@ class TemplateFileTests:
243243
testContent(
244244
html,
245245
Map(),
246-
List(base -> "html", content -> "html"))
246+
List(base -> "html", content -> "html"))

0 commit comments

Comments
 (0)