Remove category from global settings.
This setting does not impact parsing so we can iterate over the final document to find the keywords.
This commit is contained in:
parent
d38b0a84f6
commit
186201a4b5
@ -12,8 +12,6 @@ pub struct GlobalSettings<'g, 's> {
|
||||
pub radio_targets: Vec<&'g Vec<Object<'s>>>,
|
||||
pub file_access: &'g dyn FileAccessInterface,
|
||||
pub in_progress_todo_keywords: BTreeSet<String>,
|
||||
pub category: Option<String>,
|
||||
|
||||
pub complete_todo_keywords: BTreeSet<String>,
|
||||
/// Set to true to allow for plain lists using single letters as the bullet in the same way that numbers are used.
|
||||
///
|
||||
@ -41,7 +39,6 @@ impl<'g, 's> GlobalSettings<'g, 's> {
|
||||
working_directory: None,
|
||||
},
|
||||
in_progress_todo_keywords: BTreeSet::new(),
|
||||
category: None,
|
||||
complete_todo_keywords: BTreeSet::new(),
|
||||
list_allow_alphabetical: false,
|
||||
tab_width: DEFAULT_TAB_WIDTH,
|
||||
|
@ -149,7 +149,7 @@ fn document_org_source<'b, 'g, 'r, 's>(
|
||||
let new_context = context.with_global_settings(&new_settings);
|
||||
let context = &new_context;
|
||||
|
||||
let (remaining, document) =
|
||||
let (remaining, mut document) =
|
||||
_document(context, input).map(|(rem, out)| (Into::<&str>::into(rem), out))?;
|
||||
{
|
||||
// If there are radio targets in this document then we need to parse the entire document again with the knowledge of the radio targets.
|
||||
@ -173,6 +173,21 @@ fn document_org_source<'b, 'g, 'r, 's>(
|
||||
return Ok((remaining.into(), document));
|
||||
}
|
||||
}
|
||||
|
||||
// Find final in-buffer settings that do not impact parsing
|
||||
document.category = Into::<AstNode>::into(&document)
|
||||
.into_iter()
|
||||
.filter_map(|ast_node| {
|
||||
if let AstNode::Keyword(ast_node) = ast_node {
|
||||
if ast_node.key.eq_ignore_ascii_case("category") {
|
||||
return Some(ast_node);
|
||||
}
|
||||
}
|
||||
None
|
||||
})
|
||||
.last()
|
||||
.map(|kw| kw.value.to_owned());
|
||||
|
||||
Ok((remaining.into(), document))
|
||||
}
|
||||
|
||||
@ -191,7 +206,7 @@ fn _document<'b, 'g, 'r, 's>(
|
||||
remaining,
|
||||
Document {
|
||||
source: source.into(),
|
||||
category: context.get_global_settings().category.clone(),
|
||||
category: None,
|
||||
path: None,
|
||||
zeroth_section,
|
||||
children,
|
||||
|
@ -111,14 +111,6 @@ pub(crate) fn apply_in_buffer_settings<'g, 's, 'sf>(
|
||||
}
|
||||
}
|
||||
|
||||
// Category
|
||||
for kw in keywords
|
||||
.iter()
|
||||
.filter(|kw| kw.key.eq_ignore_ascii_case("category"))
|
||||
{
|
||||
new_settings.category = Some(kw.value.to_owned());
|
||||
}
|
||||
|
||||
Ok(new_settings)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user