0001 import Foundation 0002 0003 0004 class FilterExpression: Resolvable { 0005 let filters
Parser.swift:89 return try FilterExpression(token: token, parser: self): [Filter] 0006 let variable
Variable.swift:11 filters = []Variable.swift:20 filters = try filterBits.map { try parser.findFilter($0) }Variable.swift:22 filters = []Variable.swift:30 return try filters.reduce(result) { x, y in: Variable 0007 0008 init
Variable.swift:12 variable = Variable("")Variable.swift:16 variable = Variable(bits[0])Variable.swift:28 let result = try variable.resolve(context)(token: String, parser: TokenParser) throws { 0009 let bits = token.characters.split("|").map({ String($0).trim(" ") }) 0010 if bits.isEmpty { 0011 filters = [] 0012 variable = Variable("") 0013 throw TemplateSyntaxError("Variable tags must include at least 1 argument") 0014 } 0015 0016 variable = Variable(bits[0]) 0017 let filterBits = bits[1 ..< bits.endIndex] 0018 0019 do { 0020 filters = try filterBits.map { try parser.findFilter($0) } 0021 } catch { 0022 filters = [] 0023 throw error 0024 } 0025 } 0026 0027 func resolve(context: Context) throws -> Any? { 0028 let result = try variable.resolve(context) 0029 0030 return try filters.reduce(result) { x, y in 0031 return try y(x) 0032 } 0033 } 0034 } 0035 0036 /// A structure used to represent a template variable, and to resolve it in a given context. 0037 public struct Variable
Parser.swift:89 return try FilterExpression(token: token, parser: self): Equatable, Resolvable { 0038 public let variable
Include.swift:5 public let templateName: VariableInclude.swift:14 return IncludeNode(templateName: Variable(bits[1]))Include.swift:17 public init(templateName: Variable) {Inheritence.swift:30 let templateName: VariableInheritence.swift:54 return ExtendsNode(templateName: Variable(bits[1]), blocks: nodes)Inheritence.swift:57 init(templateName: Variable, blocks: [String: BlockNode]) {Node.swift:61 self.variable = Variable(variable)Node.swift:80 public let format:VariableNode.swift:83 var format:Variable?Node.swift:90 format = Variable(components[1])Node.swift:96 public init(format:Variable?) {Node.swift:97 self.format = format ?? Variable("\"yyyy-MM-dd 'at' HH:mm\"")Node.swift:119 let variable:VariableNode.swift:151 self.variable = Variable(variable)Node.swift:182 public let variable:VariableNode.swift:233 self.variable = Variable(variable)Variable.swift:6 let variable: VariableVariable.swift:12 variable = Variable("")Variable.swift:16 variable = Variable(bits[0])Variable.swift:88 public func ==(lhs: Variable, rhs: Variable) -> Bool {Variable.swift:88 public func ==(lhs: Variable, rhs: Variable) -> Bool {: String 0039 0040 /// Create a variable with a string representing the variable 0041 public init
Variable.swift:42 self.variable = variableVariable.swift:46 return variable.characters.split(".").map(String.init)Variable.swift:53 if (variable.hasPrefix("'") && variable.hasSuffix("'")) || (variable.hasPrefix("\"") && variable.hasSuffix("\"")) {Variable.swift:53 if (variable.hasPrefix("'") && variable.hasSuffix("'")) || (variable.hasPrefix("\"") && variable.hasSuffix("\"")) {Variable.swift:53 if (variable.hasPrefix("'") && variable.hasSuffix("'")) || (variable.hasPrefix("\"") && variable.hasSuffix("\"")) {Variable.swift:53 if (variable.hasPrefix("'") && variable.hasSuffix("'")) || (variable.hasPrefix("\"") && variable.hasSuffix("\"")) {Variable.swift:55 return variable[variable.startIndex.successor() ..< variable.endIndex.predecessor()]Variable.swift:55 return variable[variable.startIndex.successor() ..< variable.endIndex.predecessor()]Variable.swift:55 return variable[variable.startIndex.successor() ..< variable.endIndex.predecessor()]Variable.swift:89 return lhs.variable == rhs.variableVariable.swift:89 return lhs.variable == rhs.variable(_ variable: String) { 0042 self.variable = variable 0043 } 0044 0045 private func lookup
Include.swift:14 return IncludeNode(templateName: Variable(bits[1]))Inheritence.swift:54 return ExtendsNode(templateName: Variable(bits[1]), blocks: nodes)Node.swift:61 self.variable = Variable(variable)Node.swift:90 format = Variable(components[1])Node.swift:97 self.format = format ?? Variable("\"yyyy-MM-dd 'at' HH:mm\"")Node.swift:151 self.variable = Variable(variable)Node.swift:233 self.variable = Variable(variable)Variable.swift:12 variable = Variable("")Variable.swift:16 variable = Variable(bits[0])() -> [String] { 0046 return variable.characters.split(".").map(String.init) 0047 } 0048 0049 /// Resolve the variable in the given context 0050 public func resolve
Variable.swift:58 for bit in lookup() {(context: Context) throws -> Any? { 0051 var current: Any? = context 0052 0053 if (variable.hasPrefix("'") && variable.hasSuffix("'")) || (variable.hasPrefix("\"") && variable.hasSuffix("\"")) { 0054 // String literal 0055 return variable[variable.startIndex.successor() ..< variable.endIndex.predecessor()] 0056 } 0057 0058 for bit in lookup() { 0059 if let context = current as? Context { 0060 current = context[bit] 0061 } else if let dictionary = resolveDictionary(current) { 0062 current = dictionary[bit] 0063 } else if let array = resolveArray(current) { 0064 if let index = Int(bit) { 0065 current = array[index] 0066 } else if bit == "first" { 0067 current = array.first 0068 } else if bit == "last" { 0069 current = array.last 0070 } else if bit == "count" { 0071 current = array.count 0072 } 0073 } else if let object = current as? NSObject { // NSKeyValueCoding 0074 #if os(Linux) 0075 return nil 0076 #else 0077 current = object.valueForKey(bit) 0078 #endif 0079 } else { 0080 return nil 0081 } 0082 } 0083 0084 return normalize(current) 0085 } 0086 } 0087 0088 public func ==(lhs: Variable, rhs: Variable) -> Bool { 0089 return lhs.variable == rhs.variable 0090 } 0091 0092 0093 func resolveDictionary
Include.swift:26 guard let templateName = try self.templateName.resolve(context) as? String else {Inheritence.swift:67 guard let templateName = try self.templateName.resolve(context) as? String else {Node.swift:102 let format = try self.format.resolve(context)Node.swift:158 let values = try variable.resolve(context)Node.swift:239 let result = try variable.resolve(context)Variable.swift:28 let result = try variable.resolve(context)(current: Any?) -> [String: Any]? { 0094 switch current { 0095 case let dictionary as [String: Any]: 0096 return dictionary 0097 case let dictionary as [String: AnyObject]: 0098 var result: [String: Any] = [:] 0099 for (k, v) in dictionary { 0100 result[k] = v as Any 0101 } 0102 return result 0103 case let dictionary as NSDictionary: 0104 var result: [String: Any] = [:] 0105 for (k, v) in dictionary { 0106 if let k = k as? String { 0107 result[k] = v as Any 0108 } 0109 } 0110 return result 0111 default: 0112 return nil 0113 } 0114 } 0115 0116 func resolveArray
Variable.swift:61 } else if let dictionary = resolveDictionary(current) {Variable.swift:134 if let dictionary = resolveDictionary(current) {(current: Any?) -> [Any]? { 0117 switch current { 0118 case let array as [Any]: 0119 return array 0120 case let array as [AnyObject]: 0121 return array.map { $0 as Any } 0122 case let array as NSArray: 0123 return array.map { $0 as Any } 0124 default: 0125 return nil 0126 } 0127 } 0128 0129 func normalize
Variable.swift:63 } else if let array = resolveArray(current) {Variable.swift:130 if let array = resolveArray(current) {(current: Any?) -> Any? { 0130 if let array = resolveArray(current) { 0131 return array 0132 } 0133 0134 if let dictionary = resolveDictionary(current) { 0135 return dictionary 0136 } 0137 0138 return current 0139 } 0140
Variable.swift:84 return normalize(current)