diff options
Diffstat (limited to 'support/texlab/crates/parser/src/latex.rs')
-rw-r--r-- | support/texlab/crates/parser/src/latex.rs | 55 |
1 files changed, 49 insertions, 6 deletions
diff --git a/support/texlab/crates/parser/src/latex.rs b/support/texlab/crates/parser/src/latex.rs index c42031dcf1..63c160d4e2 100644 --- a/support/texlab/crates/parser/src/latex.rs +++ b/support/texlab/crates/parser/src/latex.rs @@ -6,7 +6,7 @@ use syntax::latex::SyntaxKind::{self, *}; use crate::SyntaxConfig; use self::lexer::{ - types::{CommandName, SectionLevel, Token}, + types::{CommandName, ParagraphLevel, SectionLevel, Token}, Lexer, }; @@ -114,6 +114,7 @@ impl<'a> Parser<'a> { CommandName::BeginEquation => self.equation(), CommandName::EndEquation => self.generic_command(), CommandName::Section(level) => self.section(level), + CommandName::Paragraph(level) => self.paragraph(level), CommandName::EnumItem => self.enum_item(), CommandName::Caption => self.caption(), CommandName::Citation => self.citation(), @@ -138,7 +139,8 @@ impl<'a> Parser<'a> { CommandName::AcronymDefinition => self.acronym_definition(), CommandName::AcronymDeclaration => self.acronym_declaration(), CommandName::AcronymReference => self.acronym_reference(), - CommandName::TheoremDefinition => self.theorem_definition(), + CommandName::TheoremDefinitionAmsThm => self.theorem_definition_amsthm(), + CommandName::TheoremDefinitionThmTools => self.theorem_definition_thmtools(), CommandName::ColorReference => self.color_reference(), CommandName::ColorDefinition => self.color_definition(), CommandName::ColorSetDefinition => self.color_set_definition(), @@ -559,8 +561,6 @@ impl<'a> Parser<'a> { SectionLevel::Section => SECTION, SectionLevel::Subsection => SUBSECTION, SectionLevel::Subsubsection => SUBSUBSECTION, - SectionLevel::Paragraph => PARAGRAPH, - SectionLevel::Subparagraph => SUBPARAGRAPH, }; self.builder.start_node(node_kind.into()); @@ -583,6 +583,33 @@ impl<'a> Parser<'a> { self.builder.finish_node(); } + fn paragraph(&mut self, level: ParagraphLevel) { + let node_kind = match level { + ParagraphLevel::Paragraph => PARAGRAPH, + ParagraphLevel::Subparagraph => SUBPARAGRAPH, + }; + + self.builder.start_node(node_kind.into()); + self.eat(); + self.trivia(); + + if self.peek() == Some(Token::LCurly) { + self.curly_group(); + } + + while let Some(kind) = self.peek() { + match kind { + Token::RCurly => break, + Token::CommandName(CommandName::EndEnvironment) => break, + Token::CommandName(CommandName::Section(_)) => break, + Token::CommandName(CommandName::Paragraph(nested)) if nested <= level => break, + _ => self.content(ParserContext::default()), + } + } + + self.builder.finish_node(); + } + fn enum_item(&mut self) { self.builder.start_node(ENUM_ITEM.into()); self.eat(); @@ -978,8 +1005,8 @@ impl<'a> Parser<'a> { self.builder.finish_node(); } - fn theorem_definition(&mut self) { - self.builder.start_node(THEOREM_DEFINITION.into()); + fn theorem_definition_amsthm(&mut self) { + self.builder.start_node(THEOREM_DEFINITION_AMSTHM.into()); self.eat(); self.trivia(); @@ -1002,6 +1029,22 @@ impl<'a> Parser<'a> { self.builder.finish_node(); } + fn theorem_definition_thmtools(&mut self) { + self.builder.start_node(THEOREM_DEFINITION_THMTOOLS.into()); + self.eat(); + self.trivia(); + + if self.lexer.peek() == Some(Token::LBrack) { + self.brack_group_key_value(); + } + + if self.lexer.peek() == Some(Token::LCurly) { + self.curly_group_word(); + } + + self.builder.finish_node(); + } + fn color_reference(&mut self) { self.builder.start_node(COLOR_REFERENCE.into()); self.eat(); |