...

Source file src/github.com/noirbizarre/gonja/ext/django/statements/ifnotequal.go

Documentation: github.com/noirbizarre/gonja/ext/django/statements

     1  package statements
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/noirbizarre/gonja/nodes"
     7  	"github.com/noirbizarre/gonja/parser"
     8  	"github.com/noirbizarre/gonja/tokens"
     9  )
    10  
    11  type IfNotEqualStmt struct {
    12  	Location    *tokens.Token
    13  	var1, var2  nodes.Expression
    14  	thenWrapper *nodes.Wrapper
    15  	elseWrapper *nodes.Wrapper
    16  }
    17  
    18  func (stmt *IfNotEqualStmt) Position() *tokens.Token { return stmt.Location }
    19  func (stmt *IfNotEqualStmt) String() string {
    20  	t := stmt.Position()
    21  	return fmt.Sprintf("IfNotEqualStmt(Line=%d Col=%d)", t.Line, t.Col)
    22  }
    23  
    24  // func (node *IfNotEqualStmt) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error {
    25  // 	r1, err := node.var1.Evaluate(ctx)
    26  // 	if err != nil {
    27  // 		return err
    28  // 	}
    29  // 	r2, err := node.var2.Evaluate(ctx)
    30  // 	if err != nil {
    31  // 		return err
    32  // 	}
    33  
    34  // 	result := !r1.EqualValueTo(r2)
    35  
    36  // 	if result {
    37  // 		return node.thenWrapper.Execute(ctx, writer)
    38  // 	}
    39  // 	if node.elseWrapper != nil {
    40  // 		return node.elseWrapper.Execute(ctx, writer)
    41  // 	}
    42  // 	return nil
    43  // }
    44  
    45  func ifNotEqualParser(p *parser.Parser, args *parser.Parser) (nodes.Statement, error) {
    46  	ifnotequalNode := &IfNotEqualStmt{}
    47  
    48  	// Parse two expressions
    49  	var1, err := args.ParseExpression()
    50  	if err != nil {
    51  		return nil, err
    52  	}
    53  	var2, err := args.ParseExpression()
    54  	if err != nil {
    55  		return nil, err
    56  	}
    57  	ifnotequalNode.var1 = var1
    58  	ifnotequalNode.var2 = var2
    59  
    60  	if !args.End() {
    61  		return nil, args.Error("ifequal only takes 2 args.", nil)
    62  	}
    63  
    64  	// Wrap then/else-blocks
    65  	wrapper, endargs, err := p.WrapUntil("else", "endifnotequal")
    66  	if err != nil {
    67  		return nil, err
    68  	}
    69  	ifnotequalNode.thenWrapper = wrapper
    70  
    71  	if !endargs.End() {
    72  		return nil, endargs.Error("Arguments not allowed here.", nil)
    73  	}
    74  
    75  	if wrapper.EndTag == "else" {
    76  		// if there's an else in the if-statement, we need the else-Block as well
    77  		wrapper, endargs, err = p.WrapUntil("endifnotequal")
    78  		if err != nil {
    79  			return nil, err
    80  		}
    81  		ifnotequalNode.elseWrapper = wrapper
    82  
    83  		if !endargs.End() {
    84  			return nil, endargs.Error("Arguments not allowed here.", nil)
    85  		}
    86  	}
    87  
    88  	return ifnotequalNode, nil
    89  }
    90  
    91  func init() {
    92  	All.Register("ifnotequal", ifNotEqualParser)
    93  }
    94  

View as plain text