Прежде всего, я новичок в Scala.
Я пытаюсь сделать синтаксический анализатор шаблонов в Scala (аналог Smarty (PHP)). Необходимо выполнить поиск в документе, заменив что-либо внутри тегов "{{}}" на все, что предусмотрено в HashMap.
Я сейчас застрял здесь:
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)
Часть, которую я прокомментировал, - это то, о чем я думал.
Спасибо
Я прошел немного дальше ...
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)
В данный момент он просто добавляет то, что было внутри тега, обратно в документ. Мне интересно, есть ли более простой способ сделать регулярное выражение стиля поиска и замены в Scala?