feat: latex in Traverser

This commit is contained in:
PoiScript 2023-11-19 13:26:14 +08:00
parent 00cfde6e90
commit 917fe2f5d2
No known key found for this signature in database
GPG key ID: 22C2B1249D99985E
5 changed files with 72 additions and 2 deletions

View file

@ -48,7 +48,8 @@
/// inline_src inline_call code bold verbatim italic strike underline list list_item
/// special_block quote_block center_block verse_block comment_block example_block export_block
/// source_block babel_call clock cookie radio_target drawer dyn_block fn_def fn_ref macros
/// snippet timestamp target fixed_width org_table org_table_row org_table_cell
/// snippet timestamp target fixed_width org_table org_table_row org_table_cell latex_fragment
/// latex_environment
/// }
/// }
///
@ -190,6 +191,12 @@ macro_rules! forward_handler {
(@method $handler:ty, link) => {
forward_handler!(@method $handler, link, WalkEvent<&$crate::ast::Link>);
};
(@method $handler:ty, latex_fragment) => {
forward_handler!(@method $handler, latex_fragment, WalkEvent<&$crate::ast::LatexFragment>);
};
(@method $handler:ty, latex_environment) => {
forward_handler!(@method $handler, latex_environment, WalkEvent<&$crate::ast::LatexEnvironment>);
};
(@method $handler:ty, $x:ident) => {
std::compile_error!(std::concat!(std::stringify!($x), " is not a method"));
};

View file

@ -441,4 +441,24 @@ impl Traverser for HtmlExport {
#[tracing::instrument(skip(self, _ctx))]
fn target(&mut self, _event: WalkEvent<&Target>, _ctx: &mut TraversalContext) {}
#[tracing::instrument(skip(self, ctx))]
fn latex_fragment(&mut self, event: WalkEvent<&LatexFragment>, ctx: &mut TraversalContext) {
if let WalkEvent::Enter(l) = event {
self.output += &l.syntax.to_string();
ctx.skip();
}
}
#[tracing::instrument(skip(self, ctx))]
fn latex_environment(
&mut self,
event: WalkEvent<&LatexEnvironment>,
ctx: &mut TraversalContext,
) {
if let WalkEvent::Enter(l) = event {
self.output += &l.syntax.to_string();
ctx.skip();
}
}
}

View file

@ -137,6 +137,8 @@ pub trait Traverser {
ORG_TABLE_RULE_ROW | ORG_TABLE_STANDARD_ROW => traverse!(OrgTableRow, org_table_row),
ORG_TABLE_CELL => traverse!(OrgTableCell, org_table_cell),
LINK => traverse!(Link, link),
LATEX_FRAGMENT => traverse!(LatexFragment, latex_fragment),
LATEX_ENVIRONMENT => traverse!(LatexEnvironment, latex_environment),
BLOCK_CONTENT | LIST_ITEM_CONTENT => traverse_children!(node),
@ -236,4 +238,12 @@ pub trait Traverser {
fn org_table_cell(&mut self, _event: WalkEvent<&OrgTableCell>, _ctx: &mut TraversalContext);
/// Called when entering or leaving `Link` node
fn link(&mut self, _event: WalkEvent<&Link>, _ctx: &mut TraversalContext);
/// Called when entering or leaving `LatexFragment` node
fn latex_fragment(&mut self, _event: WalkEvent<&LatexFragment>, _ctx: &mut TraversalContext);
/// Called when entering or leaving `LatexEnvironment` node
fn latex_environment(
&mut self,
_event: WalkEvent<&LatexEnvironment>,
_ctx: &mut TraversalContext,
);
}