support sub term

This commit is contained in:
wznmickey 2025-01-22 16:51:53 -05:00
parent aa8f1c8f83
commit 1a00df68c7

View File

@ -107,13 +107,15 @@ fn markup_expr(p: &mut Parser, at_start: bool, nesting: &mut usize) {
SyntaxKind::Star => strong(p), SyntaxKind::Star => strong(p),
SyntaxKind::Underscore => emph(p), SyntaxKind::Underscore => emph(p),
SyntaxKind::HeadingMarker if at_start => heading(p), SyntaxKind::HeadingMarker if at_start => heading(p),
SyntaxKind::ListMarker => list_item(p), SyntaxKind::ListMarker if at_start => list_item(p),
SyntaxKind::EnumMarker => enum_item(p), SyntaxKind::EnumMarker if at_start => enum_item(p),
SyntaxKind::TermMarker if at_start => term_item(p), SyntaxKind::TermMarker if at_start => term_item(p),
SyntaxKind::RefMarker => reference(p), SyntaxKind::RefMarker => reference(p),
SyntaxKind::Dollar => equation(p), SyntaxKind::Dollar => equation(p),
SyntaxKind::HeadingMarker SyntaxKind::HeadingMarker
| SyntaxKind::ListMarker
| SyntaxKind::EnumMarker
| SyntaxKind::TermMarker | SyntaxKind::TermMarker
| SyntaxKind::Colon => p.convert_and_eat(SyntaxKind::Text), | SyntaxKind::Colon => p.convert_and_eat(SyntaxKind::Text),
@ -155,34 +157,20 @@ fn heading(p: &mut Parser) {
/// Parses an item in a bullet list: `- ...`. /// Parses an item in a bullet list: `- ...`.
fn list_item(p: &mut Parser) { fn list_item(p: &mut Parser) {
let mut column = 0; p.with_nl_mode(AtNewline::RequireColumn(p.current_column()), |p| {
for i in (0..p.current_start()).rev() {
if p.text.chars().nth(i) == Some('\n') {
column = i;
break;
}
}
p.with_nl_mode(AtNewline::RequireColumn(p.current_start() - column), |p| {
let m = p.marker(); let m = p.marker();
p.assert(SyntaxKind::ListMarker); p.assert(SyntaxKind::ListMarker);
markup(p, false, false, syntax_set!(RightBracket, End)); markup(p, true, false, syntax_set!(RightBracket, End));
p.wrap(m, SyntaxKind::ListItem); p.wrap(m, SyntaxKind::ListItem);
}); });
} }
/// Parses an item in an enumeration (numbered list): `+ ...` or `1. ...`. /// Parses an item in an enumeration (numbered list): `+ ...` or `1. ...`.
fn enum_item(p: &mut Parser) { fn enum_item(p: &mut Parser) {
let mut column = 0; p.with_nl_mode(AtNewline::RequireColumn(p.current_column()), |p| {
for i in (0..p.current_start()).rev() {
if p.text.chars().nth(i) == Some('\n') {
column = i;
break;
}
}
p.with_nl_mode(AtNewline::RequireColumn(p.current_start() - column), |p| {
let m = p.marker(); let m = p.marker();
p.assert(SyntaxKind::EnumMarker); p.assert(SyntaxKind::EnumMarker);
markup(p, false, false, syntax_set!(RightBracket, End)); markup(p, true, false, syntax_set!(RightBracket, End));
p.wrap(m, SyntaxKind::EnumItem); p.wrap(m, SyntaxKind::EnumItem);
}); });
} }
@ -196,7 +184,7 @@ fn term_item(p: &mut Parser) {
markup(p, false, false, syntax_set!(Colon, RightBracket, End)); markup(p, false, false, syntax_set!(Colon, RightBracket, End));
}); });
p.expect(SyntaxKind::Colon); p.expect(SyntaxKind::Colon);
markup(p, false, false, syntax_set!(RightBracket, End)); markup(p, true, false, syntax_set!(RightBracket, End));
p.wrap(m, SyntaxKind::TermItem); p.wrap(m, SyntaxKind::TermItem);
}); });
} }