usfm3
usfm3 is the core Rust crate for parsing USFM 3.x.
The public pipeline is:
tokenize -> parse_cst -> parse_ast / lower_cst -> serialize
Installation
[]
= "0.1"
Lazy Parse Handle
let parsed = parse;
let tokens = parsed.tokens;
let cst = parsed.cst;
let ast = parsed.ast;
let source_map = parsed.source_map;
let diagnostics = parsed.diagnostics;
let usj = parsed
.to_usj
.unwrap;
let usx = parsed.to_usx.unwrap;
let usfm = parsed.to_usfm;
let vref = parsed.to_vref;
parse() is lazy and diagnostics-off by default, so token/CST/editor consumers do not pay for validation unless they opt in.
Eager AST
let ast_document = parse_ast;
let ast = ast_document.ast;
let source_map = ast_document.source_map;
let diagnostics = ast_document.diagnostics;
CST-First Lowering
let cst = parse_cst;
let ast_document = lower_cst;
Notes
- AST nodes are semantic-only and do not own spans.
source_mapmirrors the AST and holds source ranges plus CST anchors.- Diagnostics are a single flat list when requested, otherwise
None. - USJ inline spans come from
source_map, not from the AST.
License
MIT