fix(parser): list parsing

This commit is contained in:
PoiScript 2019-04-12 15:36:49 +08:00
parent b17b355d3b
commit 2467cb3db3

View file

@ -580,13 +580,10 @@ impl<'a> Iterator for Parser<'a> {
fn next(&mut self) -> Option<Event<'a>> { fn next(&mut self) -> Option<Event<'a>> {
if let Some(&(container, limit, end)) = self.stack.last() { if let Some(&(container, limit, end)) = self.stack.last() {
// eprintln!( let tail = &self.text[self.off..limit];
// "{:width$} {:?} {:?}",
// ' ', // eprint!("{:1$}", ' ', self.stack_depth());
// container, // eprintln!("{:?} {:?} {:?}", container, tail, self.next_item);
// &self.text[self.off..limit],
// width = self.stack_depth(),
// );
debug_assert!( debug_assert!(
self.off <= limit && limit <= end && end <= self.text.len(), self.off <= limit && limit <= end && end <= self.text.len(),
@ -597,8 +594,6 @@ impl<'a> Iterator for Parser<'a> {
self.text.len() self.text.len()
); );
let tail = &self.text[self.off..limit];
Some(match container { Some(match container {
Container::Headline(beg) => { Container::Headline(beg) => {
if self.off >= limit { if self.off >= limit {
@ -643,8 +638,9 @@ impl<'a> Iterator for Parser<'a> {
} }
Container::List(ident, ordered) => { Container::List(ident, ordered) => {
if let Some(bullet) = self.next_item.pop().unwrap() { if let Some(bullet) = self.next_item.pop().unwrap() {
self.off += bullet.len() + ident; let off = bullet.len() + ident;
let (limit, end, next) = list::parse(tail, ident); self.off += off;
let (limit, end, next) = list::parse(&tail[off..], ident);
self.push_stack(Container::ListItem, limit, end); self.push_stack(Container::ListItem, limit, end);
self.next_item.push(next); self.next_item.push(next);
Event::ListItemBeg { bullet } Event::ListItemBeg { bullet }