diff --git a/Cargo.lock b/Cargo.lock index 69a7bec..bb45502 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2533,6 +2533,13 @@ dependencies = [ "typst-render", ] +[[package]] +name = "showbits-typst-plugin" +version = "0.0.0" +dependencies = [ + "wasm-minimal-protocol", +] + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -3516,6 +3523,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "venial" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61584a325b16f97b5b25fcc852eb9550843a251057a5e3e5992d2376f3df4bb2" +dependencies = [ + "proc-macro2", + "quote", +] + [[package]] name = "version-compare" version = "0.2.0" @@ -3611,6 +3628,16 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-minimal-protocol" +version = "0.1.0" +source = "git+https://github.com/astrale-sharp/wasm-minimal-protocol.git?rev=90336ebf2d99844fd8f8e99ea7096af96526cbf4#90336ebf2d99844fd8f8e99ea7096af96526cbf4" +dependencies = [ + "proc-macro2", + "quote", + "venial", +] + [[package]] name = "wasmi" version = "0.40.0" diff --git a/Cargo.toml b/Cargo.toml index 4806234..f22133d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ members = [ "showbits-common", "showbits-thermal-printer", "showbits-typst", + "showbits-typst-plugin", ] [workspace.package] @@ -39,6 +40,10 @@ version = "0.7.6" default-features = false features = ["std", "taffy_tree", "flexbox", "grid", "block_layout"] +[workspace.dependencies.wasm-minimal-protocol] +git = "https://github.com/astrale-sharp/wasm-minimal-protocol.git" +rev = "90336ebf2d99844fd8f8e99ea7096af96526cbf4" + [workspace.lints] rust.unsafe_code = { level = "forbid", priority = 1 } # Lint groups diff --git a/showbits-thermal-printer/src/documents.rs b/showbits-thermal-printer/src/documents.rs index 0ad992f..b296042 100644 --- a/showbits-thermal-printer/src/documents.rs +++ b/showbits-thermal-printer/src/documents.rs @@ -5,5 +5,7 @@ pub use self::text::*; mod text; fn typst_with_lib() -> Typst { - Typst::new().with_file("/lib.typ", include_str!("documents/lib.typ")) + Typst::new() + .with_file("/lib.typ", include_str!("documents/lib.typ")) + .with_file("/plugin.wasm", include_bytes!("documents/plugin.wasm")) } diff --git a/showbits-thermal-printer/src/documents/lib.typ b/showbits-thermal-printer/src/documents/lib.typ index 69f55ca..f11798c 100644 --- a/showbits-thermal-printer/src/documents/lib.typ +++ b/showbits-thermal-printer/src/documents/lib.typ @@ -19,3 +19,5 @@ // Determined by experiments so that the top and bottom white border are roughly // the same size after tearing off the paper. #let feed = v(64pt + 32pt) + +#import plugin("plugin.wasm") as plugin diff --git a/showbits-thermal-printer/src/documents/plugin.wasm b/showbits-thermal-printer/src/documents/plugin.wasm new file mode 120000 index 0000000..178ce8a --- /dev/null +++ b/showbits-thermal-printer/src/documents/plugin.wasm @@ -0,0 +1 @@ +../../../target/wasm32-unknown-unknown/release/showbits_typst_plugin.wasm \ No newline at end of file diff --git a/showbits-thermal-printer/src/documents/text/plugin.wasm b/showbits-thermal-printer/src/documents/text/plugin.wasm new file mode 120000 index 0000000..04468b6 --- /dev/null +++ b/showbits-thermal-printer/src/documents/text/plugin.wasm @@ -0,0 +1 @@ +../plugin.wasm \ No newline at end of file diff --git a/showbits-typst-plugin/Cargo.toml b/showbits-typst-plugin/Cargo.toml new file mode 100644 index 0000000..af236df --- /dev/null +++ b/showbits-typst-plugin/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "showbits-typst-plugin" +version = { workspace = true } +edition = { workspace = true } + +[lib] +crate-type = ["cdylib"] + +[dependencies.wasm-minimal-protocol] +git = "https://github.com/astrale-sharp/wasm-minimal-protocol.git" +rev = "90336ebf2d99844fd8f8e99ea7096af96526cbf4" + +[profile.release] +lto = true # Enable link-time optimization +strip = true # Strip symbols from binary* +opt-level = 'z' # Optimize for size +codegen-units = 1 # Reduce number of codegen units to increase optimizations +panic = 'abort' # Abort on panic + +[lints] +workspace = true diff --git a/showbits-typst-plugin/meta/build b/showbits-typst-plugin/meta/build new file mode 100755 index 0000000..330a86d --- /dev/null +++ b/showbits-typst-plugin/meta/build @@ -0,0 +1,5 @@ +#!/usr/bin/env fish + +cargo build --release \ + --package showbits-typst-plugin \ + --target wasm32-unknown-unknown diff --git a/showbits-typst-plugin/meta/setup b/showbits-typst-plugin/meta/setup new file mode 100755 index 0000000..6df30e8 --- /dev/null +++ b/showbits-typst-plugin/meta/setup @@ -0,0 +1,3 @@ +#!/usr/bin/env fish + +rustup target add wasm32-unknown-unknown diff --git a/showbits-typst-plugin/src/lib.rs b/showbits-typst-plugin/src/lib.rs new file mode 100644 index 0000000..5395d56 --- /dev/null +++ b/showbits-typst-plugin/src/lib.rs @@ -0,0 +1,8 @@ +use wasm_minimal_protocol::*; + +initiate_protocol!(); + +#[wasm_func] +pub fn debug_print(arg: &[u8]) -> Vec { + format!("{arg:?}").into_bytes() +}