Manually resolve escaped symbols in xml.
This shouldn't be necesary. Fixes #154 and fixes #147
This commit is contained in:
parent
b9c9e67c2e
commit
72457aaa11
3 changed files with 17 additions and 6 deletions
|
|
@ -74,7 +74,12 @@ impl WidgetUse {
|
||||||
attrs: elem
|
attrs: elem
|
||||||
.attributes()
|
.attributes()
|
||||||
.iter()
|
.iter()
|
||||||
.map(|attr| (AttrName(attr.name().to_owned()), AttrValue::parse_string(attr.value())))
|
.map(|attr| {
|
||||||
|
(
|
||||||
|
AttrName(attr.name().to_owned()),
|
||||||
|
AttrValue::parse_string(&xml_ext::resolve_escaped_symbols(&attr.value())),
|
||||||
|
)
|
||||||
|
})
|
||||||
.collect::<HashMap<_, _>>(),
|
.collect::<HashMap<_, _>>(),
|
||||||
..WidgetUse::default()
|
..WidgetUse::default()
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ impl ScriptVar {
|
||||||
let name = VarName(xml.attr("name")?.to_owned());
|
let name = VarName(xml.attr("name")?.to_owned());
|
||||||
let command = xml.only_child()?.as_text()?.text();
|
let command = xml.only_child()?.as_text()?.text();
|
||||||
if let Ok(interval) = xml.attr("interval") {
|
if let Ok(interval) = xml.attr("interval") {
|
||||||
let interval = util::parse_duration(interval)?;
|
let interval = util::parse_duration(&interval)?;
|
||||||
Ok(ScriptVar::Poll(PollScriptVar { name, command, interval }))
|
Ok(ScriptVar::Poll(PollScriptVar { name, command, interval }))
|
||||||
} else {
|
} else {
|
||||||
Ok(ScriptVar::Tail(TailScriptVar { name, command }))
|
Ok(ScriptVar::Tail(TailScriptVar { name, command }))
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,11 @@ macro_rules! with_text_pos_context {
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// resolve symbols such as " to replace them with the actual " symbol
|
||||||
|
pub fn resolve_escaped_symbols(s: &str) -> String {
|
||||||
|
s.replace(""", "\"").replace("<", "<").replace(">", ">")
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum XmlNode<'a, 'b> {
|
pub enum XmlNode<'a, 'b> {
|
||||||
Element(XmlElement<'a, 'b>),
|
Element(XmlElement<'a, 'b>),
|
||||||
|
|
@ -58,7 +63,7 @@ fn get_text_from_text_range(s: &str, (start_pos, end_pos): (TextPos, TextPos)) -
|
||||||
if let Some(last_line) = code_text.last_mut() {
|
if let Some(last_line) = code_text.last_mut() {
|
||||||
*last_line = last_line.split_at(end_pos.col as usize - 1).0;
|
*last_line = last_line.split_at(end_pos.col as usize - 1).0;
|
||||||
}
|
}
|
||||||
code_text.join("\n")
|
resolve_escaped_symbols(&code_text.join("\n"))
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'b> XmlNode<'a, 'b> {
|
impl<'a, 'b> XmlNode<'a, 'b> {
|
||||||
|
|
@ -71,7 +76,7 @@ impl<'a, 'b> XmlNode<'a, 'b> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn as_text_or_sourcecode(&self) -> String {
|
pub fn as_text_or_sourcecode(&self) -> String {
|
||||||
self.as_text().map(|c| c.text()).unwrap_or_else(|_| self.get_sourcecode())
|
self.as_text().map(|c| resolve_escaped_symbols(&c.text())).unwrap_or_else(|_| self.get_sourcecode())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn as_text(&self) -> Result<&XmlText<'a, 'b>> {
|
pub fn as_text(&self) -> Result<&XmlText<'a, 'b>> {
|
||||||
|
|
@ -118,7 +123,7 @@ impl<'a, 'b> fmt::Display for XmlText<'a, 'b> {
|
||||||
|
|
||||||
impl<'a, 'b> XmlText<'a, 'b> {
|
impl<'a, 'b> XmlText<'a, 'b> {
|
||||||
pub fn text(&self) -> String {
|
pub fn text(&self) -> String {
|
||||||
self.0.text().unwrap_or_default().trim_lines().trim_matches('\n').to_owned()
|
self.0.text().map(resolve_escaped_symbols).unwrap_or_default().trim_lines().trim_matches('\n').to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn text_pos(&self) -> TextPos {
|
pub fn text_pos(&self) -> TextPos {
|
||||||
|
|
@ -181,10 +186,11 @@ impl<'a, 'b> XmlElement<'a, 'b> {
|
||||||
self.0.attributes()
|
self.0.attributes()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn attr(&self, key: &str) -> Result<&str> {
|
pub fn attr(&self, key: &str) -> Result<String> {
|
||||||
with_text_pos_context! { self =>
|
with_text_pos_context! { self =>
|
||||||
self.0
|
self.0
|
||||||
.attribute(key)
|
.attribute(key)
|
||||||
|
.map(resolve_escaped_symbols)
|
||||||
.with_context(|| anyhow!("'{}' missing attribute '{}'", self.as_tag_string(), key))?
|
.with_context(|| anyhow!("'{}' missing attribute '{}'", self.as_tag_string(), key))?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue