diff options
Diffstat (limited to 'src/parser.rs')
| -rw-r--r-- | src/parser.rs | 28 |
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 | } |
