From da6349e2f5dcdb08f8344802931493f8efc74086 Mon Sep 17 00:00:00 2001
From: ef3d0c3e
Date: Tue, 27 Aug 2024 10:39:30 +0200
Subject: [PATCH] DocumentEnd cleanup
---
src/document/document.rs | 6 +++++-
src/document/variable.rs | 1 -
src/elements/blockquote.rs | 5 +----
src/elements/list.rs | 4 +++-
src/elements/script.rs | 4 ++--
src/parser/langparser.rs | 17 ++++++++++-------
6 files changed, 21 insertions(+), 16 deletions(-)
diff --git a/src/document/document.rs b/src/document/document.rs
index 87f6e83..29a67b9 100644
--- a/src/document/document.rs
+++ b/src/document/document.rs
@@ -120,6 +120,7 @@ pub trait Document<'a>: core::fmt::Debug {
/// Pushes a new element into the document's content
fn push(&self, elem: Box) {
+ // Add reference
if let Some(refname) = elem
.as_referenceable()
.and_then(|reference| reference.reference_name())
@@ -128,7 +129,10 @@ pub trait Document<'a>: core::fmt::Debug {
refname.clone(),
ElemReference::Direct(self.content().borrow().len()),
);
- } else if let Some(container) = self
+ }
+ // Add contained references
+ else if let Some(container) =
+ self
.content()
.borrow()
.last()
diff --git a/src/document/variable.rs b/src/document/variable.rs
index 6460282..60611f6 100644
--- a/src/document/variable.rs
+++ b/src/document/variable.rs
@@ -7,7 +7,6 @@ use crate::parser::source::VirtualSource;
use std::path::PathBuf;
use std::rc::Rc;
-// TODO enforce to_string(from_string(to_string())) == to_string()
pub trait Variable {
fn location(&self) -> &Token;
diff --git a/src/elements/blockquote.rs b/src/elements/blockquote.rs
index 6b6af34..846e882 100644
--- a/src/elements/blockquote.rs
+++ b/src/elements/blockquote.rs
@@ -13,7 +13,6 @@ use blockquote_style::BlockquoteStyle;
use regex::Match;
use regex::Regex;
use runtime_format::FormatArgs;
-use runtime_format::FormatError;
use runtime_format::FormatKey;
use runtime_format::FormatKeyError;
@@ -22,7 +21,6 @@ use crate::compiler::compiler::Target;
use crate::compiler::compiler::Target::HTML;
use crate::document::document::Document;
use crate::document::element::ContainerElement;
-use crate::document::element::DocumentEnd;
use crate::document::element::ElemKind;
use crate::document::element::Element;
use crate::elements::paragraph::Paragraph;
@@ -127,8 +125,7 @@ impl Element for Blockquote {
let mut in_paragraph = false;
for elem in &self.content {
- if elem.downcast_ref::().is_some() {
- } else if elem.downcast_ref::().is_some() {
+ if elem.downcast_ref::().is_some() {
if in_paragraph {
result += "
";
in_paragraph = false;
diff --git a/src/elements/list.rs b/src/elements/list.rs
index 92b71c1..a431e08 100644
--- a/src/elements/list.rs
+++ b/src/elements/list.rs
@@ -396,11 +396,13 @@ impl Rule for ListRule {
)
.finish(),
);
- break;
+ // Return an empty paragraph
+ vec![]
}
Ok(mut paragraph) => std::mem::take(&mut paragraph.content),
};
+
if let Some(previous_depth) = document
.last_element::()
.map(|ent| ent.numbering.clone())
diff --git a/src/elements/script.rs b/src/elements/script.rs
index 8547639..b86be07 100644
--- a/src/elements/script.rs
+++ b/src/elements/script.rs
@@ -306,7 +306,7 @@ mod tests {
"".to_string(),
r#"
Simple evals:
- * %< 1+1>%
+ * 1+1: %< 1+1>%
* %<" 1+1>% = 2
* %%
@@ -327,7 +327,7 @@ Evaluation: %%
validate_document!(doc.content().borrow(), 0,
Paragraph;
ListMarker;
- ListEntry {};
+ ListEntry;
ListEntry {
Text { content == "2" };
Text { content == " = 2" };
diff --git a/src/parser/langparser.rs b/src/parser/langparser.rs
index 781c410..c748ac8 100644
--- a/src/parser/langparser.rs
+++ b/src/parser/langparser.rs
@@ -112,13 +112,16 @@ impl Parser for LangParser {
super::state::Scope::DOCUMENT,
));
- state.push(
- &doc,
- Box::new(DocumentEnd(Token::new(
- doc.source().content().len()..doc.source().content().len(),
- doc.source(),
- ))),
- );
+ if parent.is_none()
+ {
+ state.push(
+ &doc,
+ Box::new(DocumentEnd(Token::new(
+ doc.source().content().len()..doc.source().content().len(),
+ doc.source(),
+ ))),
+ );
+ }
(Box::new(doc), state)
}