diff options
Diffstat (limited to '')
-rw-r--r-- | src/content/document.rs | 9 | ||||
-rw-r--r-- | src/tokenizer.rs | 30 |
2 files changed, 19 insertions, 20 deletions
diff --git a/src/content/document.rs b/src/content/document.rs index e2c4f96..2006021 100644 --- a/src/content/document.rs +++ b/src/content/document.rs @@ -313,7 +313,7 @@ fn flow_start(tokenizer: &mut Tokenizer, code: Code, mut info: DocumentInfo) -> let state = info.next; info.next = Box::new(flow); // This is weird but Rust needs a function there. - tokenizer.go_until(state, eof_eol, move |(state, remainder)| { + tokenizer.go_until(state, eol, move |(state, remainder)| { ( State::Fn(Box::new(move |t, c| flow_end(t, c, info, state))), remainder, @@ -547,9 +547,6 @@ fn line_end( info } -fn eof_eol(code: Code) -> bool { - matches!( - code, - Code::None | Code::CarriageReturnLineFeed | Code::Char('\n' | '\r') - ) +fn eol(code: Code) -> bool { + matches!(code, Code::CarriageReturnLineFeed | Code::Char('\n' | '\r')) } diff --git a/src/tokenizer.rs b/src/tokenizer.rs index 788ba6f..25efaac 100644 --- a/src/tokenizer.rs +++ b/src/tokenizer.rs @@ -130,10 +130,15 @@ pub struct Media { pub id: String, } -/// To do. +/// Info used to tokenize the current container. +/// +/// This info is shared between the initial construct and its continuation. +/// It’s only used for list items. #[derive(Default, Debug)] pub struct ContainerState { + /// Whether the first (and all future) lines were blank. pub blank_initial: bool, + /// The size of the initial construct. pub size: usize, } @@ -206,11 +211,16 @@ pub struct Tokenizer<'a> { /// /// Used when tokenizing [flow content][crate::content::flow]. pub interrupt: bool, - /// To do. + /// Whether containers cannot “pierce” into the current construct. + /// + /// Used when tokenizing [document content][crate::content::document]. pub concrete: bool, - /// To do. + /// Whether this line is lazy. + /// + /// The previous line was a paragraph, and this line’s containers did not + /// match. pub lazy: bool, - /// To do. + /// Current container state. pub container: Option<ContainerState>, } @@ -571,7 +581,6 @@ impl<'a> Tokenizer<'a> { /// /// This is set up to support repeatedly calling `feed`, and thus streaming /// markdown into the state machine, and normally pauses after feeding. - /// When `done: true` is passed, the EOF is fed. pub fn push( &mut self, codes: &[Code], @@ -601,7 +610,7 @@ impl<'a> Tokenizer<'a> { result } - /// To do. + /// Flush the tokenizer. pub fn flush( &mut self, start: impl FnOnce(&mut Tokenizer, Code) -> StateFnResult + 'static, @@ -621,9 +630,6 @@ fn attempt_impl( done: impl FnOnce((Vec<Code>, Vec<Code>), bool, &mut Tokenizer, State) -> StateFnResult + 'static, ) -> Box<StateFn> { Box::new(|tokenizer, code| { - // To do: `pause` is currently used after the code. - // Should it be before? - // How to match `eof`? if !codes.is_empty() && pause(tokenizer.previous) { return done( (codes, vec![code]), @@ -664,10 +670,6 @@ fn attempt_impl( } /// Feed a list of `codes` into `start`. -/// -/// This is set up to support repeatedly calling `feed`, and thus streaming -/// markdown into the state machine, and normally pauses after feeding. -/// When `done: true` is passed, the EOF is fed. fn feed_impl( tokenizer: &mut Tokenizer, codes: &[Code], @@ -705,7 +707,7 @@ fn feed_impl( check_statefn_result((state, Some(codes[index..].to_vec()))) } -/// To do. +/// Flush `start`: pass `eof`s to it until done. fn flush_impl( tokenizer: &mut Tokenizer, start: impl FnOnce(&mut Tokenizer, Code) -> StateFnResult + 'static, |