MCPcopy Create free account
hub / github.com/PerroEngine/Perro / parse_scene_inner

Method parse_scene_inner

perro_source/runtime_project/perro_scene/src/parser.rs:536–755  ·  view source on GitHub ↗
(mut self)

Source from the content-addressed store, hash-verified

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 => {

Callers 2

try_parse_sceneMethod · 0.80
parse_scene_lenientMethod · 0.80

Calls 15

custom_script_var_fieldsFunction · 0.85
parse_valueMethod · 0.80
cloneMethod · 0.80
expect_scene_keyMethod · 0.80
skip_node_bodyMethod · 0.80
parse_tagsMethod · 0.80
advanceMethod · 0.45
expect_identMethod · 0.45
expectMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected