[wasm-rust] Docs and API update
This commit is contained in:
parent
0d237d062e
commit
db789eacb4
|
@ -35,12 +35,12 @@ harfbuzz-wasm = { path = "your-harfbuzz-source/src/wasm/rust/harfbuzz-wasm"}
|
|||
use wasm_bindgen::prelude::*;
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn shape(_font_ref: u32, _buf_ref: u32, _features: u32, _num_features: u32) -> i32 {
|
||||
pub fn shape(_shape_plan: u32, _font_ref: u32, _buf_ref: u32, _features: u32) -> i32 {
|
||||
1 // success!
|
||||
}
|
||||
```
|
||||
|
||||
This exports a shaping function which takes two arguments, tokens representing the font and the buffer, and returns a status value. We can pass these tokens back to Harfbuzz in order to use its native functions on the font and buffer objects. More on native functions later - let's get this shaper compiled and added into a font:
|
||||
This exports a shaping function which takes four arguments, tokens representing the shaping plan, the font and the buffer, and returns a status value. We can pass these tokens back to Harfbuzz in order to use its native functions on the font and buffer objects. More on native functions later - let's get this shaper compiled and added into a font:
|
||||
|
||||
* To compile the shaper, run `wasm-pack build --target nodejs`:
|
||||
|
||||
|
@ -85,7 +85,7 @@ In debugging builds of Harfbuzz, we can print some output from the web assembly
|
|||
use harfbuzz_wasm::debug;
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn shape(_font_ref: u32, _buf_ref: u32, _features: u32, _num_features: u32) -> i32 {
|
||||
pub fn shape(shape_plan, font_ref: u32, buf_ref: u32, _features: u32) -> i32 {
|
||||
debug("Hello from Rust!\n");
|
||||
1
|
||||
}
|
||||
|
@ -106,7 +106,7 @@ use wasm_bindgen::prelude::*;
|
|||
use harfbuzz_wasm::{Font, GlyphBuffer};
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn shape(_font_ref: u32, _buf_ref: u32, _features: u32, _num_features: u32) -> i32 {
|
||||
pub fn shape(_shape_plan:u32, font_ref: u32, buf_ref: u32, _features: u32) -> i32 {
|
||||
let font = Font::from_ref(font_ref);
|
||||
let mut buffer = GlyphBuffer::from_ref(buf_ref);
|
||||
for mut item in buffer.glyphs.iter_mut() {
|
||||
|
|
|
@ -42,7 +42,7 @@ extern "C" {
|
|||
fn font_get_glyph_h_advance(font: u32, glyph: u32) -> i32;
|
||||
fn font_get_glyph_v_advance(font: u32, glyph: u32) -> i32;
|
||||
fn face_copy_table(font: u32, tag: u32) -> Blob;
|
||||
fn buffer_copy_contents(buffer: u32) -> CBufferContents;
|
||||
fn buffer_copy_contents(buffer: u32, cbuffer: *mut CBufferContents) -> bool;
|
||||
fn buffer_set_contents(buffer: u32, cbuffer: &CBufferContents) -> bool;
|
||||
fn debugprint(s: *const u8);
|
||||
fn shape_with(
|
||||
|
@ -203,7 +203,15 @@ impl<T: BufferItem> Buffer<T> {
|
|||
/// The `Buffer` struct implements Drop, meaning that when the shaping
|
||||
/// function is finished, the buffer contents are sent back to Harfbuzz.
|
||||
pub fn from_ref(ptr: u32) -> Self {
|
||||
let c_contents: CBufferContents = unsafe { buffer_copy_contents(ptr) };
|
||||
let mut c_contents = CBufferContents {
|
||||
info: std::ptr::null_mut(),
|
||||
position: std::ptr::null_mut(),
|
||||
length: 0,
|
||||
};
|
||||
|
||||
unsafe {
|
||||
buffer_copy_contents(ptr, &mut c_contents) || panic!("Couldn't copy buffer contents")
|
||||
};
|
||||
let positions: Vec<CGlyphPosition> = unsafe {
|
||||
std::slice::from_raw_parts(c_contents.position, c_contents.length as usize).to_vec()
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue