Implemented the sep helper.
This commit is contained in:
parent
3fb91566bb
commit
fdecdcb53b
@ -1,13 +1,29 @@
|
|||||||
|
Tags inside a sep{~n}
|
||||||
|
================={~n}
|
||||||
{#people}
|
{#people}
|
||||||
{name}{@sep petname="fluffy"},{pet}{petname}{/sep}
|
{name}{@sep petname="fluffy"},{pet}{petname}{/sep}
|
||||||
{/people}{~n}
|
{/people}{~n}
|
||||||
|
|
||||||
|
sep inside a scalar{~n}
|
||||||
|
==================={~n}
|
||||||
{#scalar}
|
{#scalar}
|
||||||
{name}{@sep petname="fluffy"},{pet}{petname}{/sep}
|
{name}{@sep petname="fluffy"},{pet}{petname}{/sep}
|
||||||
{/scalar}{~n}
|
{/scalar}{~n}
|
||||||
|
|
||||||
|
Nested sep inside another non-array section{~n}
|
||||||
|
==========================================={~n}
|
||||||
{#people}
|
{#people}
|
||||||
{#toys}
|
{#toys}
|
||||||
{name}'s pet {pet} plays with a {.}{@sep}, {/sep}
|
{name}'s pet {pet} plays with a {.}{@sep}, {/sep}
|
||||||
{/toys}
|
{/toys}
|
||||||
{/people}{~n}
|
{/people}{~n}
|
||||||
|
|
||||||
|
Else block inside a sep{~n}
|
||||||
|
======================={~n}
|
||||||
|
{#people}
|
||||||
|
{name}{@sep},{pet}{petname}{:else}elseblock{/sep}
|
||||||
|
{/people}{~n}
|
||||||
|
|
||||||
|
Sep outside any section{~n}
|
||||||
|
======================={~n}
|
||||||
|
{@sep}sep is printed outside any section{/sep}
|
||||||
|
@ -2,6 +2,7 @@ use crate::parser::template;
|
|||||||
use crate::parser::Body;
|
use crate::parser::Body;
|
||||||
use crate::parser::DustTag;
|
use crate::parser::DustTag;
|
||||||
use crate::parser::Filter;
|
use crate::parser::Filter;
|
||||||
|
use crate::parser::OwnedLiteral;
|
||||||
use crate::parser::PartialNameElement;
|
use crate::parser::PartialNameElement;
|
||||||
use crate::parser::Path;
|
use crate::parser::Path;
|
||||||
use crate::parser::Special;
|
use crate::parser::Special;
|
||||||
@ -645,7 +646,54 @@ impl<'a> DustRenderer<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DustTag::DTHelperSep(parameterized_block) => {}
|
DustTag::DTHelperSep(parameterized_block) => {
|
||||||
|
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
||||||
|
breadcrumbs,
|
||||||
|
breadcrumbs,
|
||||||
|
None,
|
||||||
|
¶meterized_block.explicit_context,
|
||||||
|
);
|
||||||
|
|
||||||
|
let index = self.get(breadcrumbs, &vec!["$idx"]);
|
||||||
|
let len = self.get(breadcrumbs, &vec!["$len"]);
|
||||||
|
match (index, len) {
|
||||||
|
(Err(_), _) | (_, Err(_)) => {
|
||||||
|
return self.render_maybe_body(
|
||||||
|
¶meterized_block.contents,
|
||||||
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
||||||
|
blocks,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
(Ok(index_resolved), Ok(len_resolved)) => {
|
||||||
|
// Iteration contexts use OwnedLiteral::LPositiveinteger
|
||||||
|
let index_cast = index_resolved
|
||||||
|
.get_context_element_reference()
|
||||||
|
.to_any()
|
||||||
|
.downcast_ref::<OwnedLiteral>();
|
||||||
|
let len_cast = len_resolved
|
||||||
|
.get_context_element_reference()
|
||||||
|
.to_any()
|
||||||
|
.downcast_ref::<OwnedLiteral>();
|
||||||
|
match (index_cast, len_cast) {
|
||||||
|
(
|
||||||
|
Some(OwnedLiteral::LPositiveInteger(index_number)),
|
||||||
|
Some(OwnedLiteral::LPositiveInteger(len_number)),
|
||||||
|
) => {
|
||||||
|
if *index_number == len_number - 1 {
|
||||||
|
return Ok("".to_owned());
|
||||||
|
} else {
|
||||||
|
return self.render_maybe_body(
|
||||||
|
¶meterized_block.contents,
|
||||||
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
||||||
|
blocks,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => return Ok("".to_owned()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
DustTag::DTHelperFirst(parameterized_block) => {}
|
DustTag::DTHelperFirst(parameterized_block) => {}
|
||||||
DustTag::DTHelperLast(parameterized_block) => {}
|
DustTag::DTHelperLast(parameterized_block) => {}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user