0001 public struct Lexer{ 0002 public let templateString
Template.swift:34 let lexer = Lexer(templateString: templateString): String 0003 0004 public init
Lexer.swift:5 self.templateString = templateStringLexer.swift:28 let scanner = Scanner(templateString)(templateString: String) { 0005 self.templateString = templateString 0006 } 0007 0008 func createToken
Template.swift:34 let lexer = Lexer(templateString: templateString)(string:String) -> Token { 0009 func strip() -> String { 0010 return string[string.startIndex.successor().successor()..<string.endIndex.predecessor().predecessor()].trim(" ") 0011 } 0012 0013 if string.hasPrefix("{{") { 0014 return Token.Variable(value: strip()) 0015 } else if string.hasPrefix("{%") { 0016 return Token.Block(value: strip()) 0017 } else if string.hasPrefix("{#") { 0018 return Token.Comment(value: strip()) 0019 } 0020 0021 return Token.Text(value: string) 0022 } 0023 0024 /// Returns an array of tokens from a given template string. 0025 public func tokenize
Lexer.swift:39 tokens.append(createToken(text.1))Lexer.swift:44 tokens.append(createToken(result))Lexer.swift:46 tokens.append(createToken(scanner.content))() -> [Token] { 0026 var tokens: [Token] = [] 0027 0028 let scanner = Scanner(templateString) 0029 0030 let map = [ 0031 "{{": "}}", 0032 "{%": "%}", 0033 "{#": "#}", 0034 ] 0035 0036 while !scanner.isEmpty { 0037 if let text = scanner.scan(until: ["{{", "{%", "{#"]) { 0038 if !text.1.isEmpty { 0039 tokens.append(createToken(text.1)) 0040 } 0041 0042 let end = map[text.0]! 0043 let result = scanner.scan(until: end, returnUntil: true) 0044 tokens.append(createToken(result)) 0045 } else { 0046 tokens.append(createToken(scanner.content)) 0047 scanner.content = "" 0048 } 0049 } 0050 0051 return tokens 0052 } 0053 } 0054 0055 0056 class Scanner
Template.swift:35 tokens = lexer.tokenize(){ 0057 var content
Lexer.swift:28 let scanner = Scanner(templateString): String 0058 0059 init
Lexer.swift:46 tokens.append(createToken(scanner.content))Lexer.swift:47 scanner.content = ""Lexer.swift:60 self.content = contentLexer.swift:64 return content.isEmptyLexer.swift:72 var index = content.startIndexLexer.swift:73 while index != content.endIndex {Lexer.swift:74 let substring = content[index..<content.endIndex]Lexer.swift:74 let substring = content[index..<content.endIndex]Lexer.swift:76 let result = content[content.startIndex..<index]Lexer.swift:76 let result = content[content.startIndex..<index]Lexer.swift:77 content = substringLexer.swift:80 content = content[until.endIndex..<content.endIndex]Lexer.swift:80 content = content[until.endIndex..<content.endIndex]Lexer.swift:80 content = content[until.endIndex..<content.endIndex]Lexer.swift:98 var index = content.startIndexLexer.swift:99 while index != content.endIndex {Lexer.swift:100 let substring = content[index..<content.endIndex]Lexer.swift:100 let substring = content[index..<content.endIndex]Lexer.swift:103 let result = content[content.startIndex..<index]Lexer.swift:103 let result = content[content.startIndex..<index]Lexer.swift:104 content = substring(_ content: String) { 0060 self.content = content 0061 } 0062 0063 var isEmpty
Lexer.swift:28 let scanner = Scanner(templateString): Bool { 0064 return content.isEmpty 0065 } 0066 0067 func scan
Lexer.swift:36 while !scanner.isEmpty {(until until: String, returnUntil: Bool = false) -> String { 0068 if until.isEmpty { 0069 return "" 0070 } 0071 0072 var index = content.startIndex 0073 while index != content.endIndex { 0074 let substring = content[index..<content.endIndex] 0075 if substring.hasPrefix(until) { 0076 let result = content[content.startIndex..<index] 0077 content = substring 0078 0079 if returnUntil { 0080 content = content[until.endIndex..<content.endIndex] 0081 return result + until 0082 } 0083 0084 return result 0085 } 0086 0087 index = index.successor() 0088 } 0089 0090 return "" 0091 } 0092 0093 func scan
Lexer.swift:43 let result = scanner.scan(until: end, returnUntil: true)(until until: [String]) -> (String, String)? { 0094 if until.isEmpty { 0095 return nil 0096 } 0097 0098 var index = content.startIndex 0099 while index != content.endIndex { 0100 let substring = content[index..<content.endIndex] 0101 for string in until { 0102 if substring.hasPrefix(string) { 0103 let result = content[content.startIndex..<index] 0104 content = substring 0105 return (string, result) 0106 } 0107 } 0108 0109 index = index.successor() 0110 } 0111 0112 return nil 0113 } 0114 } 0115 0116 0117 extension String { 0118 func findFirstNot
Lexer.swift:37 if let text = scanner.scan(until: ["{{", "{%", "{#"]) {(character: Character) -> String.Index? { 0119 var index = startIndex 0120 while index != endIndex { 0121 if character != self[index] { 0122 return index 0123 } 0124 index = index.successor() 0125 } 0126 0127 return nil 0128 } 0129 0130 func findLastNot
Lexer.swift:143 let first = findFirstNot(character) ?? startIndex(character: Character) -> String.Index? { 0131 var index = endIndex.predecessor() 0132 while index != startIndex { 0133 if character != self[index] { 0134 return index.successor() 0135 } 0136 index = index.predecessor() 0137 } 0138 0139 return nil 0140 } 0141 0142 func trim
Lexer.swift:144 let last = findLastNot(character) ?? endIndex(character: Character) -> String { 0143 let first = findFirstNot(character) ?? startIndex 0144 let last = findLastNot(character) ?? endIndex 0145 return self[first..<last] 0146 } 0147 } 0148
Lexer.swift:10 return string[string.startIndex.successor().successor()..<string.endIndex.predecessor().predecessor()].trim(" ")Variable.swift:9 let bits = token.characters.split("|").map({ String($0).trim(" ") })