Apply category even if there are radio targets.
This commit is contained in:
parent
12ab9beada
commit
599b3b8f0a
@ -6,6 +6,7 @@ use nom::multi::many0;
|
|||||||
|
|
||||||
use super::headline::heading;
|
use super::headline::heading;
|
||||||
use super::in_buffer_settings::apply_in_buffer_settings;
|
use super::in_buffer_settings::apply_in_buffer_settings;
|
||||||
|
use super::in_buffer_settings::apply_post_parse_in_buffer_settings;
|
||||||
use super::in_buffer_settings::scan_for_in_buffer_settings;
|
use super::in_buffer_settings::scan_for_in_buffer_settings;
|
||||||
use super::org_source::OrgSource;
|
use super::org_source::OrgSource;
|
||||||
use super::section::zeroth_section;
|
use super::section::zeroth_section;
|
||||||
@ -168,25 +169,17 @@ fn document_org_source<'b, 'g, 'r, 's>(
|
|||||||
let mut new_global_settings = context.get_global_settings().clone();
|
let mut new_global_settings = context.get_global_settings().clone();
|
||||||
new_global_settings.radio_targets = all_radio_targets;
|
new_global_settings.radio_targets = all_radio_targets;
|
||||||
let parser_context = context.with_global_settings(&new_global_settings);
|
let parser_context = context.with_global_settings(&new_global_settings);
|
||||||
let (remaining, document) = _document(&parser_context, input)
|
let (remaining, mut document) = _document(&parser_context, input)
|
||||||
.map(|(rem, out)| (Into::<&str>::into(rem), out))?;
|
.map(|(rem, out)| (Into::<&str>::into(rem), out))?;
|
||||||
|
apply_post_parse_in_buffer_settings(&mut document)
|
||||||
|
.map_err(|err| nom::Err::<CustomError<OrgSource<'_>>>::Failure(err.into()))?;
|
||||||
return Ok((remaining.into(), document));
|
return Ok((remaining.into(), document));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find final in-buffer settings that do not impact parsing
|
// Find final in-buffer settings that do not impact parsing
|
||||||
document.category = Into::<AstNode>::into(&document)
|
apply_post_parse_in_buffer_settings(&mut document)
|
||||||
.into_iter()
|
.map_err(|err| nom::Err::<CustomError<OrgSource<'_>>>::Failure(err.into()))?;
|
||||||
.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))
|
Ok((remaining.into(), document))
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,9 @@ use super::OrgSource;
|
|||||||
use crate::context::HeadlineLevelFilter;
|
use crate::context::HeadlineLevelFilter;
|
||||||
use crate::error::CustomError;
|
use crate::error::CustomError;
|
||||||
use crate::error::Res;
|
use crate::error::Res;
|
||||||
|
use crate::iter::AstNode;
|
||||||
use crate::settings::GlobalSettings;
|
use crate::settings::GlobalSettings;
|
||||||
|
use crate::types::Document;
|
||||||
use crate::types::Keyword;
|
use crate::types::Keyword;
|
||||||
|
|
||||||
#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]
|
#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]
|
||||||
@ -114,6 +116,25 @@ pub(crate) fn apply_in_buffer_settings<'g, 's, 'sf>(
|
|||||||
Ok(new_settings)
|
Ok(new_settings)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Apply in-buffer settings that do not impact parsing and therefore can be applied after parsing.
|
||||||
|
pub(crate) fn apply_post_parse_in_buffer_settings<'g, 's, 'sf>(
|
||||||
|
document: &mut Document<'s>,
|
||||||
|
) -> Result<(), &'static str> {
|
||||||
|
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(())
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user