From 745892fbddea56040139108277e728b53fd8fc11 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 May 2020 03:03:21 +0000 Subject: CTAN sync 202005280303 --- support/texlab/src/symbol/latex_section/theorem.rs | 68 ++++++++++++---------- 1 file changed, 36 insertions(+), 32 deletions(-) (limited to 'support/texlab/src/symbol/latex_section/theorem.rs') diff --git a/support/texlab/src/symbol/latex_section/theorem.rs b/support/texlab/src/symbol/latex_section/theorem.rs index 1f2190ea47..dac231fbfa 100644 --- a/support/texlab/src/symbol/latex_section/theorem.rs +++ b/support/texlab/src/symbol/latex_section/theorem.rs @@ -1,47 +1,51 @@ use super::{label_name, selection_range}; -use crate::symbol::{LatexSymbol, LatexSymbolKind}; -use crate::syntax::*; -use crate::workspace::*; +use crate::{ + feature::DocumentView, + outline::OutlineContext, + symbol::types::{LatexSymbol, LatexSymbolKind}, + syntax::latex, + workspace::DocumentContent, +}; +use titlecase::titlecase; -pub fn symbols(view: &DocumentView, tree: &LatexSyntaxTree) -> Vec { - tree.env +pub fn symbols(view: &DocumentView, table: &latex::SymbolTable) -> Vec { + table .environments .iter() - .filter_map(|env| make_symbol(view, tree, env)) + .filter_map(|env| make_symbol(view, table, *env)) .collect() } fn make_symbol( view: &DocumentView, - main_tree: &LatexSyntaxTree, - environment: &LatexEnvironment, + main_table: &latex::SymbolTable, + env: latex::Environment, ) -> Option { - let environment_name = environment.left.name().map(LatexToken::text)?; + let env_name = env.left.name(&main_table).map(latex::Token::text)?; - for document in &view.related_documents { - if let SyntaxTree::Latex(tree) = &document.tree { - for definition in &tree.math.theorem_definitions { - if environment_name == definition.name().text() { - let kind = definition - .command - .args - .get(definition.index + 1) - .map(|content| extract_group(content)) - .unwrap_or_else(|| titlelize(environment_name)); + for document in &view.related { + if let DocumentContent::Latex(table) = &document.content { + for definition in &table.theorem_definitions { + if definition.name(&table).text() == env_name { + let kind = table + .print_group_content( + definition.parent, + latex::GroupKind::Group, + definition.arg_index + 1, + ) + .unwrap_or_else(|| titlecase(env_name)); - let description = environment - .left - .command - .options - .get(0) - .map(|content| extract_group(content)); + let desc = main_table.print_group_content( + env.left.parent, + latex::GroupKind::Options, + 0, + ); - let label = main_tree.find_label_by_environment(environment); + let label = main_table.find_label_by_environment(env); let number = label - .as_ref() - .and_then(|label| OutlineContext::find_number(view, label)); + .and_then(|label| OutlineContext::find_number(view, &main_table, *label)); - let name = match (description, number) { + let name = match (desc, number) { (Some(desc), Some(num)) => format!("{} {} ({})", kind, num, desc), (Some(desc), None) => format!("{} ({})", kind, desc), (None, Some(num)) => format!("{} {}", kind, num), @@ -50,11 +54,11 @@ fn make_symbol( let symbol = LatexSymbol { name, - label: label_name(label), + label: label_name(main_table, label), kind: LatexSymbolKind::Theorem, deprecated: false, - full_range: environment.range(), - selection_range: selection_range(environment.range(), label), + full_range: env.range(&main_table), + selection_range: selection_range(main_table, env.range(&main_table), label), children: Vec::new(), }; return Some(symbol); -- cgit v1.2.3