(mut self)
| 534 | let name = self.expect_scene_key()?; |
| 535 | self.expect(Token::RBracket)?; |
| 536 | Ok(name) |
| 537 | } |
| 538 | |
| 539 | fn skip_node_body(&mut self, key: &str) -> ParseResult<()> { |
| 540 | loop { |
| 541 | match self.current { |
| 542 | Token::Eof => break, |
| 543 | Token::LBracket => { |
| 544 | self.advance(); |
| 545 | if self.current == Token::Slash { |
| 546 | let end = self.skip_closing_tag_after_lbracket()?; |
| 547 | if end.as_ref() == key { |
| 548 | break; |
| 549 | } |
| 550 | } |
| 551 | } |
| 552 | _ => self.advance(), |
| 553 | } |
| 554 | } |
| 555 | Ok(()) |
| 556 | } |
| 557 | |
| 558 | pub(crate) fn parse_scene_inner(mut self) -> ParseResult<Scene> { |
| 559 | let mut nodes = Vec::new(); |
| 560 | let mut root_name = None::<String>; |
| 561 | let mut key_names = Vec::<Cow<'static, str>>::new(); |
| 562 | let mut key_ids = HashMap::<Cow<'a, str>, SceneKey>::new(); |
| 563 | let mut defined_keys = HashSet::<SceneKey>::new(); |
| 564 | let mut pending_parents = Vec::<(usize, String)>::new(); |
| 565 | |
| 566 | while self.current != Token::Eof { |
| 567 | match self.current { |
| 568 | Token::Error(ref err) => return Err(err.to_string()), |
| 569 | Token::Dollar => { |
| 570 | self.advance(); |
| 571 | let name = self.expect_ident()?; |
| 572 | self.expect(Token::Equals)?; |
| 573 | |
| 574 | if name == "root" { |
| 575 | match self.parse_value()? { |
| 576 | SceneValue::Key(k) => { |
| 577 | let key = k.to_string(); |
| 578 | root_name = Some(key.clone()); |
| 579 | self.vars.insert("root".to_string(), SceneValue::Key(k)); |
| 580 | } |
| 581 | _ => return Err("root must be a node ref like @Main".to_string()), |
| 582 | } |
| 583 | } else { |
| 584 | let value = self.parse_value()?; |
| 585 | self.vars.insert(name.to_string(), value); |
| 586 | } |
| 587 | } |
| 588 | |
| 589 | Token::At => { |
| 590 | return Err("use `$root = @NodeKey`; @ only marks node refs".to_string()); |
| 591 | } |
| 592 | |
| 593 | Token::LBracket => { |
no test coverage detected