diff options
Diffstat (limited to 'src/parser.rs')
| -rw-r--r-- | src/parser.rs | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/src/parser.rs b/src/parser.rs index 1591c8b..aff64f6 100644 --- a/src/parser.rs +++ b/src/parser.rs | |||
| @@ -10,6 +10,15 @@ pub struct ParseError { | |||
| 10 | what: String, | 10 | what: String, |
| 11 | } | 11 | } |
| 12 | 12 | ||
| 13 | impl ParseError { | ||
| 14 | pub fn new( position: Position, what: &str ) -> Self { | ||
| 15 | ParseError { | ||
| 16 | position, | ||
| 17 | what: what.to_string(), | ||
| 18 | } | ||
| 19 | } | ||
| 20 | } | ||
| 21 | |||
| 13 | impl fmt::Display for ParseError { | 22 | impl fmt::Display for ParseError { |
| 14 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | 23 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| 15 | write!(f, "Error parsing input: {}", "yeah") | 24 | write!(f, "Error parsing input: {}", "yeah") |
| @@ -85,7 +94,7 @@ impl<'a> SymbolHelper for Option<Symbol<'a>> { | |||
| 85 | if let Some(st) = self { | 94 | if let Some(st) = self { |
| 86 | Ok(match st.symbol() { | 95 | Ok(match st.symbol() { |
| 87 | SymbolType::Token(_) | | 96 | SymbolType::Token(_) | |
| 88 | SymbolType::Fragment | | 97 | SymbolType::View | |
| 89 | SymbolType::Output | | 98 | SymbolType::Output | |
| 90 | SymbolType::Show => true, | 99 | SymbolType::Show => true, |
| 91 | _ => false | 100 | _ => false |
| @@ -127,7 +136,7 @@ pub struct Parser { | |||
| 127 | * close_tag: '<|' token '|]' | 136 | * close_tag: '<|' token '|]' |
| 128 | * ; | 137 | * ; |
| 129 | * | 138 | * |
| 130 | * tag_guts: 'fragment' literal props | 139 | * tag_guts: 'view' literal props |
| 131 | * | 'section' literal | 140 | * | 'section' literal |
| 132 | * | 'output' literal | 141 | * | 'output' literal |
| 133 | * ; | 142 | * ; |
| @@ -167,7 +176,7 @@ pub struct Parser { | |||
| 167 | * close_tag: '<|' token '|]' | 176 | * close_tag: '<|' token '|]' |
| 168 | * ; | 177 | * ; |
| 169 | * | 178 | * |
| 170 | * tag_guts: 'fragment' literal props | 179 | * tag_guts: 'view' literal props |
| 171 | * | 'section' literal | 180 | * | 'section' literal |
| 172 | * | 'output' literal | 181 | * | 'output' literal |
| 173 | * ; | 182 | * ; |
| @@ -216,7 +225,7 @@ impl Parser { | |||
| 216 | match ctx.cur().unwrap().symbol() { | 225 | match ctx.cur().unwrap().symbol() { |
| 217 | SymbolType::Text(_) => { /* Skip top level text */ } | 226 | SymbolType::Text(_) => { /* Skip top level text */ } |
| 218 | SymbolType::StartFlat => { | 227 | SymbolType::StartFlat => { |
| 219 | children.push( self.parse_tag_fragment( ctx )? ); | 228 | children.push( self.parse_tag_view( ctx )? ); |
| 220 | } | 229 | } |
| 221 | SymbolType::Error{..} => { | 230 | SymbolType::Error{..} => { |
| 222 | return self.lex_error( &ctx.cur().unwrap() ); | 231 | return self.lex_error( &ctx.cur().unwrap() ); |
| @@ -230,9 +239,9 @@ impl Parser { | |||
| 230 | Ok(Token::Root(children)) | 239 | Ok(Token::Root(children)) |
| 231 | } | 240 | } |
| 232 | 241 | ||
| 233 | fn parse_tag_fragment(&self, ctx: &mut Context) -> ParseResult<Token> { | 242 | fn parse_tag_view(&self, ctx: &mut Context) -> ParseResult<Token> { |
| 234 | let mut tb = self.parse_open_tag( ctx )?; | 243 | let mut tb = self.parse_open_tag( ctx )?; |
| 235 | if !tb.is_name( &SymbolType::Fragment ) { | 244 | if !tb.is_name( &SymbolType::View ) { |
| 236 | return Err(ParseError{ | 245 | return Err(ParseError{ |
| 237 | position: tb.start_pos(), | 246 | position: tb.start_pos(), |
| 238 | what: "Unexpected tag type, only frament allowed at root".to_string(), | 247 | what: "Unexpected tag type, only frament allowed at root".to_string(), |
| @@ -244,7 +253,7 @@ impl Parser { | |||
| 244 | } | 253 | } |
| 245 | let mut children = Vec::new(); | 254 | let mut children = Vec::new(); |
| 246 | 255 | ||
| 247 | println!("--parse-tag-fragment-- tag parsed, next token: {:?}", ctx.cur() ); | 256 | println!("--parse-tag-view-- tag parsed, next token: {:?}", ctx.cur() ); |
| 248 | loop { | 257 | loop { |
| 249 | if ctx.cur().is_none() { | 258 | if ctx.cur().is_none() { |
| 250 | return Err(ParseError{ | 259 | return Err(ParseError{ |
| @@ -328,7 +337,7 @@ impl Parser { | |||
| 328 | 337 | ||
| 329 | if ctx.next().is_some() { | 338 | if ctx.next().is_some() { |
| 330 | match ctx.cur().unwrap().symbol() { | 339 | match ctx.cur().unwrap().symbol() { |
| 331 | SymbolType::Fragment | SymbolType::Show | | 340 | SymbolType::View | SymbolType::Show | |
| 332 | SymbolType::Output => { | 341 | SymbolType::Output => { |
| 333 | let name_sym = ctx.cur().unwrap(); | 342 | let name_sym = ctx.cur().unwrap(); |
| 334 | ctx.next(); | 343 | ctx.next(); |
| @@ -532,7 +541,7 @@ impl<'a> TagBuilder<'a> { | |||
| 532 | } | 541 | } |
| 533 | } | 542 | } |
| 534 | 543 | ||
| 535 | pub fn name(&self) -> Option<Symbol> { | 544 | pub fn name(&self) -> Option<Symbol<'a>> { |
| 536 | self.name | 545 | self.name |
| 537 | } | 546 | } |
| 538 | 547 | ||
| @@ -570,8 +579,8 @@ impl<'a> TagBuilder<'a> { | |||
| 570 | pub fn build(mut self) -> ParseResult<Token> { | 579 | pub fn build(mut self) -> ParseResult<Token> { |
| 571 | if let Some(sym) = self.name { | 580 | if let Some(sym) = self.name { |
| 572 | match sym.symbol() { | 581 | match sym.symbol() { |
| 573 | SymbolType::Fragment => { | 582 | SymbolType::View => { |
| 574 | Ok(Token::Fragment(self.params.swap_remove(0), self.props, self.children)) | 583 | Ok(Token::View(self.params.swap_remove(0), self.props, self.children)) |
| 575 | } | 584 | } |
| 576 | SymbolType::Output => { | 585 | SymbolType::Output => { |
| 577 | Ok(Token::Output(self.params.swap_remove(0), self.props, self.children)) | 586 | Ok(Token::Output(self.params.swap_remove(0), self.props, self.children)) |
