Skip to content

Gukhanmun 0.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 23 Oct 19:21
· 3 commits to main since this release
0.3.0
79c0af4

Released on October 24, 2026.

gukhanmun

  • Added Builder::hanja_variant_set() for selecting the hanja spelling used in rendered output independently of the rendering mode. A separately selected variant set remains in effect when the rendering mode changes, while complete RenderOptions replace both settings. [#11, #12]
  • Added Builder::punctuation() with preserve, modern, traditional, and traditional-vertical output profiles and custom role styles. The default preserves punctuation across plain text, HTML, and Markdown. Technical guards include Unicode Latin letters, and contextual spaces do not detach combining marks or format controls. HTML block, list, and table elements trim contextual spaces without changing annotation windows. [#27, #28]
  • Added automatic reading selection from a fully delimited following Korean particle, including 으로/로 and combinations such as 으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25]
  • Changed Engine streaming boundaries: a sole non-block root Close with pending text is emitted at the next token, flush(), or finish(). finish() supplies EOF evidence while flush() stays conservative; particle lookahead retains four extra source scalars beyond the dictionary tail allowance. [#20, #25]
  • Added candidate-aware dictionary APIs and deterministic default reading selection while preserving existing bundled defaults. Higher-priority dictionaries replace all readings for a key. [#19, #22]
  • Dictionary-wide homophone marking now includes the selected candidate's suffix reading, including custom MapDictionary suffixes. [#19, #22]
  • Added competing readings to the bundled Open Korean Dictionary data, preserving existing default choices and dictionary priority. [#21, #24]
  • Added the loanwords feature, loanwords module and Builder::bundled_loanwords() to compose loanword examples after user dictionaries and before preset dictionaries. The loanwords feature is enabled by default; ko-kr includes the dictionary automatically, while ko-kp leaves it disabled. Use Builder::no_bundled_loanwords() to disable only this dictionary. Builds without default features must enable loanwords or call Builder::no_bundled_loanwords() for ko-kr; otherwise build() returns Error::Config. [#18, #26, #31]
  • Changed weekly data updates to target the maintenance branch of the newest stable release series that ships the dictionary, with a separate PR keeping main current. Before the dictionary's first stable release, updates target main only. [#18, #26]
  • Updated the bundled Open Korean Dictionary (우리말샘) snapshot to 2026-10-04. [#29, #30]
  • Updated the bundled Standard Korean Dictionary (標準國語大辭典) snapshot to 2026-10-12. [#29, #30]

gukhanmun-cdb

  • Added v2 candidate payloads and lookup().candidates(), preserving v1 loading and selected-default lookup methods. [#19, #22]

gukhanmun-cli

  • Added --hanja-variant-set for selecting as-dictionary, shinjitai, kanxi, simplified, or asahimoji whenever the selected rendering mode emits hanja. [#11, #12]
  • Added --punctuation and --punctuation-profile to normalize punctuation with a built-in profile or custom JSON configuration. Technical guards include Unicode Latin letters, and contextual spaces do not detach combining marks or format controls. HTML block, list, and table elements trim contextual spaces without changing annotation windows. [#27, #28]
  • Added automatic reading selection from a fully delimited following Korean particle, including 으로/로 and combinations such as 으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25]
  • Added competing readings to the bundled Open Korean Dictionary data, preserving existing default choices and dictionary priority. [#21, #24]
  • Enabled the bundled NIKL loanword examples by default for ko-kr, before the preset dictionary and after user dictionaries. Use --no-loanwords to disable them, or --loanwords to enable them for ko-kp. --no-bundled-dictionaries disables all bundled dictionaries. [#18, #26, #31]
  • Included NOTICE.md in CLI binary archives to retain attribution for bundled dictionary data, including the NIKL loanword examples. [#18, #26]
  • Changed weekly data updates to target the maintenance branch of the newest stable release series that ships the dictionary, with a separate PR keeping main current. Before the dictionary's first stable release, updates target main only. [#18, #26]
  • Load candidate-bearing FST/CDB v2 dictionaries through existing dictionary options, retaining bundled default readings and positional forms. [#19, #22]
  • Dictionary-wide homophone marking includes selected suffix readings. [#19, #22]
  • Updated the bundled Open Korean Dictionary (우리말샘) snapshot to 2026-10-04. [#29, #30]
  • Updated the bundled Standard Korean Dictionary (標準國語大辭典) snapshot to 2026-10-12. [#29, #30]

gukhanmun-core

  • Added ReadingCandidate, ReadingCandidates, candidate lookup/enumeration methods, and MapDictionary::insert_candidates(). Selection happens before segmentation; alternatives retain their own marks and positional forms. Existing custom dictionary implementations remain supported. [#19, #22]
  • Dictionary-wide homophone marking indexes only selected candidates and includes their suffix readings. [#19, #22]
  • Added automatic reading selection from a fully delimited following Korean particle, including 으로/로 and combinations such as 으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25]
  • Changed Engine streaming boundaries: a sole non-block root Close with pending text is emitted at the next token, flush(), or finish(). finish() supplies EOF evidence while flush() stays conservative; particle lookahead retains four extra source scalars beyond the dictionary tail allowance. [#20, #25]
  • Added dictionary-guided recognition of Unicode z-variants, traditional/simplified forms, CJK compatibility ideographs, Joyo kanji old/new forms, and Asahi variants. Ambiguous variant relations are accepted only when the dictionary identifies one matching sense, while exact source matches remain authoritative. Compatibility ideographs are folded before fallback reading and numeral lookup. [#11, #12]
  • Added HanjaVariantSet with AsDictionary, Shinjitai, Kanxi, Simplified, and Asahimoji output profiles. Annotation::canonical_hanja() exposes the dictionary spelling for a dictionary match and the source hanja for a fallback annotation, so rendering and policy middlewares use the same lexical identity. [#11, #12]
  • Added opt-in output punctuation profiles, including custom marks and contextual spacing, through PunctuationProfile and the post-annotation PunctuationNormalizer. Technical guards include Unicode Latin letters, and contextual spaces do not detach combining marks or format controls. [#27, #28]

gukhanmun-dict-extract

  • Added loanword collection and deterministic extraction with explicit editorial decisions, provenance reports and complete matching sweeps. Enable loanwords-cli for offline commands or loanwords-collect for HTTPS collection using NIKL_LOANWORD_API_KEY. [#18, #26]
  • Loanword output preflight rejects filesystem aliases before publication, and generated reports can be checked beyond the offline input size limit. Encoded service keys are decoded once, and unsafe Trace logging configurations are rejected before authentication. Partial response bodies count toward the collection byte limit even when the request is retried. [#18, #26]
  • Fixed stale failure diagnostics that remained after successful loanword extraction. Diagnostics are removed after both the TSV and report are published; check and audit-only modes preserve them. [#18, #26]

gukhanmun-fst

  • Added v2 candidate payloads and lookup().candidates(), preserving v1 loading and selected-default lookup methods. [#19, #22]

gukhanmun-html

  • Added HtmlPunctuationTextCodec for punctuation normalization across literal and HTML character reference spellings, with original spelling retained for untouched references. Opt-in reader options protect unmatched end tags. HTML block, list, and table elements trim contextual spaces without changing annotation windows. [#27, #28]
  • Added automatic reading selection from a fully delimited following Korean particle, including 으로/로 and combinations such as 으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25]

gukhanmun-loanwords

  • Added a separately selectable, offline dictionary from NIKL loanword spelling examples with source provenance and explicit choices for competing readings. [#18, #26]
  • Changed weekly data updates to target the maintenance branch of the newest stable release series that ships the dictionary, with a separate PR keeping main current. Before the dictionary's first stable release, updates target main only. [#18, #26]

gukhanmun-markdown

  • Added MarkdownWriteOptions and write_markdown_with_options() to preserve Markdown structure when punctuation normalization changes text. [#27, #28]
  • Added automatic reading selection from a fully delimited following Korean particle, including 으로/로 and combinations such as 으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25]

gukhanmun-mkdict

  • Accept candidate rows with preference and suffix_reading in TSV/CSV, or preference and suffixReading in JSONL. Merge policies replace whole sets across files, and reading rules apply to individual candidates. The builder emits v1 for scalar dictionaries and v2 when candidates or suffixes require it; old runtimes must be updated to read v2. [#19, #22]

gukhanmun-napi

  • Added automatic reading selection from a fully delimited following Korean particle, including 으로/로 and combinations such as 으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25]
  • Added competing readings to the bundled Open Korean Dictionary data, preserving existing default choices and dictionary priority. [#21, #24]
  • Added the punctuationJson option and punctuationProfileJson() resolved view for output punctuation profiles, including custom role styles. Technical guards include Unicode Latin letters, and contextual spaces do not detach combining marks or format controls. HTML block, list, and table elements trim contextual spaces without changing annotation windows. [#27, #28]
  • Load candidate-bearing FST/CDB dictionaries without changing the JavaScript options, and include selected suffixes in dictionary-wide homophone marking. [#19, #22]

gukhanmun-opendict

  • Added all competing readings and sorted source sense identifiers to the category TSV snapshots of the Open Korean Dictionary. Curated defaults keep existing category choices reproducible; regenerate or check the snapshots with mise run opendict-extract -- /path/to/pinned-dump.zip and mise run opendict-extract-check -- /path/to/pinned-dump.zip. [#21, #24]
  • Updated the bundled Open Korean Dictionary (우리말샘) snapshot to 2026-10-04. [#29, #30]

gukhanmun-stdict

  • Retain competing readings and source record IDs during extraction, with curated equal-priority decisions preserving all existing default readings. Candidate-specific suffixes now survive raw FST/CDB loading. Use mise run stdict-extract to regenerate and mise run stdict-extract-check to check a source dump without modifying outputs. [#19, #22]
  • Updated the bundled Standard Korean Dictionary (標準國語大辭典) snapshot to 2026-10-12. [#29, #30]

gukhanmun-wasm

  • Added automatic reading selection from a fully delimited following Korean particle, including 으로/로 and combinations such as 으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25]
  • Added competing readings to the bundled Open Korean Dictionary data, preserving existing default choices and dictionary priority. [#21, #24]
  • Added the punctuationJson option and punctuation_profile_json() resolved view for output punctuation profiles, including custom role styles. Technical guards include Unicode Latin letters, and contextual spaces do not detach combining marks or format controls. HTML block, list, and table elements trim contextual spaces without changing annotation windows. [#27, #28]
  • Load candidate-bearing FST/CDB dictionaries without changing the JavaScript options, and include selected suffixes in dictionary-wide homophone marking. [#19, #22]

@gukhanmun/loanwords-cdb

  • Added @gukhanmun/loanwords-cdb to load the bundled NIKL loanword examples through loanwordsCdb() in the WASM and native bindings. [#18, #26]
  • Changed weekly data updates to target the maintenance branch of the newest stable release series that ships the dictionary, with a separate PR keeping main current. Before the dictionary's first stable release, updates target main only. [#18, #26]

@gukhanmun/loanwords-fst

  • Added @gukhanmun/loanwords-fst to load the bundled NIKL loanword examples through loanwordsFst() in the WASM and native bindings. [#18, #26]
  • Changed weekly data updates to target the maintenance branch of the newest stable release series that ships the dictionary, with a separate PR keeping main current. Before the dictionary's first stable release, updates target main only. [#18, #26]

@gukhanmun/napi

  • Added automatic reading selection from a fully delimited following Korean particle, including 으로/로 and combinations such as 으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25]
  • Added competing readings to the bundled Open Korean Dictionary data, preserving existing default choices and dictionary priority. [#21, #24]
  • Added the hanjaVariantSet converter option for selecting the hanja spelling emitted by the Node-API binding. [#11, #12]
  • Added the punctuation option for built-in and custom output profiles, including HTML character references. Resolved styles are available as a copied, deeply frozen options.punctuation view. Technical guards include Unicode Latin letters, and contextual spaces do not detach combining marks or format controls. HTML block, list, and table elements trim contextual spaces without changing annotation windows. [#27, #28]
  • Load candidate-bearing FST/CDB v2 dictionaries through existing dictionary options, retaining bundled default readings and positional forms. [#19, #22]
  • Dictionary-wide homophone marking includes selected suffix readings. [#19, #22]

@gukhanmun/opendict-cdb

  • Changed the bundled Open Korean Dictionary data to retain competing readings within each category, preserving existing default choices and category priority. Source identifiers remain in the extraction TSVs. [#21, #24]
  • Updated the bundled Open Korean Dictionary (우리말샘) snapshot to 2026-10-04. [#29, #30]

@gukhanmun/opendict-fst

  • Changed the bundled Open Korean Dictionary data to retain competing readings within each category, preserving existing default choices and category priority. Source identifiers remain in the extraction TSVs. [#21, #24]
  • Updated the bundled Open Korean Dictionary (우리말샘) snapshot to 2026-10-04. [#29, #30]

@gukhanmun/stdict-cdb

  • Bundle v2 data retaining competing readings and positional forms, with all previous default readings preserved. Requires a binding that reads dictionary format v2. [#19, #22]
  • Updated the bundled Standard Korean Dictionary (標準國語大辭典) snapshot to 2026-10-12. [#29, #30]

@gukhanmun/stdict-fst

  • Bundle v2 data retaining competing readings and positional forms, with all previous default readings preserved. Requires a binding that reads dictionary format v2. [#19, #22]
  • Updated the bundled Standard Korean Dictionary (標準國語大辭典) snapshot to 2026-10-12. [#29, #30]

@gukhanmun/types

  • Added punctuation profile types and GukhanmunOptions.punctuation, with a resolved profile available through Gukhanmun.options.punctuation. [#27, #28]
  • Added the HanjaVariantSet type and the hanjaVariantSet field on GukhanmunOptions for the shared JavaScript API. [#11, #12]

@gukhanmun/wasm

  • Added automatic reading selection from a fully delimited following Korean particle, including 으로/로 and combinations such as 으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25]
  • Added competing readings to the bundled Open Korean Dictionary data, preserving existing default choices and dictionary priority. [#21, #24]
  • Added the hanjaVariantSet converter option for selecting the hanja spelling emitted by the WebAssembly binding. [#11, #12]
  • Added the punctuation option for built-in and custom output profiles, including HTML character references. Resolved styles are available as a copied, deeply frozen options.punctuation view. Technical guards include Unicode Latin letters, and contextual spaces do not detach combining marks or format controls. HTML block, list, and table elements trim contextual spaces without changing annotation windows. [#27, #28]
  • Load candidate-bearing FST/CDB v2 dictionaries through existing dictionary options, retaining bundled default readings and positional forms. [#19, #22]
  • Dictionary-wide homophone marking includes selected suffix readings. [#19, #22]