@@ -19,6 +19,7 @@ import java.io.ByteArrayOutputStream
1919import java .io .PrintStream
2020import scala .io .Codec
2121import java .net .URL
22+ import scala .util .Try
2223
2324type CompilerContext = dotty.tools.dotc.core.Contexts .Context
2425
@@ -94,23 +95,69 @@ case class DocContext(args: Scala3doc.Args, compilerContext: CompilerContext)
9495 sourceLinks
9596 )(using compilerContext))
9697
97- val externalDocumentationLinks : List [Scala3docExternalDocumentationLink ] = List (
98- Scala3docExternalDocumentationLink (
99- List (raw " .*scala\/quoted.* " .r),
100- new URL (" http://127.0.0.1:5500/scala3doc/output/scala3/" ),
101- DocumentationKind .Scala3doc
102- ).withPackageList(new URL (" http://127.0.0.1:5500/scala3doc/output/scala3/-scala%203/package-list" )),
103- Scala3docExternalDocumentationLink (
104- List (raw " .*java.* " .r),
105- new URL (" https://docs.oracle.com/javase/8/docs/api/" ),
106- DocumentationKind .Javadoc
107- ).withPackageList(new URL (" https://docs.oracle.com/javase/8/docs/api/package-list" )),
108- Scala3docExternalDocumentationLink (
109- List (raw " .*scala.* " .r),
110- new URL (" https://www.scala-lang.org/api/current/" ),
111- DocumentationKind .Scaladoc
112- )
113- )
98+ def parseDocTool (docTool : String ) = docTool match {
99+ case " scaladoc" => Some (DocumentationKind .Scaladoc )
100+ case " scala3doc" => Some (DocumentationKind .Scala3doc )
101+ case " javadoc" => Some (DocumentationKind .Javadoc )
102+ case other => None
103+ }
104+ val externalDocumentationLinks : List [Scala3docExternalDocumentationLink ] = args.externalMappings.filter(_.size >= 3 ).flatMap { mapping =>
105+ val regexStr = mapping(0 )
106+ val docTool = mapping(1 )
107+ val urlStr = mapping(2 )
108+ val packageListUrlStr = if mapping.size > 3 then Some (mapping(3 )) else None
109+ val regex = Try (regexStr.r).toOption
110+ val url = Try (URL (urlStr)).toOption
111+ val packageListUrl = Try (packageListUrlStr.map(URL (_)))
112+ .fold(
113+ e => {
114+ logger.warn(s " Wrong packageListUrl parameter in external mapping. Found ' $packageListUrlStr'. " +
115+ s " Package list url will be omitted " )
116+ None },
117+ res => res
118+ )
119+
120+ val parsedDocTool = parseDocTool(docTool)
121+ val res = if regexStr.isEmpty then
122+ logger.warn(s " Wrong regex parameter in external mapping. Found ' $regexStr'. Mapping will be omitted " )
123+ None
124+ else if url.isEmpty then
125+ logger.warn(s " Wrong url parameter in external mapping. Found ' $urlStr'. Mapping will be omitted " )
126+ None
127+ else if parsedDocTool.isEmpty then
128+ logger.warn(s " Wrong doc-tool parameter in external mapping. " +
129+ s " Expected one of: 'scaladoc', 'scala3doc', 'javadoc'. Found:' $docTool'. Mapping will be omitted "
130+ )
131+ None
132+ else
133+ Some (
134+ Scala3docExternalDocumentationLink (
135+ List (regexStr.r),
136+ URL (urlStr),
137+ parsedDocTool.get,
138+ packageListUrlStr.map(URL (_))
139+ )
140+ )
141+ res
142+ }
143+
144+ // val externalDocumentationLinks: List[Scala3docExternalDocumentationLink] = List(
145+ // Scala3docExternalDocumentationLink(
146+ // List(raw".*scala\/quoted.*".r),
147+ // new URL("http://127.0.0.1:5500/scala3doc/output/scala3/"),
148+ // DocumentationKind.Scala3doc
149+ // ).withPackageList(new URL("http://127.0.0.1:5500/scala3doc/output/scala3/-scala%203/package-list")),
150+ // Scala3docExternalDocumentationLink(
151+ // List(raw".*java.*".r),
152+ // new URL("https://docs.oracle.com/javase/8/docs/api/"),
153+ // DocumentationKind.Javadoc
154+ // ).withPackageList(new URL("https://docs.oracle.com/javase/8/docs/api/package-list")),
155+ // Scala3docExternalDocumentationLink(
156+ // List(raw".*scala.*".r),
157+ // new URL("https://www.scala-lang.org/api/current/"),
158+ // DocumentationKind.Scaladoc
159+ // )
160+ // )
114161
115162 override def getPluginsConfiguration : JList [DokkaConfiguration .PluginConfiguration ] =
116163 JNil
0 commit comments