1
0
Fork 0
mirror of https://github.com/lise-henry/crowbook synced 2024-05-10 08:36:12 +02:00

Remove invalid XML1.0 characters

This commit is contained in:
Elisabeth Henry 2023-08-03 02:06:10 +02:00
parent 3de32a459d
commit 881ff412e3
5 changed files with 19 additions and 12 deletions

5
Cargo.lock generated
View File

@ -394,6 +394,7 @@ dependencies = [
"crowbook-intl-runtime",
"crowbook-text-processing",
"epub-builder",
"html-escape",
"hyphenation",
"indicatif",
"lazy_static 1.4.0",
@ -440,9 +441,9 @@ dependencies = [
[[package]]
name = "crowbook-text-processing"
version = "1.0.0"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e0fe6b9d03ee72398cab2bd37c564bb898e351c4cff1f5f8a0db2bd9b909accc"
checksum = "a749441fe0b30ba727c31367438f7e2f001e6ec23d3c5f417834f2fa17098a27"
dependencies = [
"lazy_static 1.4.0",
"regex 1.9.1",

View File

@ -48,6 +48,7 @@ odt = []
crowbook-intl = "0.2"
[dependencies]
html-escape = "0.2"
mime_guess = "2"
comrak = "0.18"
yaml-rust = "0.4"
@ -56,7 +57,7 @@ uuid = { version = "1", features = ["v4"] }
walkdir = "2"
rustc-serialize = "0.3"
rayon = "1.6"
crowbook-text-processing = "1"
crowbook-text-processing = "^1.1.1"
lazy_static = "1"
crowbook-intl-runtime = "0.1"
numerals = "0.1"

View File

@ -28,6 +28,7 @@ use crate::templates::epub::*;
use crate::templates::epub3;
use crate::text_view::view_as_text;
use crate::token::Token;
use crate::misc;
use crowbook_text_processing::escape;
use epub_builder::{
@ -108,7 +109,7 @@ impl<'a> EpubRenderer<'a> {
.map_err(|err| Error::render(Source::empty(), format!("{}", err)))?;
maker.metadata(
"author",
escape::html(self.html.book.options.get_str("author").unwrap()),
self.html.book.options.get_str("author").unwrap(),
)
.map_err(|err| Error::render(Source::empty(), format!("{}", err)))?;
maker.metadata(
@ -218,7 +219,7 @@ impl<'a> EpubRenderer<'a> {
// todo: find cleaner way
for element in &self.html.toc.elements {
if element.url.contains(&filenamer(i)) {
content = content.title(escape::html(raw_title));
content = content.title(escape::html(&raw_title));
content.toc.children = element.children.clone();
break;
}

View File

@ -1,4 +1,4 @@
// Copyright (C) 2016, 2017, 2018 Élisabeth HENRY.
// Copyright (C) 2016-2023 Élisabeth HENRY.
//
// This file is part of Crowbook.
//
@ -28,6 +28,7 @@ use crate::syntax::Syntax;
use crate::token::Data;
use crate::token::Token;
use crate::text_view;
use crate::misc;
use std::borrow::Cow;
use std::convert::{AsMut, AsRef};
@ -439,7 +440,7 @@ impl<'a> HtmlRenderer<'a> {
match *annotation {
Data::GrammarError(ref s) => Ok(format!(
"<span title = \"{}\" class = \"grammar-error\">{}</span>",
escape::quotes(s.as_str()),
html_escape::encode_double_quoted_attribute(s.as_str()),
content
)),
Data::Repetition(ref colour) => {
@ -463,7 +464,9 @@ impl<'a> HtmlRenderer<'a> {
let mut content = if this.as_ref().verbatim {
Cow::Borrowed(text.as_ref())
} else {
escape::html(this.as_ref().book.clean(text.as_str()))
escape::html(this.as_ref()
.book.clean(text.as_str())
)
};
if this.as_ref().first_letter {
this.as_mut().first_letter = false;
@ -524,7 +527,7 @@ impl<'a> HtmlRenderer<'a> {
.toc
.add(TocElement::new(url, data.text.clone())
.level(n)
.raw_title(text_view::view_as_text(vec))
.raw_title(escape::html(text_view::view_as_text(vec)))
// TODO: should use proper text renderer
);
} else {
@ -532,7 +535,7 @@ impl<'a> HtmlRenderer<'a> {
.toc
.add(TocElement::new(url, data.text.clone())
.level(n - 1)
.raw_title(text_view::view_as_text(vec))
.raw_title(escape::html(text_view::view_as_text(vec)))
// TODO: same
);
@ -592,7 +595,7 @@ impl<'a> HtmlRenderer<'a> {
Token::DescriptionTerm(ref v) => Ok(format!("<dt>{}</dt>\n", this.render_vec(v)?)),
Token::DescriptionDetails(ref v) => Ok(format!("<dd>{}</dd>\n", this.render_vec(v)?)),
Token::Link(ref url, ref title, ref vec) => {
let url = escape::html(url.as_str());
let url = html_escape::encode_double_quoted_attribute(url.as_str());
let url = if ResourceHandler::is_local(&url) {
Cow::Owned(this.as_ref().handler.get_link(&url).to_owned())
} else {

View File

@ -1,4 +1,4 @@
// Copyright (C) 2016 Élisabeth HENRY.
// Copyright (C) 2016-2023 Élisabeth HENRY.
//
// This file is part of Crowbook.
//
@ -58,3 +58,4 @@ pub fn insert_title(tokens: &mut Vec<Token>) {
}
tokens.insert(0, Token::Header(1, vec![]));
}