コンテンツにスキップ

Rust

前提: Document IRRust Core API

Rust application、tool、または別言語用 native binding を書くなら、mdi-core を直接依存にできます。FFI/WASM 境界なしで使える native の経路であり、ほかの language binding はこの crate の薄い wrapper です。

mdi-corecrates.io で公開されています。

[dependencies]
mdi-core = "2.0"
use mdi_core::{parse_document, render_html};
fn main() {
let source = "第^12^話。{東京|とうきょう}は雨だった。";
let document = parse_document(source);
assert_eq!(document.children.len(), 1);
println!("{}", render_html(source));
}

parse_document(&str) -> Documentparse_output(&str) -> ParseOutput が parse entry point です。各 renderer(render_htmlrender_textrender_text_formatrender_epubrender_docxrender_pdf)は raw &str 版と *_document 版を持ちます。複数形式を同じ tree から出すなら render_html_document(&document) のような後者を使い、解析を一度にしてください。

不正な MDI syntax は panic せず literal fallback になります。一方 EPUB/DOCX/PDF は I/O や Chromium 不在で Result<Vec<u8>, String> を返します。

match mdi_core::render_pdf(source, &mdi_core::PdfOptions::default()) {
Ok(bytes) => std::fs::write("out.pdf", bytes)?,
Err(message) => eprintln!("PDF render failed: {message}"),
}

MDI_IR_VERSIONMDI_SPEC_VERSION は exported constant です。永続化した ParseOutput を読み直すなら version を確認してください。SourceSpan { start_byte, end_byte } は UTF-8 byte の半開 range で、char index ではありません。

parse、serialize_mdi、HTML/TXT/EPUB/DOCX/PDF renderer はすべて実装済みです。baseline の正確な範囲は Rust Core API を参照してください。

  • async API はありません。 すべて同期的で、render_pdf は Chromium subprocess を待ちます。async runtime では Tokio の spawn_blocking 等で包んでください。