da seguire su @mergeconflict answer, ecco come ho fatto
Poiché non v'è nessuna soluzione adeguata, quello che ho fatto è quello di implementare un cingolato che analizza tutti i file HTML generato, e sostituire le "tag di importazione" che si trova (vedi codice qui sotto), per l'importazione dello script mathjax:
lazy val mathFormulaInDoc = taskKey[Unit]("add MathJax script import in doc html to display nice latex formula")
mathFormulaInDoc := {
val apiDir = (doc in Compile).value
val docDir = apiDir // /"some"/"subfolder" // in my case, only api/some/solder is parsed
// will replace this "importTag" by "scriptLine
val importTag = "##import MathJax"
val scriptLine = "<script type=\"text/javascript\" src=\"https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML\"> </script>"
// find all html file and apply patch
if(docDir.isDirectory)
listHtmlFile(docDir).foreach { f =>
val content = Source.fromFile(f).getLines().mkString("\n")
if(content.contains(importTag)) {
val writer = new PrintWriter(f)
writer.write(content.replace(importTag, scriptLine))
writer.close()
}
}
}
// attach this task to doc task
mathFormulaInDoc <<= mathFormulaInDoc triggeredBy (doc in Compile)
// function that find html files recursively
def listHtmlFile(dir: java.io.File): List[java.io.File] = {
dir.listFiles.toList.flatMap { f =>
if(f.getName.endsWith(".html")) List(f)
else if(f.isDirectory) listHtmlFile(f)
else List[File]()
}
}
Come si potrebbe vedere, questa attività crawler è allegata all'attività doc, perché viene eseguita automaticamente da sbt doc
.
Ecco un esempio di documento che verrà reso con formula
/**
* Compute the energy using formula:
*
* ##import MathJax
*
* $$e = m\times c^2$$
*/
def energy(m: Double, c: Double) = m*c*c
Ora, sarebbe possibile migliorare questo codice.Per esempio:
- aggiungere l'importazione di script nella sezione head html
- evitare di leggere i file interi (forse aggiungere una regola che il tag di importazione dovrebbe essere nelle prime righe
- aggiungere lo script al pacchetto sbt, e aggiungilo alla cartella target/api usando qualche compito adatto
fonte
2015-08-20 09:29:27
Grazie mille per la risposta! Forse un'idea per un SIP? – Choucri
è possibile fare il crowling con sbt (doc), e se sì, come? –