mirror of
https://github.com/typst/typst
synced 2025-08-07 11:47:53 +08:00
support sub term
This commit is contained in:
parent
aa8f1c8f83
commit
1a00df68c7
@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user