Skip to content

Commit db52658

Browse files
committed
fix uppercase text issue
1 parent 3dba402 commit db52658

File tree

2 files changed

+32
-11
lines changed

2 files changed

+32
-11
lines changed

lib/interscript.rb

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,35 @@ def transliterate(system_code, string)
3232
rules.each do |r|
3333
string.scan(/#{r["pattern"]}/) do |match|
3434
pos = Regexp.last_match.offset(0).first
35-
output[offsets[0..pos].sum - 1] = r["result"]
35+
result = up_case_around?(string, pos) ? r["result"].upcase : r["result"]
36+
output[offsets[0..pos].sum - 1, match.size] = result
3637
offsets[pos] = r["result"].size - match.size + 1
3738
end
3839
end
3940

40-
output.split('').map do |char|
41-
charmap[char] || char
41+
output.split('').map.with_index do |char, i|
42+
if (c = charmap[char])
43+
up_case_around?(output, i) ? c.upcase : c
44+
else
45+
char
46+
end
4247
end.join('')
4348
end
49+
50+
private
51+
52+
def up_case_around?(string, pos)
53+
return false if string[pos] != string[pos].upcase
54+
55+
i = pos - 1
56+
i -= 1 while i.positive? && string[i] !~ /[[:alpha:]]/
57+
before = string[i].to_s.strip
58+
59+
i = pos + 1
60+
i += 1 while i < string.size - 1 && string[i] !~ /[[:alpha:]]/
61+
after = string[i].to_s.strip
62+
63+
!before.empty? && before == before.upcase || !after.empty? && after == after.upcase
64+
end
4465
end
4566
end

maps/bgnpcgn-rus-Cyrl-Latn-1947.yaml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ tests:
105105
Vybory deputatov Gosudarstvennoy Dumy Federal’nogo Sobraniya Rossiyskoy Federatsii sed’mogo sozyva
106106
Data golosovaniya: 18.09.2016
107107
108-
Naimenovaniye Izbiratel’noy komissii: TsIK Rossii
108+
Naimenovaniye Izbiratel’noy komissii: TSIK Rossii
109109
110110
Svodnaya tablitsa rezul’tatov vyborov po federal’nomu izbiratel’nomu okrugu
111111
@@ -128,20 +128,20 @@ tests:
128128
Chislo utrachennykh otkrepitel’nykh udostovereniy
129129
Chislo utrachennykh izbiratel’nykh byulleteney
130130
Chislo izbiratel’nykh byulleteney, ne uchtennykh pri poluchenii
131-
1. VSEROSSIYSKAYa POLITIChESKAYa PARTIYa "RODINA"
132-
2. Politicheskaya partiya KOMMUNISTIChESKAYa PARTIYa KOMMUNISTY ROSSII
131+
1. VSEROSSIYSKAYA POLITICHESKAYA PARTIYA "RODINA"
132+
2. Politicheskaya partiya KOMMUNISTICHESKAYA PARTIYA KOMMUNISTY ROSSII
133133
3. Politicheskaya partiya "Rossiyskaya partiya pensionerov za spravedlivost’"
134-
4. Vserossiyskaya politicheskaya partiya "YEDINAYa ROSSIYa"
134+
4. Vserossiyskaya politicheskaya partiya "YEDINAYA ROSSIYA"
135135
5. Politicheskaya partiya "Rossiyskaya ekologicheskaya partiya "Zelenyye"
136136
6. Politicheskaya partiya "Grazhdanskaya Platforma"
137137
7. Politicheskaya partiya LDPR - Liberal’no-demokraticheskaya partiya Rossii
138138
8. Politicheskaya partiya "Partiya narodnoy svobody" (PARNAS)
139-
9. Vserossiyskaya politicheskaya partiya "PARTIYa ROSTA"
139+
9. Vserossiyskaya politicheskaya partiya "PARTIYA ROSTA"
140140
10. Obshchestvennaya organizatsiya Vserossiyskaya politicheskaya partiya "Grazhdanskaya Sila"
141-
11. Politicheskaya partiya "Rossiyskaya ob"yedinennaya demokraticheskaya partiya "YaBLOKO"
142-
12. Politicheskaya partiya "KOMMUNISTIChESKAYa PARTIYa ROSSIYSKOY FEDERATsII"
141+
11. Politicheskaya partiya "Rossiyskaya ob"yedinennaya demokraticheskaya partiya "YABLOKO"
142+
12. Politicheskaya partiya "KOMMUNISTICHESKAYA PARTIYA ROSSIYSKOY FEDERATSII"
143143
13. Politicheskaya partiya "PATRIOTY ROSSII"
144-
14. Politicheskaya partiya SPRAVEDLIVAYa ROSSIYa
144+
14. Politicheskaya partiya SPRAVEDLIVAYA ROSSIYA
145145
146146
Dannyye okruzhnykh izbiratel’nykh komissiy o chisle otkrepitel’nykh udostovereniy
147147

0 commit comments

Comments
 (0)