From c9889f7c6622def3b6badde2738c3e912b48144f Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Thu, 11 Jun 2026 13:42:31 -0700 Subject: Basic if statements work. I need to tweak the parser to get mid-tags working, then we can have else, and maybe elif. After that is expressions. --- src/parser.rs | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'src/parser.rs') 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> { SymbolType::Output | SymbolType::Loop | SymbolType::If | - SymbolType::ElseIf | + SymbolType::ElIf | SymbolType::Else | SymbolType::Show => true, _ => false @@ -88,13 +88,23 @@ pub struct Parser { } /** - * input: input tag - * | input tag_pair + * input: input complete_tag * | input text * | * ; * - * tag: '[|' tag_guts '|]' + * tag: unary_tag + * | multinary_open_tag + * | multinary_mid_tag + * | multinary_close_tag + * ; + * + * unary_tag: '[|' tag_guts '|]' + * ; + * + * | '[|' tag_guts '|>' + * | '<|' tag_guts '|>' + * | '<|' tag_guts '|]' * ; * * tag_pair: open_tag tag_body close_tag @@ -295,7 +305,7 @@ impl Parser { if ctx.next().is_some() { match ctx.cur().unwrap().symbol() { SymbolType::View | SymbolType::Show | SymbolType::Loop | - SymbolType::If | SymbolType::ElseIf | SymbolType::Else | + SymbolType::If | SymbolType::ElIf | SymbolType::Else | SymbolType::Output => { let name_sym = ctx.cur().unwrap(); ctx.next(); @@ -638,6 +648,14 @@ impl<'a> TagBuilder<'a> { }; Ok(Token::Show(id, self.props)) } + SymbolType::If => { + let id = if let ParamValue::Identifier(id) = self.params.swap_remove(0) { + id + } else { + return Err(CrimError::parse(Position::none(), "Identifier for show variable name.".into())); + }; + Ok(Token::If(id, self.children)) + } _ => { Err(CrimError::parse( self.start_pos, "Bad tag type".into())) } -- cgit v1.2.3