В качестве альтернативы, если вам нужно больше преобразований *, вы можете начать с этого.Он также будет работать с вложенными тегами <a/>
, что бы это ни значило.
В коде есть необходимость в обработке escape.Например, некоторые символы экранированы в XML, а не латексные и наоборот.Не стесняйтесь добавлять это.
import xml._
val input = <p>And now try it on a <a href="link1">text</a> with <a href="link2">two urls</a></p>
def mkURL(meta: MetaData, text: String) = {
val url = meta.asAttrMap.get("href")
"\\url{%s}{%s}".format(url getOrElse "", text)
}
def transform(xhtml: NodeSeq): String = {
xhtml.map { node =>
node match {
case Node("p", _, ch@_*) => transform(ch)
case Node("a", meta, ch@_*) => mkURL(meta, transform(ch))
case x => x.toString
}
} mkString
}
println(transform(input))
// And now try it on a \url{link1}{text} with \url{link2}{two urls}
[*] Добавление поддержки для \emph
будет что-то вроде
case Node("em", _, ch@_*) => transform(ch).mkString("\\emph{", "", "}")