Merge branch 'document_properties'
Some checks failed
rustfmt Build rustfmt has succeeded
rust-foreign-document-test Build rust-foreign-document-test has failed
rust-build Build rust-build has succeeded
rust-test Build rust-test has failed

This commit is contained in:
Tom Alexander 2023-10-11 16:28:53 -04:00
commit 1947ae9f22
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
15 changed files with 129 additions and 41 deletions

View File

@ -0,0 +1,5 @@
* baz
# lorem
:PROPERTIES:
:FOO: bar
:END:

View File

@ -0,0 +1,6 @@
* baz
# lorem
:PROPERTIES:
:FOO: bar
:END:

View File

@ -0,0 +1,4 @@
* baz
:PROPERTIES:
:FOO: bar
:END:

View File

@ -0,0 +1,5 @@
* baz
:PROPERTIES:
:FOO: bar
:END:

View File

@ -0,0 +1,13 @@
* baz
# lorem
:PROPERTIES:
:FOO: bar
:END:

View File

@ -0,0 +1,19 @@
:PROPERTIES:
:foo: bar
:foo+: baz
:cat: dog
:END:
# Even though these are inheriting the properties and overwriting and/or appending to them, this is not represented in the parser AST so Organic does not do any special handling of this.
* Overwrite
:PROPERTIES:
:foo: lorem
:bat: car
:END:
* Append
:PROPERTIES:
:foo+: ipsum
:cake: lie
:END:

View File

@ -1,25 +0,0 @@
# Blank lines and comments can come before property drawers in the zeroth section
:PROPERTIES:
:FOO: bar
:END:
* Spaces turn property drawers into regular drawers
:PROPERTIES:
:FOO: bar
:END:
* Comments turn property drawers into regular drawers
# Comment
:PROPERTIES:
:FOO: bar
:END:
* Baseline
:PROPERTIES:
:FOO: bar
:END:

View File

@ -0,0 +1,4 @@
# lorem
:PROPERTIES:
:FOO: bar
:END:

View File

@ -0,0 +1,5 @@
# lorem
:PROPERTIES:
:FOO: bar
:END:

View File

@ -0,0 +1,3 @@
:PROPERTIES:
:FOO: bar
:END:

View File

@ -0,0 +1,4 @@
:PROPERTIES:
:FOO: bar
:END:

View File

@ -0,0 +1,12 @@
# lorem
:PROPERTIES:
:FOO: bar
:END:

View File

@ -1,12 +0,0 @@
# Blank lines and comments can come before property drawers in the zeroth section
:PROPERTIES:
:FOO: bar
:END:

View File

@ -455,6 +455,27 @@ fn _compare_document<'b, 's>(
let mut child_status = Vec::new();
let mut message = None;
let additional_property_names: Vec<String> = rust
.get_additional_properties()
.map(|node_property| format!(":{}", node_property.property_name.to_uppercase()))
.collect();
let additional_properties: Vec<(String, &str)> = rust
.get_additional_properties()
.map(|node_property| {
(
format!(":{}", node_property.property_name.to_uppercase()),
node_property.value.unwrap_or(""),
)
})
.collect();
compare_additional_properties(emacs, additional_properties.into_iter())?.apply(
&mut child_status,
&mut this_status,
&mut message,
);
compare_children_iter(
source,
emacs,
@ -468,6 +489,10 @@ fn _compare_document<'b, 's>(
source,
emacs,
rust,
additional_property_names
.iter()
.map(String::as_str)
.map(EmacsField::Required),
(
EmacsField::Required(":path"),
|r| r.path.as_ref().map(|p| p.to_str()).flatten(),

View File

@ -93,8 +93,7 @@ impl<'s> Heading<'s> {
}
pub fn get_additional_properties(&self) -> impl Iterator<Item = &NodeProperty<'s>> {
let foo = self
.children
self.children
.iter()
.take(1)
.filter_map(|c| match c {
@ -107,7 +106,28 @@ impl<'s> Heading<'s> {
Element::PropertyDrawer(property_drawer) => Some(property_drawer),
_ => None,
})
.flat_map(|property_drawer| property_drawer.children.iter());
foo
.flat_map(|property_drawer| property_drawer.children.iter())
}
}
impl<'s> Document<'s> {
pub fn get_additional_properties(&self) -> impl Iterator<Item = &NodeProperty<'s>> {
let zeroth_section_children = self
.zeroth_section
.iter()
.flat_map(|zeroth_section| zeroth_section.children.iter());
let property_drawer = zeroth_section_children
.take_while(|element| match element {
Element::Comment(_) => true,
Element::PropertyDrawer(_) => true,
_ => false,
})
.find_map(|element| match element {
Element::PropertyDrawer(property_drawer) => Some(property_drawer),
_ => None,
});
property_drawer
.into_iter()
.flat_map(|property_drawer| property_drawer.children.iter())
}
}