A CIF/mmCIF format parser written in Rust, compiled to WebAssembly (WASM) for use in Chrome and VS Code extensions.
# WASM build
wasm-pack build --target web --release
# Native build
cargo build --release
# Test
cargo testimport init, { CifParser } from './pkg/cif_parser.js';
await init();
const parser = new CifParser();
const result = parser.parse(cifText);
// result = { loops: [...], tokens: [...] }
// Tokens only (for syntax highlighting)
const tokens = parser.parse_tokens(cifText);
// Loops only (for structure analysis)
const loops = parser.parse_loops(cifText);interface ParseResult {
loops: LoopBlock[];
tokens: Token[];
}interface LoopBlock {
start_line: number;
category_name: string; // e.g., "_atom_site"
items: Item[]; // Item definitions in this category
names_defined: boolean;
is_in_loop_block: boolean;
processed_value_count: number;
data_lines: DataLine[];
}interface Item {
line: number;
start: number;
length: number;
name: string; // e.g., "id", "type_symbol"
}interface Token {
line: number;
start: number;
length: number;
token_type: number; // rainbow color index
item_name?: string; // e.g., "_atom_site.id"
}data_/save_/global_blocksloop_constructs- Semicolon-delimited multi-line strings (
;...;) - Single/double quoted strings
#comments_category.itemdata names
MIT