From ba72cc1b29ccbe4111614802f5fabfeb7adf5b1f Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Wed, 18 Oct 2023 18:22:01 -0400 Subject: [PATCH] The variables for keywords are actually constants. These settings do not need to exist in GlobalSettings because they are actually constants in upstream Org-Mode. --- src/context/constants.rs | 20 ++++++++++++++++---- src/context/global_settings.rs | 28 ---------------------------- src/context/mod.rs | 2 +- src/parser/affiliated_keyword.rs | 11 ++++++----- src/parser/keyword.rs | 10 ++++++---- 5 files changed, 29 insertions(+), 42 deletions(-) diff --git a/src/context/constants.rs b/src/context/constants.rs index 34bb98c..0ef8d1e 100644 --- a/src/context/constants.rs +++ b/src/context/constants.rs @@ -1,15 +1,27 @@ use super::global_settings::EntityDefinition; -pub(crate) const DEFAULT_ORG_ELEMENT_PARSED_KEYWORDS: [&str; 1] = ["CAPTION"]; +/// Keywords that contain the standard set of objects (excluding footnote references). +/// +/// Corresponds to org-element-parsed-keywords elisp variable. +pub(crate) const ORG_ELEMENT_PARSED_KEYWORDS: [&str; 1] = ["CAPTION"]; -pub(crate) const DEFAULT_ORG_ELEMENT_DUAL_KEYWORDS: [&str; 2] = ["CAPTION", "RESULTS"]; +/// Keywords that can have a secondary value in square brackets. +/// +/// Corresponds to org-element-dual-keywords elisp variable. +pub(crate) const ORG_ELEMENT_DUAL_KEYWORDS: [&str; 2] = ["CAPTION", "RESULTS"]; -pub(crate) const DEFAULT_ORG_ELEMENT_AFFILIATED_KEYWORDS: [&str; 13] = [ +/// Keywords that can be affiliated with an element. +/// +/// Corresponds to org-element-affiliated-keywords elisp variable. +pub(crate) const ORG_ELEMENT_AFFILIATED_KEYWORDS: [&str; 13] = [ "CAPTION", "DATA", "HEADER", "HEADERS", "LABEL", "NAME", "PLOT", "RESNAME", "RESULT", "RESULTS", "SOURCE", "SRCNAME", "TBLNAME", ]; -pub(crate) const DEFAULT_ORG_ELEMENT_KEYWORD_TRANSLATION_ALIST: [(&str, &str); 8] = [ +/// Mapping of keyword names. +/// +/// Corresponds to org-element-keyword-translation-alist elisp variable. +pub(crate) const ORG_ELEMENT_KEYWORD_TRANSLATION_ALIST: [(&str, &str); 8] = [ ("DATA", "NAME"), ("LABEL", "NAME"), ("RESNAME", "NAME"), diff --git a/src/context/global_settings.rs b/src/context/global_settings.rs index fa17799..bad04bf 100644 --- a/src/context/global_settings.rs +++ b/src/context/global_settings.rs @@ -5,10 +5,6 @@ use super::constants::DEFAULT_ORG_ENTITIES; use super::constants::DEFAULT_ORG_LINK_PARAMETERS; use super::FileAccessInterface; use super::LocalFileAccessInterface; -use crate::context::constants::DEFAULT_ORG_ELEMENT_AFFILIATED_KEYWORDS; -use crate::context::constants::DEFAULT_ORG_ELEMENT_DUAL_KEYWORDS; -use crate::context::constants::DEFAULT_ORG_ELEMENT_KEYWORD_TRANSLATION_ALIST; -use crate::context::constants::DEFAULT_ORG_ELEMENT_PARSED_KEYWORDS; use crate::types::IndentationLevel; use crate::types::Object; @@ -58,26 +54,6 @@ pub struct GlobalSettings<'g, 's> { /// /// Corresponds to org-entities elisp variable. pub entities: &'g [EntityDefinition<'s>], - - /// Keywords that contain the standard set of objects (excluding footnote references). - /// - /// Corresponds to org-element-parsed-keywords elisp variable. - pub element_parsed_keywords: &'g [&'s str], - - /// Keywords that can have a secondary value in square brackets. - /// - /// Corresponds to org-element-dual-keywords elisp variable. - pub element_dual_keywords: &'g [&'s str], - - /// Keywords that can be affiliated with an element. - /// - /// Corresponds to org-element-affiliated-keywords elisp variable. - pub element_affiliated_keywords: &'g [&'s str], - - /// Mapping of keyword names. - /// - /// Corresponds to org-element-keyword-translation-alist elisp variable. - pub element_keyword_translation_alist: &'g [(&'s str, &'s str)], } pub const DEFAULT_TAB_WIDTH: IndentationLevel = 8; @@ -112,10 +88,6 @@ impl<'g, 's> GlobalSettings<'g, 's> { link_parameters: &DEFAULT_ORG_LINK_PARAMETERS, link_templates: BTreeMap::new(), entities: &DEFAULT_ORG_ENTITIES, - element_parsed_keywords: &DEFAULT_ORG_ELEMENT_PARSED_KEYWORDS, - element_dual_keywords: &DEFAULT_ORG_ELEMENT_DUAL_KEYWORDS, - element_affiliated_keywords: &DEFAULT_ORG_ELEMENT_AFFILIATED_KEYWORDS, - element_keyword_translation_alist: &DEFAULT_ORG_ELEMENT_KEYWORD_TRANSLATION_ALIST, } } } diff --git a/src/context/mod.rs b/src/context/mod.rs index a82b5a3..878c536 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -1,7 +1,7 @@ use crate::error::Res; use crate::parser::OrgSource; -mod constants; +pub(crate) mod constants; #[allow(clippy::module_inception)] mod context; mod exiting; diff --git a/src/parser/affiliated_keyword.rs b/src/parser/affiliated_keyword.rs index 62fbaf0..6099588 100644 --- a/src/parser/affiliated_keyword.rs +++ b/src/parser/affiliated_keyword.rs @@ -19,6 +19,9 @@ use super::object_parser::standard_set_object; use super::util::confine_context; use super::OrgSource; use crate::context::bind_context; +use crate::context::constants::ORG_ELEMENT_DUAL_KEYWORDS; +use crate::context::constants::ORG_ELEMENT_KEYWORD_TRANSLATION_ALIST; +use crate::context::constants::ORG_ELEMENT_PARSED_KEYWORDS; use crate::context::Context; use crate::context::ContextElement; use crate::context::GlobalSettings; @@ -156,7 +159,7 @@ fn translate_name<'g, 's>(global_settings: &'g GlobalSettings<'g, 's>, name: &'s .split_once('[') .map(|(before, _after)| before) .unwrap_or(name); - for (src, dst) in global_settings.element_keyword_translation_alist { + for (src, dst) in ORG_ELEMENT_KEYWORD_TRANSLATION_ALIST { if name_until_optval.eq_ignore_ascii_case(src) { return dst.to_lowercase(); } @@ -179,12 +182,10 @@ fn identify_keyword_type<'g, 's>( .into_iter() .any(|candidate| name.eq_ignore_ascii_case(candidate)) || name.to_lowercase().starts_with("attr_"); - let is_parsed = global_settings - .element_parsed_keywords + let is_parsed = ORG_ELEMENT_PARSED_KEYWORDS .iter() .any(|candidate| name.eq_ignore_ascii_case(candidate)); - let can_have_optval = global_settings - .element_dual_keywords + let can_have_optval = ORG_ELEMENT_DUAL_KEYWORDS .iter() .any(|candidate| name.eq_ignore_ascii_case(candidate)); match (is_multiple, is_parsed, can_have_optval) { diff --git a/src/parser/keyword.rs b/src/parser/keyword.rs index 2cf29f0..63c608d 100644 --- a/src/parser/keyword.rs +++ b/src/parser/keyword.rs @@ -22,6 +22,8 @@ use super::util::get_consumed; use super::util::maybe_consume_trailing_whitespace_if_not_exiting; use super::util::org_line_ending; use crate::context::bind_context; +use crate::context::constants::ORG_ELEMENT_AFFILIATED_KEYWORDS; +use crate::context::constants::ORG_ELEMENT_DUAL_KEYWORDS; use crate::context::RefContext; use crate::error::CustomError; use crate::error::Res; @@ -152,9 +154,9 @@ fn plain_affiliated_key<'b, 'g, 'r, 's>( context: RefContext<'b, 'g, 'r, 's>, input: OrgSource<'s>, ) -> Res, OrgSource<'s>> { - for keyword in context.get_global_settings().element_affiliated_keywords { + for keyword in ORG_ELEMENT_AFFILIATED_KEYWORDS { let result = map( - tuple((tag_no_case::<_, _, CustomError>(*keyword), peek(tag(":")))), + tuple((tag_no_case::<_, _, CustomError>(keyword), peek(tag(":")))), |(key, _)| key, )(input); if let Ok((remaining, ent)) = result { @@ -170,9 +172,9 @@ fn dual_affiliated_key<'b, 'g, 'r, 's>( context: RefContext<'b, 'g, 'r, 's>, input: OrgSource<'s>, ) -> Res, OrgSource<'s>> { - for keyword in context.get_global_settings().element_dual_keywords { + for keyword in ORG_ELEMENT_DUAL_KEYWORDS { let result = recognize(tuple(( - tag_no_case::<_, _, CustomError>(*keyword), + tag_no_case::<_, _, CustomError>(keyword), tag("["), optval, tag("]"),