Zunächst einmal, ich bin neu in Scala.Scala - replaceAllIn
Ich versuche, einen Template-Parser in Scala zu machen (ähnlich Smarty (PHP)). Es muss das Dokument durchsuchen und alles in "{{}}" -Tags durch etwas ersetzen, das in der HashMap bereitgestellt wird.
Ich bin derzeit hier fest:
import scala.collection.mutable.HashMap
import scala.io.Source
class Template(filename: String, vars: HashMap[Symbol, Any]) {
def parse() = {
var contents = Source.fromFile(filename, "ASCII").mkString
var rule = """\{\{(.*)\}\}""".r
//for(rule(v) <- rule findAllIn contents) {
// yield v
//}
//rule.replaceAllIn(contents,)
}
}
var t = new Template("FILENAME", new HashMap[Symbol, Any])
println(t.parse)
Der Teil der, die ich habe, sind Dinge, kommentierte, dass ich gedacht habe über das tun.
Dank
Ich habe ein wenig weiter kommen ...
import scala.collection.mutable.HashMap
import scala.io.Source
import java.util.regex.Pattern
import java.util.regex.Matcher
class Template(filename: String, vars: HashMap[Symbol, Any]) {
def findAndReplace(m: Matcher)(callback: String => String):String = {
val sb = new StringBuffer
while (m.find) {
m.appendReplacement(sb, callback(m.group(1)))
}
m.appendTail(sb)
sb.toString
}
def parse() = {
var contents = Source.fromFile(filename, "ASCII").mkString
val m = Pattern.compile("""\{\{(.*)\}\}""").matcher(contents)
findAndReplace(m){ x => x }
}
}
var t = new Template("FILENAME.html", new HashMap[Symbol, Any])
println(t.parse)
Im Moment ist es zur Zeit nur, was innerhalb des Tags war fügt hinzu, zurück in das Dokument. Ich frage mich, ob es einen einfacheren Weg gibt, in Scala einen Regexp zu finden und zu ersetzen.
Es tut mir leid - was ist Ihre Frage? –
In dem Dokument wird es Variablen geben, die von "{{" und "}}" z. "{{ Name }}". Ich muss den besten Weg finden, jede Instanz von "{{WHATEVER}}" mit einem Wert innerhalb der Hashmap zu tauschen. –