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
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 {
{ 0024 case BlockNode
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))
(Block) // {{$ name }}...{{/ name }} 0025 case PartialOverrideNode
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)))
(PartialOverride) // {{< name }}...{{/ name }} 0026 case PartialNode
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))
(Partial) // {{> name }} 0027 case SectionNode
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))
(Section) // {{# name }}...{{/ name }}, {{^ name }}...{{/ name }} 0028 case TextNode
TemplateGenerator.swift:97
        case .TextNode(let text):
RenderingEngine.swift:112
        case .TextNode(let text):
TemplateASTNode.swift:84
        return .TextNode(text)
(String) // text 0029 case VariableNode
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))
(Variable) // {{ name }}, {{{ name }}}, {{& name }} 0030 0031 0032 // Define structs instead of long tuples 0033 0034 struct Block
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))
{ 0035 // {{$ name }}innerTemplateAST{{/ name }} 0036 let innerTemplateAST
TemplateGenerator.swift:66
            renderTemplateAST(block.innerTemplateAST)
RenderingEngine.swift:89
            return try renderTemplateAST(resolvedBlock.innerTemplateAST, inContext: context)
: TemplateAST 0037 let name
TemplateGenerator.swift:64
            let name = block.name
RenderingEngine.swift:257
            case .BlockNode(let resolvedBlock) where resolvedBlock.name == block.name:
RenderingEngine.swift:257
            case .BlockNode(let resolvedBlock) where resolvedBlock.name == block.name:
: String 0038 } 0039 0040 struct PartialOverride
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)))
{ 0041 // {{< parentPartial }}childTemplateAST{{/ parentPartial }} 0042 let childTemplateAST
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)
: TemplateAST 0043 let parentPartial
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.templateAST
RenderingEngine.swift:290
                let (resolvedBlock1, modified1) = resolveBlock(block, inChildTemplateAST: partialOverride.parentPartial.templateAST)
: Partial 0044 } 0045 0046 struct Partial
TemplateASTNode.swift:26
    case PartialNode(Partial)                   // {{> name }}
TemplateASTNode.swift:43
        let parentPartial: Partial
TemplateASTNode.swift:71
        return .PartialOverrideNode(PartialOverride(childTemplateAST: childTemplateAST, parentPartial: Partial(templateAST: parentTemplateAST, name: parentPartialName)))
TemplateASTNode.swift:75
        return .PartialNode(Partial(templateAST: templateAST, name: name))
{ 0047 let templateAST
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.templateAST
RenderingEngine.swift:290
                let (resolvedBlock1, modified1) = resolveBlock(block, inChildTemplateAST: partialOverride.parentPartial.templateAST)
RenderingEngine.swift:308
                let (resolvedBlock1, modified1) = resolveBlock(block, inChildTemplateAST: partial.templateAST)
: TemplateAST 0048 let name
TemplateGenerator.swift:72
            let name = partialOverride.parentPartial.name ?? "<null>"
TemplateGenerator.swift:80
            let name = partial.name ?? "<null>"
: String? 0049 } 0050 0051 struct Section
TemplateASTNode.swift:27
    case SectionNode(Section)                   // {{# name }}...{{/ name }}, {{^ name }}...{{/ name }}
TemplateASTNode.swift:80
        return .SectionNode(Section(tag: tag, expression: expression, inverted: inverted))
{ 0052 let tag
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)
: SectionTag 0053 let expression
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)
: Expression 0054 let inverted
TemplateGenerator.swift:89
            if section.inverted {
RenderingEngine.swift:110
            return try renderTag(section.tag, escapesHTML: true, inverted: section.inverted, expression: section.expression, inContext: context)
: Bool 0055 } 0056 0057 struct Variable
TemplateASTNode.swift:29
    case VariableNode(Variable)                 // {{ name }}, {{{ name }}}, {{& name }}
TemplateASTNode.swift:89
        return .VariableNode(Variable(tag: tag, expression: expression, escapesHTML: escapesHTML))
{ 0058 let tag
RenderingEngine.swift:123
            return try renderTag(variable.tag, escapesHTML: variable.escapesHTML, inverted: false, expression: variable.expression, inContext: context)
: VariableTag 0059 let expression
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)
: Expression 0060 let escapesHTML
TemplateGenerator.swift:106
            if variable.escapesHTML {
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
TemplateCompiler.swift:305
                        let blockNode = TemplateASTNode.block(innerTemplateAST: templateAST, name: closedBlockName)
(innerTemplateAST innerTemplateAST: TemplateAST, name: String) -> TemplateASTNode { 0067 return .BlockNode(Block(innerTemplateAST: innerTemplateAST, name: name)) 0068 } 0069 0070 static func partialOverride
TemplateCompiler.swift:285
                        let partialOverrideNode = TemplateASTNode.partialOverride(childTemplateAST: templateAST, parentTemplateAST: parentTemplateAST, parentPartialName: parentPartialName)
Template.swift:272
                    let partialOverrideNode = TemplateASTNode.partialOverride(
(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:314
                    let partialNode = TemplateASTNode.partial(templateAST: partialTemplateAST, name: partialName)
(templateAST templateAST: TemplateAST, name: String?) -> TemplateASTNode { 0075 return .PartialNode(Partial(templateAST: templateAST, name: name)) 0076 } 0077 0078 static func section
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])
(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:111
                        compilationState.currentScope.appendNode(TemplateASTNode.text(text: text))
(text text: String) -> TemplateASTNode { 0084 return .TextNode(text) 0085 } 0086 0087 static func variable
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))
(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