aboutsummaryrefslogtreecommitdiffstats
path: root/src/construct
diff options
context:
space:
mode:
Diffstat (limited to 'src/construct')
-rw-r--r--src/construct/list.rs24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/construct/list.rs b/src/construct/list.rs
index b4ae9b1..b81a5cc 100644
--- a/src/construct/list.rs
+++ b/src/construct/list.rs
@@ -3,6 +3,7 @@
use crate::constant::{LIST_ITEM_VALUE_SIZE_MAX, TAB_SIZE};
use crate::construct::{
blank_line::start as blank_line, partial_space_or_tab::space_or_tab_min_max,
+ thematic_break::start as thematic_break,
};
use crate::token::Token;
use crate::tokenizer::{Code, Event, EventType, State, StateFnResult, Tokenizer};
@@ -106,12 +107,10 @@ pub fn start(tokenizer: &mut Tokenizer, code: Code) -> StateFnResult {
fn before(tokenizer: &mut Tokenizer, code: Code) -> StateFnResult {
match code {
// Unordered.
- Code::Char('*' | '+' | '-') => {
- // To do: check if this is a thematic break?
- tokenizer.enter(Token::ListItem);
- tokenizer.enter(Token::ListItemPrefix);
- marker(tokenizer, code)
- }
+ Code::Char('*' | '+' | '-') => tokenizer.check(thematic_break, |ok| {
+ let func = if ok { nok } else { before_unordered };
+ Box::new(func)
+ })(tokenizer, code),
// Ordered.
Code::Char(char) if char.is_ascii_digit() => {
tokenizer.enter(Token::ListItem);
@@ -125,6 +124,19 @@ fn before(tokenizer: &mut Tokenizer, code: Code) -> StateFnResult {
}
/// To do.
+fn nok(_tokenizer: &mut Tokenizer, _code: Code) -> StateFnResult {
+ (State::Nok, None)
+}
+
+/// To do.
+fn before_unordered(tokenizer: &mut Tokenizer, code: Code) -> StateFnResult {
+ // To do: check if this is a thematic break?
+ tokenizer.enter(Token::ListItem);
+ tokenizer.enter(Token::ListItemPrefix);
+ marker(tokenizer, code)
+}
+
+/// To do.
fn inside(tokenizer: &mut Tokenizer, code: Code, mut size: usize) -> StateFnResult {
size += 1;
match code {