1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
/*
* render/html/element/include.rs
*
* ftml - Library to parse Wikidot text
* Copyright (C) 2019-2021 Wikijump Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
use super::prelude::*;
use crate::data::PageRef;
use crate::tree::VariableMap;
pub fn render_include(
log: &Logger,
ctx: &mut HtmlContext,
_location: &PageRef,
variables: &VariableMap,
elements: &[Element],
) {
info!(
log,
"Rendering include";
"location" => str!(_location),
"variables-len" => variables.len(),
"elements-len" => elements.len(),
);
ctx.variables_mut().push_scope(variables);
render_elements(log, ctx, elements);
ctx.variables_mut().pop_scope();
}
pub fn render_variable(log: &Logger, ctx: &mut HtmlContext, name: &str) {
let value = ctx.variables().get(name);
info!(log, "Rendering variable"; "name" => name, "value" => value);
// Write to a separate buffer since we can't borrow &mut for buffer and & for variables.
let value = match value {
// Value exists, substitute normally.
Some(value) => str!(value),
// Value is absent, leave as original value.
// Variables are {$name}, so just write that back.
None => format!("{{${}}}", name),
};
// Append the formatted string
ctx.push_escaped(&value);
}