gp_rmn2utf_RU.pl
2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/usr/bin/env perl
use warnings; #sed replacement for -w perl parameter
# Copyright 2012 Arnab Ghoshal
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
# WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
# MERCHANTABLITY OR NON-INFRINGEMENT.
# See the Apache 2 License for the specific language governing permissions and
# limitations under the License.
# This script maps from the GlobalPhone-style ASCII encoding of Russian
# characters to UTF8. This is almost identical to the corresponding script for
# Portuguese and Spanish
use strict;
use Unicode::Normalize;
binmode(STDOUT, ":encoding(utf8)");
my $usage = "Usage: gp_rmn2utf_RU.pl < input > utf8-output\
Maps from the GlobalPhone-style ASCII encoding of Spanish characters to UTF8.\n";
if (defined($ARGV[0])) {
if ($ARGV[0] =~ m/(-h|--help)/) {
print STDERR "$usage";
exit 0;
} else {
die "Unknown option '$ARGV[0]'\n$usage";
}
}
while (<STDIN>) {
s/~/\x{044C}/g; # Cyrillic Soft Sign - soften consonant before that, e.g. t~ => Tb
s/schTsch/\x{0449}/g;
s/SchTsch/\x{0429}/g;
s/jscH/\x{0436}/g;
s/JscH/\x{0416}/g;
s/tscH/\x{0447}/g;
s/TscH/\x{0427}/g;
s/sch/\x{0448}/g;
s/Sch/\x{0428}/g;
s/ts/\x{0446}/g;
s/tS/\x{0446}/g;
s/Ts/\x{0426}/g;
s/TS/\x{0426}/g;
s/ye/\x{0435}/g;
s/yo/\x{0451}/g; # non in text
s/yu/\x{044E}/g;
s/ya/\x{044F}/g;
s/Ye/\x{0415}/g;
s/Yo/\x{0401}/g; # non in text
s/Yu/\x{042E}/g;
s/Ya/\x{042F}/g;
s/i2/\x{044B}/g;
s/I2/\x{042B}/g;
s/Q/\x{044A}/g;
s/q/\x{042A}/g; # non in text
s/a/\x{0430}/g;
s/b/\x{0431}/g;
s/w/\x{0432}/g;
s/g/\x{0433}/g;
s/d/\x{0434}/g;
s/z/\x{0437}/g;
s/i/\x{0438}/g;
s/j/\x{0439}/g;
s/k/\x{043A}/g;
s/l/\x{043B}/g;
s/m/\x{043C}/g;
s/n/\x{043D}/g;
s/o/\x{043E}/g;
s/p/\x{043F}/g;
s/r/\x{0440}/g;
s/s/\x{0441}/g;
s/t/\x{0442}/g;
s/u/\x{0443}/g;
s/f/\x{0444}/g;
s/h/\x{0445}/g;
s/e/\x{044D}/g;
s/A/\x{0410}/g;
s/B/\x{0411}/g;
s/W/\x{0412}/g;
s/G/\x{0413}/g;
s/D/\x{0414}/g;
s/Z/\x{0417}/g;
s/I/\x{0418}/g;
s/J/\x{0419}/g;
s/K/\x{041A}/g;
s/L/\x{041B}/g;
s/M/\x{041C}/g;
s/N/\x{041D}/g;
s/O/\x{041E}/g;
s/P/\x{041F}/g;
s/R/\x{0420}/g;
s/S/\x{0421}/g;
s/T/\x{0422}/g;
s/U/\x{0423}/g;
s/F/\x{0424}/g;
s/H/\x{0425}/g;
s/E/\x{042D}/g;
print NFC($_); # recompose & reorder canonically
}