twig/extension/core/
mod.rs

1use environment::Environment;
2use extension::Extension;
3use operator::Operator;
4use nodes::TokenParser;
5use function::{ Function, Arg };
6use little::Instruction;
7use instructions::CompiledExpression;
8
9pub mod token_parsers;
10pub mod error;
11
12pub struct CoreExtension;
13
14impl Extension for CoreExtension {
15    fn apply(env: &mut Environment) {
16        env.push_operators(vec![
17            Operator::new_unary("not", 50, |_| unimplemented!()),
18            Operator::new_unary("-", 500, |_| unimplemented!()),
19            Operator::new_unary("+", 500, |_| unimplemented!()),
20
21            Operator::new_binary_left("or"         , 10, |_, _| unimplemented!()),
22            Operator::new_binary_left("and"        , 15, |_, _| unimplemented!()),
23            Operator::new_binary_left("b-or"       , 16, |_, _| unimplemented!()),
24            Operator::new_binary_left("b-xor"      , 17, |_, _| unimplemented!()),
25            Operator::new_binary_left("b-and"      , 18, |_, _| unimplemented!()),
26            Operator::new_binary_left("=="         , 20, |_, _| unimplemented!()),
27            Operator::new_binary_left("!="         , 20, |_, _| unimplemented!()),
28            Operator::new_binary_left("<"          , 20, |_, _| unimplemented!()),
29            Operator::new_binary_left(">"          , 20, |_, _| unimplemented!()),
30            Operator::new_binary_left(">="         , 20, |_, _| unimplemented!()),
31            Operator::new_binary_left("<="         , 20, |_, _| unimplemented!()),
32            Operator::new_binary_left("not in"     , 20, |_, _| unimplemented!()),
33            Operator::new_binary_left("in"         , 20, |_, _| unimplemented!()),
34            Operator::new_binary_left("matches"    , 20, |_, _| unimplemented!()),
35            Operator::new_binary_left("starts with", 20, |_, _| unimplemented!()),
36            Operator::new_binary_left("ends with"  , 20, |_, _| unimplemented!()),
37            Operator::new_binary_left(".."         , 25, |_, _| unimplemented!()),
38            Operator::new_binary_left("+"          , 30, |_, _| unimplemented!()),
39            Operator::new_binary_left("-"          , 30, |_, _| unimplemented!()),
40            Operator::new_binary_left("~"          , 40, |_, _| unimplemented!()),
41            Operator::new_binary_left("*"          , 60, |_, _| unimplemented!()),
42            Operator::new_binary_left("/"          , 60, |_, _| unimplemented!()),
43            Operator::new_binary_left("//"         , 60, |_, _| unimplemented!()),
44            Operator::new_binary_left("%"          , 60, |_, _| unimplemented!()),
45            Operator::new_binary_left("is"         , 100, |_, _| unimplemented!()),
46            Operator::new_binary_left("is not"     , 100, |_, _| unimplemented!()),
47
48            Operator::new_binary_right("**"         , 200, |_, _| unimplemented!()),
49        ]);
50
51        env.push_token_parsers(vec![
52            TokenParser::new(token_parsers::For::new()),
53            TokenParser::new(token_parsers::If::new()),
54            TokenParser::new(token_parsers::Extends::new()),
55            TokenParser::new(token_parsers::Include::new()),
56            TokenParser::new(token_parsers::Block::new()),
57            TokenParser::new(token_parsers::Use::new()),
58            TokenParser::new(token_parsers::Filter::new()),
59            TokenParser::new(token_parsers::Macro::new()),
60            TokenParser::new(token_parsers::Import::new()),
61            TokenParser::new(token_parsers::From::new()),
62            TokenParser::new(token_parsers::Set::new()),
63            TokenParser::new(token_parsers::Spaceless::new()),
64            TokenParser::new(token_parsers::Flush::new()),
65            TokenParser::new(token_parsers::Do::new()),
66            TokenParser::new(token_parsers::Embed::new()),
67        ]);
68
69        env.push_functions(vec![
70            Function::new_static("include", vec![Arg::Anon], |staging| {
71                //staging.instr(Instruction::Push(staging.use_str_const("include")));
72                //staging.instr(Instruction::Push(staging.use_str_const("include")));
73                Ok(CompiledExpression::empty("include"))
74            })
75        ]);
76    }
77}