summaryrefslogtreecommitdiff
path: root/src/parser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.rs')
-rw-r--r--src/parser.rs28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/parser.rs b/src/parser.rs
index be5492c..6ba6cfe 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -70,7 +70,7 @@ impl<'a> SymbolHelper for Option<Symbol<'a>> {
70 SymbolType::Output | 70 SymbolType::Output |
71 SymbolType::Loop | 71 SymbolType::Loop |
72 SymbolType::If | 72 SymbolType::If |
73 SymbolType::ElseIf | 73 SymbolType::ElIf |
74 SymbolType::Else | 74 SymbolType::Else |
75 SymbolType::Show => true, 75 SymbolType::Show => true,
76 _ => false 76 _ => false
@@ -88,13 +88,23 @@ pub struct Parser {
88} 88}
89 89
90/** 90/**
91 * input: input tag 91 * input: input complete_tag
92 * | input tag_pair
93 * | input text 92 * | input text
94 * | 93 * |
95 * ; 94 * ;
96 * 95 *
97 * tag: '[|' tag_guts '|]' 96 * tag: unary_tag
97 * | multinary_open_tag
98 * | multinary_mid_tag
99 * | multinary_close_tag
100 * ;
101 *
102 * unary_tag: '[|' tag_guts '|]'
103 * ;
104 *
105 * | '[|' tag_guts '|>'
106 * | '<|' tag_guts '|>'
107 * | '<|' tag_guts '|]'
98 * ; 108 * ;
99 * 109 *
100 * tag_pair: open_tag tag_body close_tag 110 * tag_pair: open_tag tag_body close_tag
@@ -295,7 +305,7 @@ impl Parser {
295 if ctx.next().is_some() { 305 if ctx.next().is_some() {
296 match ctx.cur().unwrap().symbol() { 306 match ctx.cur().unwrap().symbol() {
297 SymbolType::View | SymbolType::Show | SymbolType::Loop | 307 SymbolType::View | SymbolType::Show | SymbolType::Loop |
298 SymbolType::If | SymbolType::ElseIf | SymbolType::Else | 308 SymbolType::If | SymbolType::ElIf | SymbolType::Else |
299 SymbolType::Output => { 309 SymbolType::Output => {
300 let name_sym = ctx.cur().unwrap(); 310 let name_sym = ctx.cur().unwrap();
301 ctx.next(); 311 ctx.next();
@@ -638,6 +648,14 @@ impl<'a> TagBuilder<'a> {
638 }; 648 };
639 Ok(Token::Show(id, self.props)) 649 Ok(Token::Show(id, self.props))
640 } 650 }
651 SymbolType::If => {
652 let id = if let ParamValue::Identifier(id) = self.params.swap_remove(0) {
653 id
654 } else {
655 return Err(CrimError::parse(Position::none(), "Identifier for show variable name.".into()));
656 };
657 Ok(Token::If(id, self.children))
658 }
641 _ => { 659 _ => {
642 Err(CrimError::parse( self.start_pos, "Bad tag type".into())) 660 Err(CrimError::parse( self.start_pos, "Bad tag type".into()))
643 } 661 }