diff --git a/Sources/Lexer.swift b/Sources/Lexer.swift index 26d6a1a..6781f0d 100644 --- a/Sources/Lexer.swift +++ b/Sources/Lexer.swift @@ -7,6 +7,13 @@ struct Lexer { let templateString: String let lines: [Line] + private static let tokenChars: [Unicode.Scalar] = ["{", "%", "#"] + private static let tokenCharMap: [Unicode.Scalar: Unicode.Scalar] = [ + "{": "}", + "%": "%", + "#": "#" + ] + init(templateName: String? = nil, templateString: String) { self.templateName = templateName self.templateString = templateString @@ -20,9 +27,7 @@ struct Lexer { func createToken(string: String, at range: Range) -> Token { func strip() -> String { guard string.count > 4 else { return "" } - let start = string.index(string.startIndex, offsetBy: 2) - let end = string.index(string.endIndex, offsetBy: -2) - let trimmed = String(string[start.. + private static let tokenStartDelimiter: Unicode.Scalar = "{" + private static let tokenEndDelimiter: Unicode.Scalar = "}" + init(_ content: String) { self.originalContent = content self.content = content @@ -105,64 +106,43 @@ class Scanner { return content.isEmpty } - func scan(until: String, returnUntil: Bool = false) -> String { - var index = content.startIndex + func scanForTokenEnd(_ tokenChar: Unicode.Scalar) -> String { + var foundChar = false - if until.isEmpty { - return "" - } - - range = range.upperBound.. (String, String)? { - if until.isEmpty { - return nil - } + func scanForTokenStart(_ tokenChars: [Unicode.Scalar]) -> (Unicode.Scalar, String)? { + var foundBrace = false - var index = content.startIndex range = range.upperBound.. String.Index? { var index = startIndex