Skip to content

Instantly share code, notes, and snippets.

@naithar
Created March 4, 2017 15:08
Show Gist options
  • Save naithar/dc184031faa8de19f2892525f07f261c to your computer and use it in GitHub Desktop.
Save naithar/dc184031faa8de19f2892525f07f261c to your computer and use it in GitHub Desktop.
import Stencil
let text = "{% exact %} {{aaa}} {% endexact %}"
let ext = Extension()
class ExactNode: NodeType {
let string: String
init(_ string: String) {
self.string = string
}
func render(_ context:Context) throws -> String {
return self.string
}
class func parse(_ parser: TokenParser) -> ExactNode {
var string = ""
loop: while let token = parser.nextToken() {
switch token {
case .block(value: "endexact"):
break loop
case .block(value: let value):
string += "{%" + value + "%}"
case .text(value: let value):
string += value
case .variable(value: let value):
string += "{{" + value + "}}"
default:
break
}
}
return ExactNode(string)
}
}
ext.registerTag("exact") { parser, token in
print(token)
return ExactNode.parse(parser)
}
let e = Environment(extensions: [ext])
print(try e.renderTemplate(string: text, context: ["aaa" : 10]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment