#pikchr #pic #ffi #c

sys pikchr-sys

为 Pikchr 提供绑定

2 个版本

0.1.1 2021 年 9 月 13 日
0.1.0 2021 年 9 月 13 日

#5 in #pic


用于 pikt

0BSD 许可证

285KB
7K SLoC

C 7K SLoC // 0.1% comments Rust 51 SLoC

Pikchr-sys

Pikchr 为 Rust 编程语言提供的绑定。

高级 API

这个包提供了对原始低级 C API 的绑定。要使用 Pikchr 的更高级、更安全的 API,请参见 pikt

版本支持

许可证

pikchr-sys 采用 BSD 无条款许可证

它捆绑了来自 Pikchr 的编译后的 C89 源代码(pikchr.c)和头文件(pikchr.h),Pikchr 同样采用 BSD 无条款许可证。

贡献

除非您明确说明,否则您提交给 pikchr-sys 的任何贡献都将按照上述许可证授予,不附加任何额外条款或条件。


lib.rs:

pikchr.c 提供原始绑定。

使用 pikchr 将需要手动释放缓冲区。引用 C 源代码

此文件实现了一个 C 语言子程序,它接受 PIKCHR 语言文本的字符串并生成一个 SVG 输出的第二个字符串,该输出渲染由输入定义的绘图。从 malloc() 获得存储返回字符串的空间,应由调用者释放。如果发生内存分配错误,可能会返回 NULL。

pikchr 参数定义如下

  • zText: 输入 PIKCHR 标记。以 null 结尾。
  • zClass: 要添加到 SVG class 属性的值。它可以 NULL。
  • mFlags: 控制渲染行为的标志。
  • pnWidth: SVG width 属性的值。它可以 NULL。
  • pnHeight: SVG height 属性的值。它可以 NULL。

示例

let input = "box \"example\"";
let mut width: c_int = 0;
let mut height: c_int = 0;
let input = CString::new(input)?;

let res: *mut c_char = unsafe {
    pikchr(
        input.as_ptr() as *const c_char,
        std::ptr::null(),
        PIKCHR_PLAINTEXT_ERRORS,
        &mut width as *mut c_int,
        &mut height as *mut c_int,
    )
};

let cstr = unsafe { CStr::from_ptr(res) };
let output = String::from_utf8_lossy(cstr.to_bytes()).into_owned();

unsafe { free(res as *mut c_void) };

错误

如果发生错误,宽度将变为 -1,缓冲区将包含错误信息。

无运行时依赖

~0–2MB
~37K SLoC