From 162f72f95fe924f46da6fc3287c2d60856ee3b03 Mon Sep 17 00:00:00 2001 From: Ronald Tse Date: Mon, 9 Nov 2026 06:40:44 +0800 Subject: [PATCH] feat(alalc): encode Church Slavic 2022 and Rusyn 2013 romanization tables MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ALA-LC batch 3 (Cyrlic) — the two systems of the batch with sources in the collection: - alalc-chu-Cyrl-Latn-2022: Church Slavic, 2022 version (3-page table + notes on diacritics, abbreviations, numerals, dates). Full alphabet including yuses, ksi, psi, fita, izhitsa, both uk forms (monograph uk -> U, digraph uk -> U-macron), iotated letters romanized I-macron plus tie plus vowel (I-macron + U+0361 + vowel), ot ligature -> o-macron + tie + t. Numeric-value column carried into notes. - alalc-rue-Cyrl-Latn-2013: Rusyn / Carpatho-Rusyn (no earlier versions). Ukrainian-style gh/g distinction, ye/yu/ya with the I-macron + tie convention, yaty -> i-circumflex, yery -> y-circumflex, and the ligature rows zh/kh/ts (U+0361) per notes 1, 3 and 4. The Vojvodinian i variant of и (note 2) is documented in notes; the map encodes the general y rule. Every table row is carried as an embedded test (the documents have no example words beyond the tables): 98 + 78 tests, all passing through the interscript-ts ISC runtime. Source-document errata are flagged in the map notes (lowercase и row prints capital I; lowercase ф row prints capital F; the ya upper-case cell shows only i-macron; yo/o-circumflex vernacular cells use Latin codepoints; hard sign printed as two primes). Verification: interscript-ts parseIsc + runtime transliterate on all 176 embedded tests (pass), full 406-file corpus parse (pass). --- maps/alalc-chu-Cyrl-Latn-2022.isc | 244 ++++++++++++++++++++++++++++++ maps/alalc-rue-Cyrl-Latn-2013.isc | 196 ++++++++++++++++++++++++ 2 files changed, 440 insertions(+) create mode 100644 maps/alalc-chu-Cyrl-Latn-2022.isc create mode 100644 maps/alalc-rue-Cyrl-Latn-2013.isc diff --git a/maps/alalc-chu-Cyrl-Latn-2022.isc b/maps/alalc-chu-Cyrl-Latn-2022.isc new file mode 100644 index 0000000..af962a4 --- /dev/null +++ b/maps/alalc-chu-Cyrl-Latn-2022.isc @@ -0,0 +1,244 @@ +system "ALA-LC:chu-Cyrl:Latn:2022" { + +metadata { + authority_id alalc + id 2022 + language iso-639-2:chu + source_script Cyrl + destination_script Latn + name Romanization Table -- Church Slavic (2022) + url https://www.loc.gov/catdir/cpso/romanization/church-slavic.pdf + creation_date 2022 + description { + ALA-LC romanization table for Church Slavic, 2022 version + (earlier versions 2011 and 1997). Covers the full Church Slavonic + alphabet including the yuses, ksi, psi, fita, izhitsa and the two uk + forms, with the letters' numeric values annotated. Transcribed from + the digitized table (pages 1-2). + } + + notes { + note "Diacritical signs: accents and aspiration marks are ignored in romanization, including the acute accent, the grave accent, the aspiration mark, and combinations thereof. The letters ї and ѷ are sometimes printed with two dots (or marks): when no other accent appears the dots have no particular significance and are ignored; when the dots (or other diacritical marks) indicate that the letter is a vowel, the letter is romanized ẏ. The symbol indicating a short i (breve) is taken into account in romanization, resulting in ĭ." + note "Abbreviations: abbreviated words are transcribed in full, without the use of brackets. The most common symbol for abbreviation is the titlo; omitted letters may be placed above other letters, and the symbol above a letter indicates the omission of ъ or ь." + note "Numerals: represented in Church Slavic by letters (as shown in the romanization table) with the addition of the signs ҂, U+20DD, U+0488 and U+0489; an added titlo indicates a basic numeral (в҃ = 2), and higher numerals: ҂в҃ = 2,000, в U+20DD = 20,000, в U+0488 = 200,000, в U+0489 = 2,000,000; the figure 1913 is written ҂аці҃г. This map renders the letters, not the numeral values." + note "Dates: Church Slavic books dated by the Mundane Era of Constantinople convert to the Christian Era by subtracting 5508; prior to 1700 the mundane year began on September 1st, so two years are given by subtracting 5509 (September through December) and 5508 (January through August); thus 7203 in the Mundane Era is 1694/95 in the Christian Era." + note "The iotated letters ѥ, ю, ꙗ, Ѩ and Ѭ are romanized Ī plus tie plus the vowel (Ī͡e, Ī͡u, Ī͡a, Ī͡ę, Ī͡ǫ), mirroring the table's romanization of і as Ī; the digraph-letter Ѿ (ot) is romanized Ō plus tie plus t (ō͡t); the digraph-letter pairs Ѯ and Ѱ are romanized k͡s and p͡s with the tie." + note "The table lists two uk forms, both with numeric value 400: the monograph uk Ꙋ is romanized U and the digraph uk Ѹ is romanized Ū. Both forms are encoded." + note "The table's row for ћ (used for the soft g in Serbian-printed Church Slavic) gives ǵ, distinct from the Serbian table's đ." + note "Izhitsa ѷ is romanized ẏ (Y with dot above); the table notes the alternative rendering v̇ when the letter is used without diacritical marks. Only the vowel rendering ẏ is encoded, as the alternative cannot be resolved without reading context." + note "Source erratum: the lower-case row for и prints the romanization as uppercase I. Encoded as i for case parity; flagged in the pull request." + note "Numeric-value column of the source table: А=1, В=2, Г=3, Д=4, Є=5, Ѕ=6, З=7, И=8, І=10, К=20, Л=30, М=40, Н=50, О=70, П=80, Р=100, С=200, Т=300, both uk forms=400, Ф=500, Х=600, Ѯ=60, Ѱ=700, Ѡ and Ѿ=800, Ѧ=900, Ѳ=9, Ѷ=400." + note "Transcribed visually from the scanned table pages; the romanization cells for Ѥ, Ѿ, Ц, Ы, Ю, Ꙗ, Ѯ, Ѱ, Ѩ and Ѭ are embedded raster images in the source PDF and were verified at magnification from the extracted image rasters." + } +} + +tests { + # every table row, upper and lower (the document has no example words + # beyond the table itself) + "А" -> "A" + "а" -> "a" + "Б" -> "B" + "б" -> "b" + "В" -> "V" + "в" -> "v" + "Г" -> "G" + "г" -> "g" + "Д" -> "D" + "д" -> "d" + "Є" -> "E" + "є" -> "e" + "Е" -> "Ē" + "е" -> "ē" + "Ѥ" -> "Ī͡E" + "ѥ" -> "ī͡e" + "Ж" -> "Zh" + "ж" -> "zh" + "Ѕ" -> "Ż" + "ѕ" -> "ż" + "З" -> "Z" + "з" -> "z" + "И" -> "I" + "и" -> "i" + "Й" -> "Ĭ" + "й" -> "ĭ" + "І" -> "Ī" + "і" -> "ī" + "К" -> "K" + "к" -> "k" + "Л" -> "L" + "л" -> "l" + "М" -> "M" + "м" -> "m" + "Н" -> "N" + "н" -> "n" + "О" -> "O" + "о" -> "o" + "П" -> "P" + "п" -> "p" + "Р" -> "R" + "р" -> "r" + "С" -> "S" + "с" -> "s" + "Т" -> "T" + "т" -> "t" + "Ꙋ" -> "U" + "ꙋ" -> "u" + "Ѹ" -> "Ū" + "ѹ" -> "ū" + "Ф" -> "F" + "ф" -> "f" + "Х" -> "Kh" + "х" -> "kh" + "Ѿ" -> "Ō͡T" + "ѿ" -> "ō͡t" + "Ѡ" -> "Ō" + "ѡ" -> "ō" + "Ц" -> "T͡S" + "ц" -> "t͡s" + "Ч" -> "Ch" + "ч" -> "ch" + "Ш" -> "Sh" + "ш" -> "sh" + "Щ" -> "Sht" + "щ" -> "sht" + "Ъ" -> "ʺ" + "ъ" -> "ʺ" + "Ы" -> "Ȳ" + "ы" -> "ȳ" + "Ꙑ" -> "Y" + "ꙑ" -> "y" + "Ь" -> "ʹ" + "ь" -> "ʹ" + "Ѣ" -> "Ě" + "ѣ" -> "ě" + "Ю" -> "Ī͡U" + "ю" -> "ī͡u" + "Ꙗ" -> "Ī͡A" + "ꙗ" -> "ī͡a" + "Ѧ" -> "Ę" + "ѧ" -> "ę" + "Ѯ" -> "K͡S" + "ѯ" -> "k͡s" + "Ѱ" -> "P͡S" + "ѱ" -> "p͡s" + "Ѳ" -> "Ḟ" + "ѳ" -> "ḟ" + "Ѷ" -> "Ẏ" + "ѷ" -> "ẏ" + "Ѫ" -> "Ǫ" + "ѫ" -> "ǫ" + "Ѩ" -> "Ī͡Ę" + "ѩ" -> "ī͡ę" + "Ѭ" -> "Ī͡Ǫ" + "ѭ" -> "ī͡ǫ" + "Ћ" -> "Ǵ" + "ћ" -> "ǵ" +} + +stage main { + + # CHARACTERS + parallel { + sub "А" "A" + sub "а" "a" + sub "Б" "B" + sub "б" "b" + sub "В" "V" + sub "в" "v" + sub "Г" "G" + sub "г" "g" + sub "Д" "D" + sub "д" "d" + sub "Є" "E" + sub "є" "e" + sub "Е" "Ē" + sub "е" "ē" + sub "Ѥ" "Ī͡E" + sub "ѥ" "ī͡e" + sub "Ж" "Zh" + sub "ж" "zh" + sub "Ѕ" "Ż" + sub "ѕ" "ż" + sub "З" "Z" + sub "з" "z" + sub "И" "I" + sub "и" "i" + sub "Й" "Ĭ" + sub "й" "ĭ" + sub "І" "Ī" + sub "і" "ī" + sub "К" "K" + sub "к" "k" + sub "Л" "L" + sub "л" "l" + sub "М" "M" + sub "м" "m" + sub "Н" "N" + sub "н" "n" + sub "О" "O" + sub "о" "o" + sub "П" "P" + sub "п" "p" + sub "Р" "R" + sub "р" "r" + sub "С" "S" + sub "с" "s" + sub "Т" "T" + sub "т" "t" + sub "Ꙋ" "U" + sub "ꙋ" "u" + sub "Ѹ" "Ū" + sub "ѹ" "ū" + sub "Ф" "F" + sub "ф" "f" + sub "Х" "Kh" + sub "х" "kh" + sub "Ѿ" "Ō͡T" + sub "ѿ" "ō͡t" + sub "Ѡ" "Ō" + sub "ѡ" "ō" + sub "Ц" "T͡S" + sub "ц" "t͡s" + sub "Ч" "Ch" + sub "ч" "ch" + sub "Ш" "Sh" + sub "ш" "sh" + sub "Щ" "Sht" + sub "щ" "sht" + sub "Ъ" "ʺ" + sub "ъ" "ʺ" + sub "Ы" "Ȳ" + sub "ы" "ȳ" + sub "Ꙑ" "Y" + sub "ꙑ" "y" + sub "Ь" "ʹ" + sub "ь" "ʹ" + sub "Ѣ" "Ě" + sub "ѣ" "ě" + sub "Ю" "Ī͡U" + sub "ю" "ī͡u" + sub "Ꙗ" "Ī͡A" + sub "ꙗ" "ī͡a" + sub "Ѧ" "Ę" + sub "ѧ" "ę" + sub "Ѯ" "K͡S" + sub "ѯ" "k͡s" + sub "Ѱ" "P͡S" + sub "ѱ" "p͡s" + sub "Ѳ" "Ḟ" + sub "ѳ" "ḟ" + sub "Ѷ" "Ẏ" + sub "ѷ" "ẏ" + sub "Ѫ" "Ǫ" + sub "ѫ" "ǫ" + sub "Ѩ" "Ī͡Ę" + sub "ѩ" "ī͡ę" + sub "Ѭ" "Ī͡Ǫ" + sub "ѭ" "ī͡ǫ" + sub "Ћ" "Ǵ" + sub "ћ" "ǵ" + } + +} + +} diff --git a/maps/alalc-rue-Cyrl-Latn-2013.isc b/maps/alalc-rue-Cyrl-Latn-2013.isc new file mode 100644 index 0000000..9c6c340 --- /dev/null +++ b/maps/alalc-rue-Cyrl-Latn-2013.isc @@ -0,0 +1,196 @@ +system "ALA-LC:rue-Cyrl:Latn:2013" { + +metadata { + authority_id alalc + id 2013 + language iso-639-3:rue + source_script Cyrl + destination_script Latn + name Romanization Table -- Rusyn (2013) + url https://www.loc.gov/catdir/cpso/romanization/rusyn.pdf + creation_date 2013 + description { + ALA-LC romanization table for Rusyn / Carpatho-Rusyn (2013 version, + no earlier versions). Reflects written variants of Rusyn from + several regions. Transcribed from the digitized table (pages 1-2). + } + + notes { + note "Source prose: this romanization table reflects written variants of the Rusyn / Carpatho-Rusyn language from several regions. Diacritics and characters that are referenced occasionally but used inconsistently (such as Cyrillic ӱ, л̆, г̆) are not included. Use the Church Slavic ALA-LC romanization table for Church Slavic and pre-revolutionary Russian characters." + note "Note 1: the ligature (tie, U+0361) is necessary to distinguish ж from the combination зг; hence ж = z͡h. Note 3: the ligature is necessary to distinguish х from the combination кг; hence х = k͡h. Note 4: the ligature is necessary to distinguish ц from the combination тс; hence ц = t͡s." + note "Note 2: romanize the letter и as i for Rusyn materials published in the Serbian Vojvodina, historic Bačka, and Srem regions, with places of publication including Belgrade, Djurdjevo, Kucura, Novi Sad, Pančevo, Ruski Krstur, Sremska Mitrovica, Subotica; romanize и as y for all other Rusyn materials. This map encodes the general rule (и = y); the Vojvodinian i variant depends on publication provenance and cannot be resolved from the text alone." + note "The iotated vowels є, ю and я are romanized Ī plus tie plus the vowel (Ī͡e, Ī͡u, Ī͡a), exactly as printed in the source." + note "Source errata, flagged in the pull request: the table's vernacular cells for the yo row print Latin Ë (U+00CB) rather than Cyrillic Ё, so this map keys the Cyrillic inputs Ё/ё (U+0401/U+0451); the o-circumflex row prints Latin Ô (U+00D4), so this map keys Cyrillic О plus combining circumflex (U+0302); the lower-case row for ф prints romanization F, encoded as f; the hard-sign row prints two primes (ʹʹ), encoded as the double prime ʺ (U+02BA) matching the Church Slavic table; the upper-case romanization cell for Я shows only ī, encoded as Ī͡A per the lower-case cell and the pattern of the other iotated rows." + } +} + +tests { + # every table row, upper and lower (the document has no example words + # beyond the table itself) + "А" -> "A" + "а" -> "a" + "Б" -> "B" + "б" -> "b" + "В" -> "V" + "в" -> "v" + "Г" -> "H" + "г" -> "h" + "Ґ" -> "G" + "ґ" -> "g" + "Д" -> "D" + "д" -> "d" + "Е" -> "E" + "е" -> "e" + "Є" -> "Ī͡E" + "є" -> "ī͡e" + "Ё" -> "Ë" + "ё" -> "ë" + "Ж" -> "Z͡H" + "ж" -> "z͡h" + "З" -> "Z" + "з" -> "z" + "І" -> "I" + "і" -> "i" + "Ї" -> "Ï" + "ї" -> "ï" + "И" -> "Y" + "и" -> "y" + "Ы" -> "Ŷ" + "ы" -> "ŷ" + "Й" -> "Ĭ" + "й" -> "ĭ" + "К" -> "K" + "к" -> "k" + "Л" -> "L" + "л" -> "l" + "М" -> "M" + "м" -> "m" + "Н" -> "N" + "н" -> "n" + "О" -> "O" + "о" -> "o" + "О̂" -> "Ô" + "о̂" -> "ô" + "П" -> "P" + "п" -> "p" + "Р" -> "R" + "р" -> "r" + "С" -> "S" + "с" -> "s" + "Т" -> "T" + "т" -> "t" + "У" -> "U" + "у" -> "u" + "Ф" -> "F" + "ф" -> "f" + "Х" -> "K͡H" + "х" -> "k͡h" + "Ц" -> "T͡S" + "ц" -> "t͡s" + "Ч" -> "Ch" + "ч" -> "ch" + "Ш" -> "Sh" + "ш" -> "sh" + "Щ" -> "Shch" + "щ" -> "shch" + "Э" -> "Ė" + "э" -> "ė" + "Ю" -> "Ī͡U" + "ю" -> "ī͡u" + "Я" -> "Ī͡A" + "я" -> "ī͡a" + "Ь" -> "ʹ" + "ь" -> "ʹ" + "Ъ" -> "ʺ" + "ъ" -> "ʺ" + "Ѣ" -> "Î" + "ѣ" -> "î" +} + +stage main { + + # CHARACTERS + parallel { + sub "А" "A" + sub "а" "a" + sub "Б" "B" + sub "б" "b" + sub "В" "V" + sub "в" "v" + sub "Г" "H" + sub "г" "h" + sub "Ґ" "G" + sub "ґ" "g" + sub "Д" "D" + sub "д" "d" + sub "Е" "E" + sub "е" "e" + sub "Є" "Ī͡E" + sub "є" "ī͡e" + sub "Ё" "Ë" + sub "ё" "ë" + sub "Ж" "Z͡H" + sub "ж" "z͡h" + sub "З" "Z" + sub "з" "z" + sub "І" "I" + sub "і" "i" + sub "Ї" "Ï" + sub "ї" "ï" + sub "И" "Y" + sub "и" "y" + sub "Ы" "Ŷ" + sub "ы" "ŷ" + sub "Й" "Ĭ" + sub "й" "ĭ" + sub "К" "K" + sub "к" "k" + sub "Л" "L" + sub "л" "l" + sub "М" "M" + sub "м" "m" + sub "Н" "N" + sub "н" "n" + sub "О̂" "Ô" + sub "о̂" "ô" + sub "О" "O" + sub "о" "o" + sub "П" "P" + sub "п" "p" + sub "Р" "R" + sub "р" "r" + sub "С" "S" + sub "с" "s" + sub "Т" "T" + sub "т" "t" + sub "У" "U" + sub "у" "u" + sub "Ф" "F" + sub "ф" "f" + sub "Х" "K͡H" + sub "х" "k͡h" + sub "Ц" "T͡S" + sub "ц" "t͡s" + sub "Ч" "Ch" + sub "ч" "ch" + sub "Ш" "Sh" + sub "ш" "sh" + sub "Щ" "Shch" + sub "щ" "shch" + sub "Э" "Ė" + sub "э" "ė" + sub "Ю" "Ī͡U" + sub "ю" "ī͡u" + sub "Я" "Ī͡A" + sub "я" "ī͡a" + sub "Ь" "ʹ" + sub "ь" "ʹ" + sub "Ъ" "ʺ" + sub "ъ" "ʺ" + sub "Ѣ" "Î" + sub "ѣ" "î" + } + +} + +}