uklatn 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/uklatn.rb +172 -0
  3. metadata +47 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3844b30e65bcc5178350ff0b59315938d3a02f112499cb4b372e0306acf22f6a
4
+ data.tar.gz: f1fa0f0cb158ee14bdd77baa6b8207f44523702854c2858449b00e13ffcdb56d
5
+ SHA512:
6
+ metadata.gz: 74c66f54754d82bc537095d52cfb970404a13a5f9577395e1c3b3a342e8a390f33f47a59457a1386b470c9885ded9e6d899b38c2eb9cddd6d98a9168071ab917
7
+ data.tar.gz: 353848c5d4e1caadb92b63c386c5bd32fb013f84e65195611bdcc1679ad400dfffb5c7ba842cb1b6a6757452097a05d5d5aceb15de33ea156c2e5aa38b08bec6
data/lib/uklatn.rb ADDED
@@ -0,0 +1,172 @@
1
+ # Generated by gentables.py, do not edit.
2
+
3
+ # Ukrainian Cyrillic transliteration to and from Latin script.
4
+ #
5
+ # Tables:
6
+ # - 'DSTU_9112_A': DSTU 9112:2021 System A
7
+ # - 'DSTU_9112_B': DSTU 9112:2021 System B
8
+ # - 'KMU_55': KMU 55:2010, not reversible
9
+ class UkrainianLatin
10
+
11
+ # Transliterates a string of Ukrainian Cyrillic to Latin script.
12
+ def encode(text, table = 'DSTU_9112_A')
13
+ tr = TABLES[table][0]
14
+ return tr.transform(text) if tr
15
+ raise ArgumentError.new("invalid table #{table}")
16
+ end
17
+
18
+ # Re-transliterates a string of Ukrainian Latin to Cyrillic script.
19
+ def decode(text, table = 'DSTU_9112_A')
20
+ tr = TABLES[table][1]
21
+ return tr.transform(text) if tr
22
+ raise ArgumentError.new("invalid table #{table}")
23
+ end
24
+
25
+ class Uklatn_uk_uk_Latn_DSTU_9112_A # :nodoc:
26
+ def initialize()
27
+ @rx1 = /\b([Ьь])|([Ьь](?=[АаЕеУу])|[ЄЮЯ](?=\u0301?[а-щьюяєіїґ’])|(?<=[Б-ДЖЗК-НП-ТФ-Щб-джзк-нп-тф-щҐґ])[Йй])|([ЁЄІЇЎА-яёєіїўҐґ’])/
28
+ @maps1 = [
29
+ {"Ь"=>"Ĵ","ь"=>"ĵ"},
30
+ {"Ь"=>"J'","ь"=>"j'","Є"=>"Je","Ю"=>"Ju","Я"=>"Ja","Й"=>"'J","й"=>"'j"},
31
+ {"А"=>"A","а"=>"a","Б"=>"B","б"=>"b","В"=>"V","в"=>"v","Г"=>"Ğ","г"=>"ğ","Ґ"=>"G","ґ"=>"g","Д"=>"D","д"=>"d","Е"=>"E","е"=>"e","Є"=>"JE","є"=>"je","Ж"=>"Ž","ж"=>"ž","З"=>"Z","з"=>"z","И"=>"Y","и"=>"y","І"=>"I","і"=>"i","Ї"=>"Ï","ї"=>"ï","К"=>"K","к"=>"k","Л"=>"L","л"=>"l","М"=>"M","м"=>"m","Н"=>"N","н"=>"n","О"=>"O","о"=>"o","П"=>"P","п"=>"p","Р"=>"R","р"=>"r","С"=>"S","с"=>"s","Т"=>"T","т"=>"t","У"=>"U","у"=>"u","Ф"=>"F","ф"=>"f","Х"=>"X","х"=>"x","Ц"=>"C","ц"=>"c","Ч"=>"Č","ч"=>"č","Ш"=>"Š","ш"=>"š","Щ"=>"Ŝ","щ"=>"ŝ","Ю"=>"JU","ю"=>"ju","Я"=>"JA","я"=>"ja","Ь"=>"J","ь"=>"j","Й"=>"J","й"=>"j","’"=>"'","Ё"=>"Ö","ё"=>"ö","Ў"=>"Ŭ","ў"=>"ŭ","Ъ"=>"Ǒ","ъ"=>"ǒ","Ы"=>"Ȳ","ы"=>"ȳ","Э"=>"Ē","э"=>"ē"},
32
+ ]
33
+ end
34
+
35
+ def transform(text)
36
+ text = text.unicode_normalize(:nfc)
37
+ text = text.gsub(@rx1) do |m|
38
+ next @maps1[2].fetch($3, $3) unless $3.nil?
39
+ next @maps1[1].fetch($2, $2) unless $2.nil?
40
+ next @maps1[0].fetch($1, $1) unless $1.nil?
41
+ m
42
+ end
43
+ text = text.unicode_normalize(:nfc)
44
+ end
45
+ end
46
+
47
+ class Uklatn_uk_uk_Latn_DSTU_9112_B # :nodoc:
48
+ def initialize()
49
+ @rx1 = /([Ьь](?=[АаЕеІіУу])|(?<=[Б-ДЖЗК-НП-ТФ-Щб-джзк-нп-тф-щҐґ])[Йй])|([ГЄЖЇХЩШЧЮЯЁЎЪЫЭ](?=\u0301?[а-яёєіїўґ’])|\b[Ьь])|([ЁЄІЇЎА-яёєіїўҐґ’])/
50
+ @maps1 = [
51
+ {"Ь"=>"J'","ь"=>"j'","Й"=>"'J","й"=>"'j"},
52
+ {"Г"=>"Gh","Є"=>"Je","Ж"=>"Zh","Ї"=>"Ji","Х"=>"Kh","Щ"=>"Shch","Ш"=>"Sh","Ч"=>"Ch","Ю"=>"Ju","Я"=>"Ja","Ё"=>"Jow","Ў"=>"Uh","Ъ"=>"Oh","Ы"=>"Yw","Э"=>"Ehw","Ь"=>"Hj","ь"=>"hj"},
53
+ {"А"=>"A","а"=>"a","Б"=>"B","б"=>"b","В"=>"V","в"=>"v","Г"=>"GH","г"=>"gh","Ґ"=>"G","ґ"=>"g","Д"=>"D","д"=>"d","Е"=>"E","е"=>"e","Є"=>"JE","є"=>"je","Ж"=>"ZH","ж"=>"zh","З"=>"Z","з"=>"z","И"=>"Y","и"=>"y","І"=>"I","і"=>"i","Ї"=>"JI","ї"=>"ji","Х"=>"KH","х"=>"kh","К"=>"K","к"=>"k","Л"=>"L","л"=>"l","М"=>"M","м"=>"m","Н"=>"N","н"=>"n","О"=>"O","о"=>"o","П"=>"P","п"=>"p","Р"=>"R","р"=>"r","Щ"=>"SHCH","щ"=>"shch","Ш"=>"SH","ш"=>"sh","С"=>"S","с"=>"s","Т"=>"T","т"=>"t","У"=>"U","у"=>"u","Ф"=>"F","ф"=>"f","Ч"=>"CH","ч"=>"ch","Ц"=>"C","ц"=>"c","Ю"=>"JU","ю"=>"ju","Я"=>"JA","я"=>"ja","Й"=>"J","й"=>"j","Ь"=>"J","ь"=>"j","’"=>"'","Ё"=>"JOW","ё"=>"jow","Ў"=>"UH","ў"=>"uh","Ъ"=>"OH","ъ"=>"oh","Ы"=>"YW","ы"=>"yw","Э"=>"EHW","э"=>"ehw"},
54
+ ]
55
+ end
56
+
57
+ def transform(text)
58
+ text = text.unicode_normalize(:nfc)
59
+ text = text.gsub(@rx1) do |m|
60
+ next @maps1[2].fetch($3, $3) unless $3.nil?
61
+ next @maps1[1].fetch($2, $2) unless $2.nil?
62
+ next @maps1[0].fetch($1, $1) unless $1.nil?
63
+ m
64
+ end
65
+ text = text.unicode_normalize(:nfc)
66
+ end
67
+ end
68
+
69
+ class Uklatn_uk_uk_Latn_KMU_55 # :nodoc:
70
+ def initialize()
71
+ @rx1 = /(?<=[ЁЄІЇЎА-яёєіїўҐґ])([’\u0027])(?=[ЁЄІЇЎА-яёєіїўҐґ])/
72
+ @maps1 = [
73
+ {"’"=>"","'"=>""},
74
+ ]
75
+ @rx2 = /\b([ЄЇЮЯ])(?=\u0301?[а-яёєіїўґ’])|\b([ЙйЄЇЮЯєїюя])|([Зз]Г|[ЖХЦЩШЧЄЇЮЯ])(?=\u0301?[а-яёєіїўґ’])|([Зз][Гг]|[ЄІЇА-ЩЬЮ-щьюяєіїҐґ’])/
76
+ @maps2 = [
77
+ {"Є"=>"Ye","Ї"=>"Yi","Ю"=>"Yu","Я"=>"Ya"},
78
+ {"Й"=>"Y","й"=>"y","Є"=>"YE","є"=>"ye","Ї"=>"YI","ї"=>"yi","Ю"=>"YU","ю"=>"yu","Я"=>"YA","я"=>"ya"},
79
+ {"ЗГ"=>"ZGh","зГ"=>"zGh","Ж"=>"Zh","Х"=>"Kh","Ц"=>"Ts","Щ"=>"Shch","Ш"=>"Sh","Ч"=>"Ch","Є"=>"Ie","Ї"=>"I","Ю"=>"Iu","Я"=>"Ia"},
80
+ {"ЗГ"=>"ZGH","Зг"=>"Zgh","зГ"=>"zGH","зг"=>"zgh","А"=>"A","а"=>"a","Б"=>"B","б"=>"b","В"=>"V","в"=>"v","Г"=>"H","г"=>"h","Ґ"=>"G","ґ"=>"g","Д"=>"D","д"=>"d","Е"=>"E","е"=>"e","Є"=>"IE","є"=>"ie","Ж"=>"ZH","ж"=>"zh","З"=>"Z","з"=>"z","И"=>"Y","и"=>"y","І"=>"I","і"=>"i","Ї"=>"I","ї"=>"i","Х"=>"KH","х"=>"kh","К"=>"K","к"=>"k","Л"=>"L","л"=>"l","М"=>"M","м"=>"m","Н"=>"N","н"=>"n","О"=>"O","о"=>"o","П"=>"P","п"=>"p","Р"=>"R","р"=>"r","Щ"=>"SHCH","щ"=>"shch","Ш"=>"SH","ш"=>"sh","С"=>"S","с"=>"s","Т"=>"T","т"=>"t","У"=>"U","у"=>"u","Ф"=>"F","ф"=>"f","Ч"=>"CH","ч"=>"ch","Ц"=>"TS","ц"=>"ts","Ю"=>"IU","ю"=>"iu","Я"=>"IA","я"=>"ia","Й"=>"I","й"=>"i","Ь"=>"","ь"=>"","’"=>""},
81
+ ]
82
+ end
83
+
84
+ def transform(text)
85
+ text = text.unicode_normalize(:nfc)
86
+ text = text.gsub(@rx1) do |m|
87
+ next @maps1[0].fetch($1, $1) unless $1.nil?
88
+ m
89
+ end
90
+ text = text.gsub(@rx2) do |m|
91
+ next @maps2[3].fetch($4, $4) unless $4.nil?
92
+ next @maps2[2].fetch($3, $3) unless $3.nil?
93
+ next @maps2[1].fetch($2, $2) unless $2.nil?
94
+ next @maps2[0].fetch($1, $1) unless $1.nil?
95
+ m
96
+ end
97
+ text = text.unicode_normalize(:nfc)
98
+ end
99
+ end
100
+
101
+ class Uklatn_uk_Latn_DSTU_9112_A_uk # :nodoc:
102
+ def initialize()
103
+ @rx1 = /([ÁáÉéÍíÓóÚúÝýḮḯ])/
104
+ @maps1 = [
105
+ {"Á"=>"Á","á"=>"á","É"=>"É","é"=>"é","Í"=>"Í","í"=>"í","Ó"=>"Ó","ó"=>"ó","Ú"=>"Ú","ú"=>"ú","Ý"=>"Ý","ý"=>"ý","Ḯ"=>"Ḯ","ḯ"=>"ḯ"},
106
+ ]
107
+ @rx2 = /(J[Ee]|j[Ee]|J[Uu]|j[Uu]|J[Aa]|j[Aa]|[A-GIK-PR-VXYZa-gik-pr-vxyzÏÖïöČčĒēĞğĴĵŜŝŠšŬŭŽžǑǒȲȳ])|(?<=[BbCcDdFfGgKkLlMmNnPpRrSsTtVvXxZzČčĞğŜŝŠšŽž])([Jj]\u0027(?=[AaEeUu])|[Jj])|(\u0027[Jj](?![AaEeIiUu])|\u0027(?=[Jj])|[Jj])/
108
+ @maps2 = [
109
+ {"A"=>"А","a"=>"а","B"=>"Б","b"=>"б","V"=>"В","v"=>"в","Ğ"=>"Г","ğ"=>"г","G"=>"Ґ","g"=>"ґ","D"=>"Д","d"=>"д","E"=>"Е","e"=>"е","JE"=>"Є","Je"=>"Є","jE"=>"є","je"=>"є","Ž"=>"Ж","ž"=>"ж","Z"=>"З","z"=>"з","Y"=>"И","y"=>"и","I"=>"І","i"=>"і","Ï"=>"Ї","ï"=>"ї","K"=>"К","k"=>"к","L"=>"Л","l"=>"л","M"=>"М","m"=>"м","N"=>"Н","n"=>"н","O"=>"О","o"=>"о","P"=>"П","p"=>"п","R"=>"Р","r"=>"р","S"=>"С","s"=>"с","T"=>"Т","t"=>"т","U"=>"У","u"=>"у","F"=>"Ф","f"=>"ф","X"=>"Х","x"=>"х","C"=>"Ц","c"=>"ц","Č"=>"Ч","č"=>"ч","Š"=>"Ш","š"=>"ш","Ŝ"=>"Щ","ŝ"=>"щ","JU"=>"Ю","Ju"=>"Ю","jU"=>"ю","ju"=>"ю","JA"=>"Я","Ja"=>"Я","jA"=>"я","ja"=>"я","Ĵ"=>"Ь","ĵ"=>"ь","Ö"=>"Ё","ö"=>"ё","Ŭ"=>"Ў","ŭ"=>"ў","Ǒ"=>"Ъ","ǒ"=>"ъ","Ȳ"=>"Ы","ȳ"=>"ы","Ē"=>"Э","ē"=>"э"},
110
+ {"J"=>"Ь","j"=>"ь","J'"=>"Ь","j'"=>"ь"},
111
+ {"'J"=>"Й","'j"=>"й","'"=>"’","J"=>"Й","j"=>"й"},
112
+ ]
113
+ end
114
+
115
+ def transform(text)
116
+ text = text.unicode_normalize(:nfc)
117
+ text = text.gsub(@rx1) do |m|
118
+ next @maps1[0].fetch($1, $1) unless $1.nil?
119
+ m
120
+ end
121
+ text = text.gsub(@rx2) do |m|
122
+ next @maps2[2].fetch($3, $3) unless $3.nil?
123
+ next @maps2[1].fetch($2, $2) unless $2.nil?
124
+ next @maps2[0].fetch($1, $1) unless $1.nil?
125
+ m
126
+ end
127
+ text = text.unicode_normalize(:nfc)
128
+ end
129
+ end
130
+
131
+ class Uklatn_uk_Latn_DSTU_9112_B_uk # :nodoc:
132
+ def initialize()
133
+ @rx1 = /([ÁáÉéÍíÓóÚúÝý])/
134
+ @maps1 = [
135
+ {"Á"=>"Á","á"=>"á","É"=>"É","é"=>"é","Í"=>"Í","í"=>"í","Ó"=>"Ó","ó"=>"ó","Ú"=>"Ú","ú"=>"ú","Ý"=>"Ý","ý"=>"ý"},
136
+ ]
137
+ @rx2 = /([Jj][Oo][Ww]|[Ss][Hh][Cc][Hh]|[CcGgKkSsZzUuOo][Hh]|[Yy][Ww]|[Ee][Hh][Ww]|[Jj][EeIiUuAa]|[Hh][Jj]|[A-GIK-PR-VYZa-gik-pr-vyz])|(?<=[Ss][Hh][Cc][Hh])([Jj]\u0027(?=[AaEeIiUu])|[Jj])|(?<=[CcGgKkSsZz][Hh])([Jj]\u0027(?=[AaEeIiUu])|[Jj])|(?<=[BCDFGKLMNPRSTVZbcdfgklmnprstvzv])([Jj]\u0027(?=[AaEeIiUu])|[Jj])|(\u0027[Jj](?![AaEeIiUu])|\u0027(?=[Jj])|[Jj])/
138
+ @maps2 = [
139
+ {"A"=>"А","a"=>"а","B"=>"Б","b"=>"б","V"=>"В","v"=>"в","GH"=>"Г","Gh"=>"Г","gH"=>"г","gh"=>"г","G"=>"Ґ","g"=>"ґ","D"=>"Д","d"=>"д","E"=>"Е","e"=>"е","JE"=>"Є","Je"=>"Є","jE"=>"є","je"=>"є","ZH"=>"Ж","Zh"=>"Ж","zH"=>"ж","zh"=>"ж","Z"=>"З","z"=>"з","Y"=>"И","y"=>"и","I"=>"І","i"=>"і","JI"=>"Ї","Ji"=>"Ї","jI"=>"ї","ji"=>"ї","KH"=>"Х","Kh"=>"Х","kH"=>"х","kh"=>"х","K"=>"К","k"=>"к","L"=>"Л","l"=>"л","M"=>"М","m"=>"м","N"=>"Н","n"=>"н","O"=>"О","o"=>"о","P"=>"П","p"=>"п","R"=>"Р","r"=>"р","SHCH"=>"Щ","SHCh"=>"Щ","SHcH"=>"Щ","SHch"=>"Щ","ShCH"=>"Щ","ShCh"=>"Щ","ShcH"=>"Щ","Shch"=>"Щ","sHCH"=>"щ","sHCh"=>"щ","sHcH"=>"щ","sHch"=>"щ","shCH"=>"щ","shCh"=>"щ","shcH"=>"щ","shch"=>"щ","SH"=>"Ш","Sh"=>"Ш","sH"=>"ш","sh"=>"ш","S"=>"С","s"=>"с","T"=>"Т","t"=>"т","U"=>"У","u"=>"у","F"=>"Ф","f"=>"ф","CH"=>"Ч","Ch"=>"Ч","cH"=>"ч","ch"=>"ч","C"=>"Ц","c"=>"ц","JU"=>"Ю","Ju"=>"Ю","jU"=>"ю","ju"=>"ю","JA"=>"Я","Ja"=>"Я","jA"=>"я","ja"=>"я","HJ"=>"Ь","Hj"=>"Ь","hJ"=>"ь","hj"=>"ь","JOW"=>"Ё","JOw"=>"Ё","JoW"=>"Ё","Jow"=>"Ё","jOW"=>"ё","jOw"=>"ё","joW"=>"ё","jow"=>"ё","UH"=>"Ў","Uh"=>"Ў","uH"=>"ў","uh"=>"ў","OH"=>"Ъ","Oh"=>"Ъ","oH"=>"ъ","oh"=>"ъ","YW"=>"Ы","Yw"=>"Ы","yW"=>"ы","yw"=>"ы","EHW"=>"Э","EHw"=>"Э","EhW"=>"Э","Ehw"=>"Э","eHW"=>"э","eHw"=>"э","ehW"=>"э","ehw"=>"э"},
140
+ {"J"=>"Ь","j"=>"ь","J'"=>"Ь","j'"=>"ь"},
141
+ {"J"=>"Ь","j"=>"ь","J'"=>"Ь","j'"=>"ь"},
142
+ {"J"=>"Ь","j"=>"ь","J'"=>"Ь","j'"=>"ь"},
143
+ {"'J"=>"Й","'j"=>"й","'"=>"’","J"=>"Й","j"=>"й"},
144
+ ]
145
+ end
146
+
147
+ def transform(text)
148
+ text = text.unicode_normalize(:nfc)
149
+ text = text.gsub(@rx1) do |m|
150
+ next @maps1[0].fetch($1, $1) unless $1.nil?
151
+ m
152
+ end
153
+ text = text.gsub(@rx2) do |m|
154
+ next @maps2[4].fetch($5, $5) unless $5.nil?
155
+ next @maps2[3].fetch($4, $4) unless $4.nil?
156
+ next @maps2[2].fetch($3, $3) unless $3.nil?
157
+ next @maps2[1].fetch($2, $2) unless $2.nil?
158
+ next @maps2[0].fetch($1, $1) unless $1.nil?
159
+ m
160
+ end
161
+ text = text.unicode_normalize(:nfc)
162
+ end
163
+ end
164
+
165
+ TABLES = Hash.new([nil, nil]) # :nodoc:
166
+ TABLES['DSTU_9112_A'] = [Uklatn_uk_uk_Latn_DSTU_9112_A.new(), Uklatn_uk_Latn_DSTU_9112_A_uk.new()]
167
+ TABLES['DSTU-9112-A'] = TABLES['DSTU_9112_A']
168
+ TABLES['DSTU_9112_B'] = [Uklatn_uk_uk_Latn_DSTU_9112_B.new(), Uklatn_uk_Latn_DSTU_9112_B_uk.new()]
169
+ TABLES['DSTU-9112-B'] = TABLES['DSTU_9112_B']
170
+ TABLES['KMU_55'] = [Uklatn_uk_uk_Latn_KMU_55.new(), nil]
171
+ TABLES['KMU-55'] = TABLES['KMU_55']
172
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: uklatn
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.13.0
5
+ platform: ruby
6
+ authors:
7
+ - Pavlo Ivashkov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-11-16 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |
14
+ Ukraine national transliteration schemes:
15
+ - DSTU 9112:2021,
16
+ - KMU 55:2010 (not reversible)
17
+ email:
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - lib/uklatn.rb
23
+ homepage: https://github.com/paiv/uklatn
24
+ licenses:
25
+ - MIT
26
+ metadata:
27
+ source_code_uri: https://github.com/paiv/uklatn
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 2.6.0
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubygems_version: 3.4.13
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: Ukrainian Cyrillic transliteration to Latin script
47
+ test_files: []