Browse documentation
Docs/Language

Linguistic interchange and transliteration

These native Rust profiles belong to Standard/Lite and Pro. Core can inspect and format their literal syntax, but needs a Standard parser binding to compile it. All three literal delimiters…

Linguistic interchange and transliteration

These native Rust profiles belong to Standard/Lite and Pro. Core can inspect and format their literal syntax, but needs a Standard parser binding to compile it. All three literal delimiters work; ordinary quotes process Grid escapes, while triple quotes and angle blocks retain the payload. Compilation expands literals into native constants. The compiled values need no parser to reload.

Tag / function Native result Deliberate scope
textgrid / PARSE_TEXTGRID Tiers and ordered interval/point annotations, seconds, UTF-8 source spans Praat full, short and mixed text. Doubled quotes, multiline strings, comments and empty labels. Positive adjacent intervals and increasing point times. Retains Praat backslash trigraphs literally. No binary TextGrid or legacy byte decoding.
eaf / PARSE_EAF Tiers, linguistic types, time slots, annotations with inherited start/end, ordered document elements ELAN EAF 2.8/3.0 XML; integer milliseconds. Validates IDs, tier/type/time references and cycles. Missing times stay null. Metadata and media references retained without opening resources. Structural profile, not complete XSD, controlled-vocabulary or stereotype validation.
conllup (alias conlluplus) / PARSE_CONLLUP Declared columns, sentences, raw fields and basic dependency edges CoNLL-U Plus header; reordered/subset core columns and uppercase namespace columns; unique sentence/token IDs. Keeps _, *, comments and custom values. No custom-column interpretation, full UD tree validation or external corpus loading.
transliteration / PARSE_TRANSLITERATION Source, transformed text, scheme, canonical transform ID and engine identity JSON object containing exactly text and scheme. Fixed bundled Unicode transforms, not arbitrary rules.

TRANSLITERATE(text, scheme) returns the same object as the transliteration literal. Its text field is the transformed string; source retains the exact input. reversible: false means Grid makes no reversibility guarantee. A scheme may leave characters outside its repertoire unchanged. Transliteration is not translation, language detection, pronunciation inference or phonetic analysis.

roman = TRANSLITERATE("Москва", "cyrillic-latin")
name = transliteration"""{"text":"Crème brûlée","scheme":"latin-ascii"}"""
corpus = conllup"""# global.columns = ID FORM HEAD DEPREL
# sent_id = s1
1	Zoë	2	nsubj
2	sings	0	root
"""

Pinned schemes (ICU transforms also accept case-insensitive BCP 47 IDs; the separate ALA-LC table has an edition identifier):

Scheme Transform ID
russian-alalc-2012 ala-lc:ru:2012 (native Library of Congress 2012 Russian letter table)
cyrillic-latin und-Latn-t-und-cyrl
greek-latin und-Latn-t-und-grek
greek-latin-ungegn und-Latn-t-und-grek-m0-ungegn
arabic-latin und-Latn-t-und-arab
devanagari-latin und-Latn-t-und-deva
hangul-latin und-Latn-t-und-hang
hiragana-latin und-Latn-t-und-hira
katakana-latin und-Latn-t-und-kana
japanese-latin-bgn ja-Latn-t-ja-hrkt-m0-bgn
ethiopic-latin-alaloc und-Latn-t-und-ethi-m0-alaloc
latin-ethiopic-alaloc und-Ethi-t-und-latn-m0-alaloc
latin-ascii und-t-und-latn-d0-ascii
han-latin-proper-names und-Latn-t-und-hani-m0-prprname
ethiopic-latin-alaloc-geminate und-Latn-t-und-ethi-m0-alaloc-geminate

The ICU engine and its compiled data are pinned to icu_experimental = 0.6.0 in the lockfile. Changing transform data requires a parser contract revision and fresh expansion identity. ALALOC means that specific bundled CLDR Ethiopic transform. It is not a declaration of conformance to every current ALA-LC romanization table, or to an independently verified historical edition. Japanese BGN is not labeled Hepburn. The Han proper-name transform is explicitly selected and does not promise context-sensitive phrase disambiguation or every Pinyin convention. A certified Hepburn profile and other ALA-LC tables still require separate data and conformance fixtures. Fifteen schemes share one parser; its contract is revision 3 after adding the independent Russian 2012 table (revision 2 added the proper-name and Ethiopic gemination transforms). Bounded IPA/X-SAMPA conversion and Penn Treebank readers are documented in the notation corpus. Existing phonetics records preserve authored IPA text but do not validate the full IPA symbol/diacritic system.

Readers use the native parser input, node, depth and output budgets, with cancellation checkpoints. Transliteration additionally caps text at 8,192 UTF-8 bytes and checks cancellation before/after the library call. ICU exposes no interruptible call or bounded allocator: this is not hard preemption or an RSS guarantee. A local unoptimized 65 KB probe proved impractical; the v1 cap is conservative and whole-document transliteration is excluded. Result-size checks are post-call. No custom rule injection, download, external entity resolution or media retrieval is available. Error offsets are payload-relative UTF-8; TextGrid/CoNLL-U Plus locate lexical errors, XML syntax errors locate the reader position, and EAF semantic/transliteration contract errors currently point at the payload start.

Editor registration supplies tag completion, hover and literal boundaries. TextGrid has a stateful grammar for doubled quotes and multiline strings; EAF uses XML, CoNLL-U Plus the tabular CoNLL-U grammar, and transliteration JSON. Ordinary quoted literals retain Grid string highlighting. Native diagnostics require the editor host's existing injected Standard parser service. These profiles do not add payload symbol rename, tier navigation, media playback or annotation editing.

Dependencies and parser work are selected only in the Standard assembly and on explicit parser/function invocation. Core gains static catalog entries, not an ICU dependency. No worker, file/network I/O, new ordinary resolve branch or per-cell capability discovery is added. Transform construction currently occurs per explicit call, with no global cache. The explicit local linguistics-cost Performance observer reports paired parse and already-expanded native-value admission distributions, including 100/1000 record cases and 1.3/7.8 KB transliteration requests. It is not a historical regression baseline or proof of ordinary resolve overhead. The dependency lockfile also advances shared yoke to 0.8.4 because ICU pattern data requires it; no unmeasured latency or memory regression claim is made.

Primary contracts: Praat TextGrid, CoNLL-U Plus, EAF 3.0 schema, ICU4X transliteration, CLDR transforms, ALA-LC tables.

Local unoptimized observations are retained in the paired cost report: 1,000 TextGrid intervals at a 4.9 ms median; 1,000 CoNLL-U Plus rows at 13.4 ms; Cyrillic transliteration at 25.5 ms for 1.3 KB and 503 ms for 7.8 KB. These are selected-path development measurements, not release-build throughput claims or an ordinary-path regression comparison.

Focused correctness evidence records seven linguistic reader tests, six native language-service metadata tests, three linguistic compiler/runtime tests and twelve editor wiring checks. The runtime tests exercise safe delimiter forms, aliases, ordinary functions, LIR reload with the compiler binding disabled, and the working example.

The later notation continuation evidence records the expanded phonetic and transliteration scope; the earlier measurements above remain historical anchors.

The Russian ALA-LC table is implemented natively, independently of ICU data. Unmapped characters are retained; it does not certify other ALA-LC languages. See the versioned contract.

Xigt interlinear corpora

xigt / PARSE_XIGT imports Xigt XML into native Grid values in Standard (Lite), inherited by Pro. This uses the existing native parser and LIR path; there is no Python or extension runtime dependency. Python is used only for independent reference fixtures during development.

The reader implements the core xigt-corpus → igt → tier → item structure and preserves ordered metadata, custom attributes and mixed metadata content. IGT identifiers are corpus-local; tier and item identifiers are checked within each IGT. References must resolve in that IGT, and item references must select the tier declared by the same reference role on their containing tier. Duplicate identities, malformed structure, unresolved references and conflicting segmentation with alignment/content fail with source diagnostics.

alignment records the annotation relationship. content and segmentation select item text; explicit item text takes precedence. Selections support whole items and nonnegative start:end ranges, with multiple ranges and selections. + concatenates; , inserts a space. Offsets count Unicode scalar characters, not UTF-8 bytes or UTF-16 units. Following the reference implementation, ranges past the text end are clamped and reversed ranges yield empty text. Combining marks count separately; the reader does not normalize text. Content cycles are rejected; alignment cycles are preserved. Referenced values resolve once and expansion is bounded by the existing parser budgets and cancellation context.

The result has igts, tiers, items, references, elements, nodes and edges, plus corpus metadata. Each item retains its authored attributes and resolved value (blank when absent). Reference rows retain their role, join operators and span selections. nodes includes all core elements, including unaligned items; edges distinguishes containment and the three reference roles. GRAPH(xigt"""...""") retains unaligned annotations. Pass the literal directly: a named native-data binding is not yet a supported live graph source. Element records preserve XML metadata without fetching or validating external schemas.

The editor uses XML highlighting for all literal forms. Local identity hover, definition, references and reference completion are source-only; item suggestions are restricted to the declared target tier and the current IGT. Completion edits replace identifiers without changing span suffixes. Entity-spelled identifiers, ambiguous duplicates and over-budget input receive no reference assistance. Rename is unavailable because custom attributes can carry references that the core model cannot establish exhaustively. Payload formatting and interlinear layout rendering remain outside this profile.

See the working example. The upstream data model, reference grammar and reference resolver define the adopted semantics. The fixture provenance pins the reference source and every expected item value. Six direct reader tests pass; native integration and live rendered editor verification are tracked separately in the parser ledger. This does not claim validation of arbitrary Xigt schema extensions, morphological analysis, Leipzig category inference, negative-index extensions, media retrieval, or an exact XML export round trip.