aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler.rs')
-rw-r--r--src/compiler.rs15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/compiler.rs b/src/compiler.rs
index d675c48..8a28654 100644
--- a/src/compiler.rs
+++ b/src/compiler.rs
@@ -237,6 +237,7 @@ struct CompileContext<'a> {
pub character_reference_kind: Option<CharacterReferenceKind>,
pub media_stack: Vec<Media>,
pub definitions: HashMap<String, Definition>,
+ pub tight_stack: Vec<bool>,
/// Fields used to influance the current compilation.
pub slurp_one_line_ending: bool,
pub tags: bool,
@@ -270,6 +271,7 @@ impl<'a> CompileContext<'a> {
character_reference_kind: None,
media_stack: vec![],
definitions: HashMap::new(),
+ tight_stack: vec![],
slurp_one_line_ending: false,
tags: true,
ignore_encode: false,
@@ -604,7 +606,7 @@ fn on_enter_buffer(context: &mut CompileContext) {
/// Handle [`Enter`][EventType::Enter]:[`BlockQuote`][Token::BlockQuote].
fn on_enter_block_quote(context: &mut CompileContext) {
- // tightStack.push(false)
+ context.tight_stack.push(false);
context.line_ending_if_needed();
context.tag("<blockquote>".to_string());
}
@@ -761,7 +763,7 @@ fn on_exit_break(context: &mut CompileContext) {
/// Handle [`Exit`][EventType::Exit]:[`BlockQuote`][Token::BlockQuote].
fn on_exit_block_quote(context: &mut CompileContext) {
- // tightStack.pop()
+ context.tight_stack.pop();
context.line_ending_if_needed();
context.tag("</blockquote>".to_string());
// let mut slurp_all_line_endings = false;
@@ -842,15 +844,16 @@ fn on_exit_code_flow(context: &mut CompileContext) {
.take()
.expect("`code_flow_seen_data` must be defined");
- // To do: containers.
// One special case is if we are inside a container, and the fenced code was
// not closed (meaning it runs to the end).
// In that case, the following line ending, is considered *outside* the
// fenced code and block quote by micromark, but CM wants to treat that
// ending as part of the code.
- // if fenced_count != None && fenced_count < 2 && tightStack.length > 0 && !last_was_tag {
- // line_ending();
- // }
+ if let Some(count) = context.code_fenced_fences_count {
+ if count == 1 && !context.tight_stack.is_empty() && !context.last_was_tag {
+ context.line_ending();
+ }
+ }
// But in most cases, it’s simpler: when we’ve seen some data, emit an extra
// line ending when needed.