summaryrefslogtreecommitdiff
path: root/support/texlab/crates/parser/src/latex.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/crates/parser/src/latex.rs')
-rw-r--r--support/texlab/crates/parser/src/latex.rs55
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();