feat: convert TypstDocument to enum (#1256)

* feat: convert `TypstDocument` to enum

* fix: errors

* build: update cargo.lock

* fix: warnings

* fix: error

* html changes

* Revert "html changes"

This reverts commit f9fc0e4872.

* Revert "Revert "html changes""

This reverts commit 7dc554a9e4.

* use std typst docs

* span

* paged

* paged

* html change

* paged

* html change

* bytes

* paged

* paged

* paged

* html changes

* paged

* html changes

* paged
This commit is contained in:
Myriad-Dreamin 2025-02-03 11:17:58 +08:00 committed by GitHub
parent 30a08e79ab
commit 3bc5f19cf5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 237 additions and 123 deletions

View file

@ -16,6 +16,8 @@ rust-version.workspace = true
serde.workspace = true
tinymist-query.workspace = true
reflexo-vec2svg.workspace = true
reflexo-typst.workspace = true
tinymist-std.workspace = true
base64.workspace = true
log.workspace = true

View file

@ -10,6 +10,7 @@ use core::fmt;
use base64::Engine;
use reflexo_vec2svg::{ExportFeature, SvgExporter, SvgText};
use tinymist_query::{FramePosition, LocalContext, VersionedDocument};
use tinymist_std::typst::TypstDocument;
struct PeriscopeExportFeature {}
@ -97,32 +98,36 @@ impl PeriscopeRenderer {
doc: VersionedDocument,
pos: FramePosition,
) -> Option<(String, f32, f32)> {
// todo: svg viewer compatibility
type UsingExporter = SvgExporter<PeriscopeExportFeature>;
let mut doc = UsingExporter::svg_doc(&doc.document);
doc.module.prepare_glyphs();
let page0 = doc.pages.get(pos.page.get() - 1)?.clone();
let mut svg_text = UsingExporter::render(&doc.module, &[page0.clone()], None);
match &doc.document {
TypstDocument::Paged(paged_doc) => {
// todo: svg viewer compatibility
type UsingExporter = SvgExporter<PeriscopeExportFeature>;
let mut doc = UsingExporter::svg_doc(paged_doc);
doc.module.prepare_glyphs();
let page0 = doc.pages.get(pos.page.get() - 1)?.clone();
let mut svg_text = UsingExporter::render(&doc.module, &[page0.clone()], None);
// todo: let typst.ts expose it
let svg_header = svg_text.get_mut(0)?;
// todo: let typst.ts expose it
let svg_header = svg_text.get_mut(0)?;
let y_center = pos.point.y.to_pt() as f32;
let y_lo = y_center - self.p.y_above;
let y_hi = y_center + self.p.y_below;
let y_center = pos.point.y.to_pt() as f32;
let y_lo = y_center - self.p.y_above;
let y_hi = y_center + self.p.y_below;
let width = page0.size.x.0;
let height = y_hi - y_lo;
let width = page0.size.x.0;
let height = y_hi - y_lo;
*svg_header = SvgText::Plain(header_inner(
page0.size.x.0,
y_lo,
y_hi,
self.p.scale,
self.p.invert_color == "always",
));
*svg_header = SvgText::Plain(header_inner(
page0.size.x.0,
y_lo,
y_hi,
self.p.scale,
self.p.invert_color == "always",
));
Some((SvgText::join(svg_text), width, height))
Some((SvgText::join(svg_text), width, height))
}
}
}
}