0001 // The MIT License 0002 // 0003 // Copyright (c) 2015 Gwendal Roué 0004 // 0005 // Permission is hereby granted, free of charge, to any person obtaining a copy 0006 // of this software and associated documentation files (the "Software"), to deal 0007 // in the Software without restriction, including without limitation the rights 0008 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 0009 // copies of the Software, and to permit persons to whom the Software is 0010 // furnished to do so, subject to the following conditions: 0011 // 0012 // The above copyright notice and this permission notice shall be included in 0013 // all copies or substantial portions of the Software. 0014 // 0015 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 0016 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 0017 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 0018 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 0019 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 0020 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 0021 // THE SOFTWARE. 0022 0023 enum TemplateASTNode{ 0024 case BlockNode
TemplateCompiler.swift:111 compilationState.currentScope.appendNode(TemplateASTNode.text(text: text))TemplateCompiler.swift:122 compilationState.currentScope.appendNode(TemplateASTNode.variable(expression: expression, contentType: compilationState.contentType, escapesHTML: true, token: token))TemplateCompiler.swift:139 compilationState.currentScope.appendNode(TemplateASTNode.variable(expression: expression, contentType: compilationState.contentType, escapesHTML: false, token: token))TemplateCompiler.swift:224 let sectionTag = TemplateASTNode.section(templateAST: templateAST, expression: closedExpression, inverted: false, openingToken: openingToken, innerTemplateString: templateString[innerContentRange])TemplateCompiler.swift:254 let sectionTag = TemplateASTNode.section(templateAST: templateAST, expression: closedExpression, inverted: true, openingToken: openingToken, innerTemplateString: templateString[innerContentRange])TemplateCompiler.swift:285 let partialOverrideNode = TemplateASTNode.partialOverride(childTemplateAST: templateAST, parentTemplateAST: parentTemplateAST, parentPartialName: parentPartialName)TemplateCompiler.swift:305 let blockNode = TemplateASTNode.block(innerTemplateAST: templateAST, name: closedBlockName)TemplateCompiler.swift:314 let partialNode = TemplateASTNode.partial(templateAST: partialTemplateAST, name: partialName)TemplateCompiler.swift:372 var templateASTNodes: [TemplateASTNode]TemplateCompiler.swift:379 func appendNode(node: TemplateASTNode) {TemplateGenerator.swift:59 func renderTemplateASTNode(node: TemplateASTNode) {Context.swift:216 case PartialOverride(partialOverride: TemplateASTNode.PartialOverride, parent: Context)Context.swift:252 var partialOverrideStack: [TemplateASTNode.PartialOverride] {Context.swift:268 func extendedContext(partialOverride partialOverride: TemplateASTNode.PartialOverride) -> Context {RenderingEngine.swift:82 private func renderNode(node: TemplateASTNode, inContext context: Context) throws {RenderingEngine.swift:209 private func resolveBlock(block: TemplateASTNode.Block, inContext context: Context) -> TemplateASTNode.Block {RenderingEngine.swift:209 private func resolveBlock(block: TemplateASTNode.Block, inContext context: Context) -> TemplateASTNode.Block {RenderingEngine.swift:248 private func resolveBlock(block: TemplateASTNode.Block, inChildTemplateAST childTemplateAST: TemplateAST) -> (TemplateASTNode.Block, Bool)RenderingEngine.swift:248 private func resolveBlock(block: TemplateASTNode.Block, inChildTemplateAST childTemplateAST: TemplateAST) -> (TemplateASTNode.Block, Bool)Template.swift:272 let partialOverrideNode = TemplateASTNode.partialOverride(TemplateAST.swift:40 case Defined(nodes: [TemplateASTNode], contentType: ContentType)TemplateAST.swift:59 convenience init(nodes: [TemplateASTNode], contentType: ContentType) {TemplateAST.swift:66 var nodes: [TemplateASTNode]! {TemplateASTNode.swift:66 static func block(innerTemplateAST innerTemplateAST: TemplateAST, name: String) -> TemplateASTNode {TemplateASTNode.swift:70 static func partialOverride(childTemplateAST childTemplateAST: TemplateAST, parentTemplateAST: TemplateAST, parentPartialName: String? = nil) -> TemplateASTNode {TemplateASTNode.swift:74 static func partial(templateAST templateAST: TemplateAST, name: String?) -> TemplateASTNode {TemplateASTNode.swift:78 static func section(templateAST templateAST: TemplateAST, expression: Expression, inverted: Bool, openingToken: TemplateToken, innerTemplateString: String) -> TemplateASTNode {TemplateASTNode.swift:83 static func text(text text: String) -> TemplateASTNode {TemplateASTNode.swift:87 static func variable(expression expression: Expression, contentType: ContentType, escapesHTML: Bool, token: TemplateToken) -> TemplateASTNode {(Block) // {{$ name }}...{{/ name }} 0025 case PartialOverrideNode
TemplateGenerator.swift:61 case .BlockNode(let block):RenderingEngine.swift:84 case .BlockNode(let block):RenderingEngine.swift:257 case .BlockNode(let resolvedBlock) where resolvedBlock.name == block.name:TemplateASTNode.swift:67 return .BlockNode(Block(innerTemplateAST: innerTemplateAST, name: name))(PartialOverride) // {{< name }}...{{/ name }} 0026 case PartialNode
TemplateGenerator.swift:69 case .PartialOverrideNode(let partialOverride):RenderingEngine.swift:91 case .PartialOverrideNode(let partialOverride):RenderingEngine.swift:263 case .PartialOverrideNode(let partialOverride):TemplateASTNode.swift:71 return .PartialOverrideNode(PartialOverride(childTemplateAST: childTemplateAST, parentPartial: Partial(templateAST: parentTemplateAST, name: parentPartialName)))(Partial) // {{> name }} 0027 case SectionNode
TemplateGenerator.swift:77 case .PartialNode(let partial):RenderingEngine.swift:98 case .PartialNode(let partial):RenderingEngine.swift:294 case .PartialNode(let partial):TemplateASTNode.swift:75 return .PartialNode(Partial(templateAST: templateAST, name: name))(Section) // {{# name }}...{{/ name }}, {{^ name }}...{{/ name }} 0028 case TextNode
TemplateGenerator.swift:83 case .SectionNode(let section):RenderingEngine.swift:104 case .SectionNode(let section):TemplateASTNode.swift:80 return .SectionNode(Section(tag: tag, expression: expression, inverted: inverted))(String) // text 0029 case VariableNode
TemplateGenerator.swift:97 case .TextNode(let text):RenderingEngine.swift:112 case .TextNode(let text):TemplateASTNode.swift:84 return .TextNode(text)(Variable) // {{ name }}, {{{ name }}}, {{& name }} 0030 0031 0032 // Define structs instead of long tuples 0033 0034 struct Block
TemplateGenerator.swift:100 case .VariableNode(let variable):RenderingEngine.swift:116 case .VariableNode(let variable):TemplateASTNode.swift:89 return .VariableNode(Variable(tag: tag, expression: expression, escapesHTML: escapesHTML)){ 0035 // {{$ name }}innerTemplateAST{{/ name }} 0036 let innerTemplateAST
RenderingEngine.swift:209 private func resolveBlock(block: TemplateASTNode.Block, inContext context: Context) -> TemplateASTNode.Block {RenderingEngine.swift:209 private func resolveBlock(block: TemplateASTNode.Block, inContext context: Context) -> TemplateASTNode.Block {RenderingEngine.swift:248 private func resolveBlock(block: TemplateASTNode.Block, inChildTemplateAST childTemplateAST: TemplateAST) -> (TemplateASTNode.Block, Bool)RenderingEngine.swift:248 private func resolveBlock(block: TemplateASTNode.Block, inChildTemplateAST childTemplateAST: TemplateAST) -> (TemplateASTNode.Block, Bool)TemplateASTNode.swift:24 case BlockNode(Block) // {{$ name }}...{{/ name }}TemplateASTNode.swift:67 return .BlockNode(Block(innerTemplateAST: innerTemplateAST, name: name)): TemplateAST 0037 let name
TemplateGenerator.swift:66 renderTemplateAST(block.innerTemplateAST)RenderingEngine.swift:89 return try renderTemplateAST(resolvedBlock.innerTemplateAST, inContext: context): String 0038 } 0039 0040 struct PartialOverride
TemplateGenerator.swift:64 let name = block.nameRenderingEngine.swift:257 case .BlockNode(let resolvedBlock) where resolvedBlock.name == block.name:RenderingEngine.swift:257 case .BlockNode(let resolvedBlock) where resolvedBlock.name == block.name:{ 0041 // {{< parentPartial }}childTemplateAST{{/ parentPartial }} 0042 let childTemplateAST
Context.swift:216 case PartialOverride(partialOverride: TemplateASTNode.PartialOverride, parent: Context)Context.swift:252 var partialOverrideStack: [TemplateASTNode.PartialOverride] {Context.swift:268 func extendedContext(partialOverride partialOverride: TemplateASTNode.PartialOverride) -> Context {TemplateASTNode.swift:25 case PartialOverrideNode(PartialOverride) // {{< name }}...{{/ name }}TemplateASTNode.swift:71 return .PartialOverrideNode(PartialOverride(childTemplateAST: childTemplateAST, parentPartial: Partial(templateAST: parentTemplateAST, name: parentPartialName))): TemplateAST 0043 let parentPartial
TemplateGenerator.swift:74 renderTemplateAST(partialOverride.childTemplateAST)RenderingEngine.swift:236 let (resolvedBlock, modified) = resolveBlock(block, inChildTemplateAST: partialOverride.childTemplateAST)RenderingEngine.swift:291 let (resolvedBlock2, modified2) = resolveBlock(resolvedBlock1, inChildTemplateAST: partialOverride.childTemplateAST): Partial 0044 } 0045 0046 struct Partial
TemplateGenerator.swift:72 let name = partialOverride.parentPartial.name ?? "<null>"RenderingEngine.swift:96 return try renderTemplateAST(partialOverride.parentPartial.templateAST, inContext: context)RenderingEngine.swift:232 let parentTemplateAST = partialOverride.parentPartial.templateASTRenderingEngine.swift:290 let (resolvedBlock1, modified1) = resolveBlock(block, inChildTemplateAST: partialOverride.parentPartial.templateAST){ 0047 let templateAST
TemplateASTNode.swift:26 case PartialNode(Partial) // {{> name }}TemplateASTNode.swift:43 let parentPartial: PartialTemplateASTNode.swift:71 return .PartialOverrideNode(PartialOverride(childTemplateAST: childTemplateAST, parentPartial: Partial(templateAST: parentTemplateAST, name: parentPartialName)))TemplateASTNode.swift:75 return .PartialNode(Partial(templateAST: templateAST, name: name)): TemplateAST 0048 let name
RenderingEngine.swift:96 return try renderTemplateAST(partialOverride.parentPartial.templateAST, inContext: context)RenderingEngine.swift:102 return try renderTemplateAST(partial.templateAST, inContext: context)RenderingEngine.swift:232 let parentTemplateAST = partialOverride.parentPartial.templateASTRenderingEngine.swift:290 let (resolvedBlock1, modified1) = resolveBlock(block, inChildTemplateAST: partialOverride.parentPartial.templateAST)RenderingEngine.swift:308 let (resolvedBlock1, modified1) = resolveBlock(block, inChildTemplateAST: partial.templateAST): String? 0049 } 0050 0051 struct Section
TemplateGenerator.swift:72 let name = partialOverride.parentPartial.name ?? "<null>"TemplateGenerator.swift:80 let name = partial.name ?? "<null>"{ 0052 let tag
TemplateASTNode.swift:27 case SectionNode(Section) // {{# name }}...{{/ name }}, {{^ name }}...{{/ name }}TemplateASTNode.swift:80 return .SectionNode(Section(tag: tag, expression: expression, inverted: inverted)): SectionTag 0053 let expression
TemplateGenerator.swift:94 renderTemplateAST(section.tag.innerTemplateAST)RenderingEngine.swift:110 return try renderTag(section.tag, escapesHTML: true, inverted: section.inverted, expression: section.expression, inContext: context): Expression 0054 let inverted
TemplateGenerator.swift:88 let expression = ExpressionGenerator().stringFromExpression(section.expression)RenderingEngine.swift:110 return try renderTag(section.tag, escapesHTML: true, inverted: section.inverted, expression: section.expression, inContext: context): Bool 0055 } 0056 0057 struct Variable
TemplateGenerator.swift:89 if section.inverted {RenderingEngine.swift:110 return try renderTag(section.tag, escapesHTML: true, inverted: section.inverted, expression: section.expression, inContext: context){ 0058 let tag
TemplateASTNode.swift:29 case VariableNode(Variable) // {{ name }}, {{{ name }}}, {{& name }}TemplateASTNode.swift:89 return .VariableNode(Variable(tag: tag, expression: expression, escapesHTML: escapesHTML)): VariableTag 0059 let expression
RenderingEngine.swift:123 return try renderTag(variable.tag, escapesHTML: variable.escapesHTML, inverted: false, expression: variable.expression, inContext: context): Expression 0060 let escapesHTML
TemplateGenerator.swift:105 let expression = ExpressionGenerator().stringFromExpression(variable.expression)RenderingEngine.swift:123 return try renderTag(variable.tag, escapesHTML: variable.escapesHTML, inverted: false, expression: variable.expression, inContext: context): Bool 0061 } 0062 0063 0064 // Factory methods 0065 0066 static func block
TemplateGenerator.swift:106 if variable.escapesHTML {RenderingEngine.swift:123 return try renderTag(variable.tag, escapesHTML: variable.escapesHTML, inverted: false, expression: variable.expression, inContext: context)(innerTemplateAST innerTemplateAST: TemplateAST, name: String) -> TemplateASTNode { 0067 return .BlockNode(Block(innerTemplateAST: innerTemplateAST, name: name)) 0068 } 0069 0070 static func partialOverride
TemplateCompiler.swift:305 let blockNode = TemplateASTNode.block(innerTemplateAST: templateAST, name: closedBlockName)(childTemplateAST childTemplateAST: TemplateAST, parentTemplateAST: TemplateAST, parentPartialName: String? = nil) -> TemplateASTNode { 0071 return .PartialOverrideNode(PartialOverride(childTemplateAST: childTemplateAST, parentPartial: Partial(templateAST: parentTemplateAST, name: parentPartialName))) 0072 } 0073 0074 static func partial
TemplateCompiler.swift:285 let partialOverrideNode = TemplateASTNode.partialOverride(childTemplateAST: templateAST, parentTemplateAST: parentTemplateAST, parentPartialName: parentPartialName)Template.swift:272 let partialOverrideNode = TemplateASTNode.partialOverride((templateAST templateAST: TemplateAST, name: String?) -> TemplateASTNode { 0075 return .PartialNode(Partial(templateAST: templateAST, name: name)) 0076 } 0077 0078 static func section
TemplateCompiler.swift:314 let partialNode = TemplateASTNode.partial(templateAST: partialTemplateAST, name: partialName)(templateAST templateAST: TemplateAST, expression: Expression, inverted: Bool, openingToken: TemplateToken, innerTemplateString: String) -> TemplateASTNode { 0079 let tag = SectionTag(innerTemplateAST: templateAST, openingToken: openingToken, innerTemplateString: innerTemplateString) 0080 return .SectionNode(Section(tag: tag, expression: expression, inverted: inverted)) 0081 } 0082 0083 static func text
TemplateCompiler.swift:224 let sectionTag = TemplateASTNode.section(templateAST: templateAST, expression: closedExpression, inverted: false, openingToken: openingToken, innerTemplateString: templateString[innerContentRange])TemplateCompiler.swift:254 let sectionTag = TemplateASTNode.section(templateAST: templateAST, expression: closedExpression, inverted: true, openingToken: openingToken, innerTemplateString: templateString[innerContentRange])(text text: String) -> TemplateASTNode { 0084 return .TextNode(text) 0085 } 0086 0087 static func variable
TemplateCompiler.swift:111 compilationState.currentScope.appendNode(TemplateASTNode.text(text: text))(expression expression: Expression, contentType: ContentType, escapesHTML: Bool, token: TemplateToken) -> TemplateASTNode { 0088 let tag = VariableTag(contentType: contentType, token: token) 0089 return .VariableNode(Variable(tag: tag, expression: expression, escapesHTML: escapesHTML)) 0090 } 0091 } 0092
TemplateCompiler.swift:122 compilationState.currentScope.appendNode(TemplateASTNode.variable(expression: expression, contentType: compilationState.contentType, escapesHTML: true, token: token))TemplateCompiler.swift:139 compilationState.currentScope.appendNode(TemplateASTNode.variable(expression: expression, contentType: compilationState.contentType, escapesHTML: false, token: token))