line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
#!/usr/bin/perl -w
|
2
|
2
|
|
|
2
|
|
44531
|
use strict;
|
|
2
|
|
|
|
|
5
|
|
|
2
|
|
|
|
|
81
|
|
3
|
2
|
|
|
2
|
|
12
|
use warnings;
|
|
2
|
|
|
|
|
4
|
|
|
2
|
|
|
|
|
77
|
|
4
|
2
|
|
|
2
|
|
1809
|
use POSIX qw(locale_h);
|
|
2
|
|
|
|
|
25093
|
|
|
2
|
|
|
|
|
13
|
|
5
|
2
|
|
|
2
|
|
5709
|
use locale;
|
|
2
|
|
|
|
|
515
|
|
|
2
|
|
|
|
|
12
|
|
6
|
|
|
|
|
|
|
setlocale(LC_CTYPE, "ru_RU.cp1251");
|
7
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
package Lingua::RU::Sklon;
|
9
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
|
12
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
BEGIN {
|
14
|
2
|
|
|
2
|
|
137
|
use Exporter ();
|
|
2
|
|
|
|
|
5
|
|
|
2
|
|
|
|
|
206
|
|
15
|
2
|
|
|
2
|
|
5
|
our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
|
16
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
# set the version for version checking
|
18
|
2
|
|
|
|
|
4
|
$VERSION = 0.01;
|
19
|
|
|
|
|
|
|
|
20
|
2
|
|
|
|
|
47
|
@ISA = qw(Exporter);
|
21
|
2
|
|
|
|
|
6
|
@EXPORT = qw(&parse_n &parse_lastname &convert &initcap &sklon);
|
22
|
2
|
|
|
|
|
5
|
%EXPORT_TAGS = ( );
|
23
|
|
|
|
|
|
|
|
24
|
|
|
|
|
|
|
# your exported package globals go here,
|
25
|
|
|
|
|
|
|
# as well as any optionally exported functions
|
26
|
2
|
|
|
|
|
37
|
@EXPORT_OK = qw(%pads);
|
27
|
|
|
|
|
|
|
|
28
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
}
|
30
|
2
|
|
|
2
|
|
11
|
use Carp;
|
|
2
|
|
|
|
|
3
|
|
|
2
|
|
|
|
|
6058
|
|
31
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
our @EXPORT_OK;
|
33
|
|
|
|
|
|
|
|
34
|
|
|
|
|
|
|
our %pads;
|
35
|
|
|
|
|
|
|
|
36
|
|
|
|
|
|
|
# non-exported package globals go here
|
37
|
|
|
|
|
|
|
our $dos;
|
38
|
|
|
|
|
|
|
our $iso;
|
39
|
|
|
|
|
|
|
our $koi;
|
40
|
|
|
|
|
|
|
our $win;
|
41
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
# initialize package globals, first exported ones
|
43
|
|
|
|
|
|
|
|
44
|
|
|
|
|
|
|
%pads=(
|
45
|
|
|
|
|
|
|
I=>1, IMEN=>1, 1=>1, #это жена
|
46
|
|
|
|
|
|
|
R=>2, ROD=>2, 2=>2, #отстался без жены
|
47
|
|
|
|
|
|
|
D=>3, DAT=>3, 3=>3, #студенту жене
|
48
|
|
|
|
|
|
|
V=>4, VIN=>4, 4=>4, #порвал жену
|
49
|
|
|
|
|
|
|
T=>5, TVOR=>5, 5=>5, #назвался женой
|
50
|
|
|
|
|
|
|
P=>6, PRED=>6, 6=>6 #пишу о жене
|
51
|
|
|
|
|
|
|
);
|
52
|
|
|
|
|
|
|
|
53
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
$dos={'а'=>160,'б'=>161,'в'=>162,'г'=>163,'д'=>164,'е'=>165,'ё'=>241,'ж'=>166,'з'=>167,'и'=>168,'й'=>169,'к'=>170,'л'=>171,'м'=>172,'н'=>173,'о'=>174,'п'=>175,'р'=>224,'с'=>225,'т'=>226,'у'=>227,'ф'=>228,'х'=>229,'ц'=>230,'ч'=>231,'ш'=>232,'щ'=>233,'ь'=>236,'ы'=>235,'ъ'=>234,'э'=>237,'ю'=>238,'я'=>239,'А'=>128,'Б'=>129,'В'=>130,'Г'=>131,'Д'=>132,'Е'=>133,'Ё'=>240,'Ж'=>134,'З'=>135,'И'=>136,'Й'=>137,'К'=>138,'Л'=>139,'М'=>140,'Н'=>141,'О'=>142,'П'=>143,'Р'=>144,'С'=>145,'Т'=>146,'У'=>147,'Ф'=>148,'Х'=>149,'Ц'=>150,'Ч'=>151,'Ш'=>152,'Щ'=>153,'Ь'=>156,'Ы'=>155,'Ъ'=>154,'Э'=>157,'Ю'=>158,'Я'=>159};
|
55
|
|
|
|
|
|
|
$iso={'а'=>208,'б'=>209,'в'=>210,'г'=>211,'д'=>212,'е'=>213,'ё'=>241,'ж'=>214,'з'=>215,'и'=>216,'й'=>217,'к'=>218,'л'=>219,'м'=>220,'н'=>221,'о'=>222,'п'=>223,'р'=>224,'с'=>225,'т'=>226,'у'=>227,'ф'=>228,'х'=>229,'ц'=>230,'ч'=>231,'ш'=>232,'щ'=>233,'ь'=>236,'ы'=>235,'ъ'=>234,'э'=>237,'ю'=>238,'я'=>239,'А'=>176,'Б'=>177,'В'=>178,'Г'=>179,'Д'=>180,'Е'=>181,'Ё'=>161,'Ж'=>182,'З'=>183,'И'=>184,'Й'=>185,'К'=>186,'Л'=>187,'М'=>188,'Н'=>189,'О'=>190,'П'=>191,'Р'=>192,'С'=>193,'Т'=>194,'У'=>195,'Ф'=>196,'Х'=>197,'Ц'=>198,'Ч'=>199,'Ш'=>200,'Щ'=>201,'Ь'=>204,'Ы'=>203,'Ъ'=>202,'Э'=>205,'Ю'=>206,'Я'=>207};
|
56
|
|
|
|
|
|
|
$koi={'а'=>193,'б'=>194,'в'=>215,'г'=>199,'д'=>196,'е'=>197,'ё'=>163,'ж'=>214,'з'=>218,'и'=>201,'й'=>202,'к'=>203,'л'=>204,'м'=>205,'н'=>206,'о'=>207,'п'=>208,'р'=>210,'с'=>211,'т'=>212,'у'=>213,'ф'=>198,'х'=>200,'ц'=>195,'ч'=>222,'ш'=>219,'щ'=>221,'ь'=>216,'ы'=>217,'ъ'=>223,'э'=>220,'ю'=>192,'я'=>209,'А'=>225,'Б'=>226,'В'=>247,'Г'=>231,'Д'=>228,'Е'=>229,'Ё'=>179,'Ж'=>246,'З'=>250,'И'=>233,'Й'=>234,'К'=>235,'Л'=>236,'М'=>237,'Н'=>238,'О'=>239,'П'=>240,'Р'=>242,'С'=>243,'Т'=>244,'У'=>245,'Ф'=>230,'Х'=>232,'Ц'=>227,'Ч'=>254,'Ш'=>251,'Щ'=>253,'Ь'=>248,'Ы'=>249,'Ъ'=>255,'Э'=>252,'Ю'=>224,'Я'=>241};
|
57
|
|
|
|
|
|
|
$win={'а'=>224,'б'=>225,'в'=>226,'г'=>227,'д'=>228,'е'=>229,'ё'=>184,'ж'=>230,'з'=>231,'и'=>232,'й'=>233,'к'=>234,'л'=>235,'м'=>236,'н'=>237,'о'=>238,'п'=>239,'р'=>240,'с'=>241,'т'=>242,'у'=>243,'ф'=>244,'х'=>245,'ц'=>246,'ч'=>247,'ш'=>248,'щ'=>249,'ь'=>252,'ы'=>251,'ъ'=>250,'э'=>253,'ю'=>254,'я'=>255,'А'=>192,'Б'=>193,'В'=>194,'Г'=>195,'Д'=>196,'Е'=>197,'Ё'=>168,'Ж'=>198,'З'=>199,'И'=>200,'Й'=>201,'К'=>202,'Л'=>203,'М'=>204,'Н'=>205,'О'=>206,'П'=>207,'Р'=>208,'С'=>209,'Т'=>210,'У'=>211,'Ф'=>212,'Х'=>213,'Ц'=>214,'Ч'=>215,'Ш'=>216,'Щ'=>217,'Ь'=>220,'Ы'=>219,'Ъ'=>218,'Э'=>221,'Ю'=>222,'Я'=>223};
|
58
|
|
|
|
|
|
|
|
59
|
1
|
|
|
1
|
|
1040
|
END { } # module clean-up code here (global destructor)
|
60
|
|
|
|
|
|
|
|
61
|
|
|
|
|
|
|
|
62
|
|
|
|
|
|
|
|
63
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
sub convert {
|
65
|
0
|
|
|
0
|
1
|
0
|
my $src=lc shift;
|
66
|
0
|
|
|
|
|
0
|
my $tgt=lc shift;
|
67
|
0
|
|
|
|
|
0
|
my ($src_cp, $tgt_cp);
|
68
|
0
|
0
|
|
|
|
0
|
if ($src eq 'dos') { $src_cp=$dos;
|
|
0
|
0
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
69
|
0
|
|
|
|
|
0
|
} elsif ($src eq 'win') { $src_cp=$win;
|
70
|
0
|
|
|
|
|
0
|
} elsif ($src eq 'iso') { $src_cp=$iso;
|
71
|
0
|
|
|
|
|
0
|
} elsif ($src eq 'koi') { $src_cp=$koi;
|
72
|
|
|
|
|
|
|
} else {
|
73
|
0
|
|
|
|
|
0
|
croak "Wrong Source encoding: $src";
|
74
|
0
|
|
|
|
|
0
|
return "! Wrong Source encoding: $src";
|
75
|
|
|
|
|
|
|
}
|
76
|
|
|
|
|
|
|
|
77
|
0
|
0
|
|
|
|
0
|
if ($tgt eq 'dos') { $tgt_cp=$dos;
|
|
0
|
0
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
78
|
0
|
|
|
|
|
0
|
} elsif ($tgt eq 'win') { $tgt_cp=$win;
|
79
|
0
|
|
|
|
|
0
|
} elsif ($tgt eq 'iso') { $tgt_cp=$iso;
|
80
|
0
|
|
|
|
|
0
|
} elsif ($tgt eq 'koi') { $tgt_cp=$koi;
|
81
|
|
|
|
|
|
|
} else {
|
82
|
0
|
|
|
|
|
0
|
croak "Wrong tgt encoding: $tgt";
|
83
|
0
|
|
|
|
|
0
|
return "! Wrong tgt encoding: $tgt";
|
84
|
|
|
|
|
|
|
}
|
85
|
|
|
|
|
|
|
|
86
|
0
|
|
|
|
|
0
|
my %src_cp = reverse %{$src_cp};
|
|
0
|
|
|
|
|
0
|
|
87
|
0
|
|
|
|
|
0
|
my $out;
|
88
|
|
|
|
|
|
|
my @out;
|
89
|
0
|
|
|
|
|
0
|
foreach (@_) {
|
90
|
0
|
|
|
|
|
0
|
my @a=split //;
|
91
|
0
|
|
|
|
|
0
|
$out='';
|
92
|
0
|
|
|
|
|
0
|
foreach (@a) {
|
93
|
0
|
|
|
|
|
0
|
my $r=chr($tgt_cp->{$src_cp{ord($_)}});
|
94
|
0
|
0
|
|
|
|
0
|
$out.= $r?$r:$_;
|
95
|
|
|
|
|
|
|
}
|
96
|
0
|
|
|
|
|
0
|
push @out,$out;
|
97
|
|
|
|
|
|
|
}
|
98
|
0
|
0
|
|
|
|
0
|
if (wantarray) {
|
99
|
0
|
|
|
|
|
0
|
return @out;
|
100
|
|
|
|
|
|
|
} else {
|
101
|
0
|
|
|
|
|
0
|
return join ('',@out);
|
102
|
|
|
|
|
|
|
}
|
103
|
|
|
|
|
|
|
}
|
104
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
|
106
|
|
|
|
|
|
|
sub parse_lastname {
|
107
|
5
|
|
|
5
|
1
|
419
|
my $txt=lc shift;
|
108
|
5
|
|
|
|
|
19
|
my $wrap=shift;
|
109
|
5
|
|
|
|
|
12
|
my $last_letter=substr($txt,-2);
|
110
|
|
|
|
|
|
|
|
111
|
|
|
|
|
|
|
#print $last_letter;
|
112
|
5
|
50
|
|
|
|
44
|
if ($last_letter eq 'ий') {
|
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
113
|
0
|
|
|
|
|
0
|
my $h={1=>'ий',
|
114
|
|
|
|
|
|
|
2=>'ого',
|
115
|
|
|
|
|
|
|
3=>'ому',
|
116
|
|
|
|
|
|
|
4=>'ого',
|
117
|
|
|
|
|
|
|
5=>'им',
|
118
|
|
|
|
|
|
|
6=>'ом'
|
119
|
|
|
|
|
|
|
};
|
120
|
0
|
|
0
|
|
|
0
|
return substr($txt,0,-2).($h->{$wrap}||return "!$txt");
|
121
|
|
|
|
|
|
|
} elsif ($last_letter eq 'ый') {
|
122
|
0
|
|
|
|
|
0
|
my $h={1=>'ый',
|
123
|
|
|
|
|
|
|
2=>'ого',
|
124
|
|
|
|
|
|
|
3=>'ому',
|
125
|
|
|
|
|
|
|
4=>'ого',
|
126
|
|
|
|
|
|
|
5=>'ым',
|
127
|
|
|
|
|
|
|
6=>'ом'
|
128
|
|
|
|
|
|
|
};
|
129
|
0
|
|
0
|
|
|
0
|
return substr($txt,0,-2).($h->{$wrap}||return "!$txt");
|
130
|
|
|
|
|
|
|
} elsif ($last_letter eq 'ой') {
|
131
|
0
|
|
|
|
|
0
|
return $txt;
|
132
|
|
|
|
|
|
|
} elsif ($last_letter eq 'ая') {
|
133
|
0
|
|
|
|
|
0
|
my $h={1=>'ая',
|
134
|
|
|
|
|
|
|
2=>'ую',
|
135
|
|
|
|
|
|
|
3=>'ой',
|
136
|
|
|
|
|
|
|
4=>'ую',
|
137
|
|
|
|
|
|
|
5=>'ой',
|
138
|
|
|
|
|
|
|
6=>'ой'
|
139
|
|
|
|
|
|
|
};
|
140
|
0
|
|
0
|
|
|
0
|
return substr($txt,0,-2).($h->{$wrap}||return "!$txt");
|
141
|
|
|
|
|
|
|
} elsif ($last_letter eq 'яя') {
|
142
|
0
|
|
|
|
|
0
|
my $h={1=>'яя',
|
143
|
|
|
|
|
|
|
2=>'юю',
|
144
|
|
|
|
|
|
|
3=>'ей',
|
145
|
|
|
|
|
|
|
4=>'юю',
|
146
|
|
|
|
|
|
|
5=>'ей',
|
147
|
|
|
|
|
|
|
6=>'ей'
|
148
|
|
|
|
|
|
|
};
|
149
|
0
|
|
0
|
|
|
0
|
return substr($txt,0,-2).($h->{$wrap}||return "!$txt");
|
150
|
|
|
|
|
|
|
} elsif ($last_letter eq 'ок') {
|
151
|
|
|
|
|
|
|
|
152
|
0
|
|
|
|
|
0
|
my $h={1=>'ок', #это жена
|
153
|
|
|
|
|
|
|
2=>'ка', #отстался без жены
|
154
|
|
|
|
|
|
|
3=>'ке', #студенту жене
|
155
|
|
|
|
|
|
|
4=>'ку', #порвал жену
|
156
|
|
|
|
|
|
|
5=>'ком', #назвался женой
|
157
|
|
|
|
|
|
|
6=>'ке' #пишу о жене
|
158
|
|
|
|
|
|
|
};
|
159
|
0
|
|
|
|
|
0
|
return substr($txt,0,-2).$h->{$wrap};
|
160
|
|
|
|
|
|
|
}
|
161
|
|
|
|
|
|
|
|
162
|
5
|
|
|
|
|
9
|
$_=substr($txt,-1);
|
163
|
|
|
|
|
|
|
|
164
|
5
|
50
|
|
|
|
17
|
if ($_ eq 'й') {
|
165
|
|
|
|
|
|
|
|
166
|
0
|
|
|
|
|
0
|
my $h={1=>'й',
|
167
|
|
|
|
|
|
|
2=>'я',
|
168
|
|
|
|
|
|
|
3=>'я',
|
169
|
|
|
|
|
|
|
4=>'ю',
|
170
|
|
|
|
|
|
|
5=>'ем',
|
171
|
|
|
|
|
|
|
6=>'и'
|
172
|
|
|
|
|
|
|
};
|
173
|
0
|
|
0
|
|
|
0
|
return substr($txt,0,-1).($h->{$wrap}||return "!$txt");
|
174
|
|
|
|
|
|
|
}
|
175
|
5
|
50
|
|
|
|
12
|
if ($_ eq 'а') {
|
176
|
0
|
|
|
|
|
0
|
my $h={1=>'а', #это жена
|
177
|
|
|
|
|
|
|
2=>'ой', #отстался без жены
|
178
|
|
|
|
|
|
|
3=>'у', #порвал жену
|
179
|
|
|
|
|
|
|
4=>'ой', #студенту жене
|
180
|
|
|
|
|
|
|
5=>'ой', #назвался женой
|
181
|
|
|
|
|
|
|
6=>'ой' #пишу о жене
|
182
|
|
|
|
|
|
|
};
|
183
|
0
|
|
0
|
|
|
0
|
return substr($txt,0,-1).($h->{$wrap}||return "!$txt");
|
184
|
|
|
|
|
|
|
}
|
185
|
5
|
50
|
|
|
|
12
|
if ($_ eq 'я') {
|
186
|
0
|
|
|
|
|
0
|
my $h={1=>'я', #это жена
|
187
|
|
|
|
|
|
|
2=>'и', #отстался без жены
|
188
|
|
|
|
|
|
|
3=>'ю', #порвал жену
|
189
|
|
|
|
|
|
|
4=>'е', #студенту жене
|
190
|
|
|
|
|
|
|
5=>'ей', #назвался женой
|
191
|
|
|
|
|
|
|
6=>'е' #пишу о жене
|
192
|
|
|
|
|
|
|
};
|
193
|
0
|
|
0
|
|
|
0
|
return substr($txt,0,-1).($h->{$wrap}||return "!$txt");
|
194
|
|
|
|
|
|
|
}
|
195
|
5
|
50
|
|
|
|
12
|
if ($_ eq 'ь') {
|
196
|
0
|
|
|
|
|
0
|
my $h={1=>'ь', #это жена
|
197
|
|
|
|
|
|
|
2=>'я', #отстался без жены
|
198
|
|
|
|
|
|
|
3=>'я', #порвал жену
|
199
|
|
|
|
|
|
|
4=>'ю', #студенту жене
|
200
|
|
|
|
|
|
|
5=>'ем', #назвался женой
|
201
|
|
|
|
|
|
|
6=>'е' #пишу о жене
|
202
|
|
|
|
|
|
|
};
|
203
|
0
|
|
0
|
|
|
0
|
return substr($txt,0,-1).($h->{$wrap}||return "!$txt");
|
204
|
|
|
|
|
|
|
}
|
205
|
5
|
50
|
|
|
|
13
|
if (/[уехъфыпролджэячсмитьбю]/) {
|
206
|
0
|
|
|
|
|
0
|
return $txt;
|
207
|
|
|
|
|
|
|
}
|
208
|
5
|
50
|
|
|
|
13
|
if (/в/) {
|
209
|
0
|
|
|
|
|
0
|
my $h={1=>'', #это жена
|
210
|
|
|
|
|
|
|
2=>'а', #отстался без жены
|
211
|
|
|
|
|
|
|
3=>'e', #студенту жене
|
212
|
|
|
|
|
|
|
4=>'у', #порвал жену
|
213
|
|
|
|
|
|
|
5=>'ым', #назвался женой
|
214
|
|
|
|
|
|
|
6=>'е' #пишу о жене
|
215
|
|
|
|
|
|
|
};
|
216
|
0
|
|
|
|
|
0
|
return $txt.$h->{$wrap};
|
217
|
|
|
|
|
|
|
}
|
218
|
|
|
|
|
|
|
|
219
|
5
|
50
|
|
|
|
11
|
if (/[цукенгшщзхъфывапролджэячсмитьбю]/) {
|
220
|
0
|
|
|
|
|
0
|
my $h={1=>'', #это жена
|
221
|
|
|
|
|
|
|
2=>'а', #отстался без жены
|
222
|
|
|
|
|
|
|
3=>'у', #порвал жену
|
223
|
|
|
|
|
|
|
4=>'e', #студенту жене
|
224
|
|
|
|
|
|
|
5=>'ом', #назвался женой
|
225
|
|
|
|
|
|
|
6=>'ой' #пишу о жене
|
226
|
|
|
|
|
|
|
};
|
227
|
0
|
|
|
|
|
0
|
return $txt.$h->{$wrap};
|
228
|
|
|
|
|
|
|
}
|
229
|
5
|
|
|
|
|
1391
|
carp ("Unalbe to sklon: $txt");
|
230
|
5
|
|
|
|
|
29
|
return "$txt";
|
231
|
|
|
|
|
|
|
|
232
|
|
|
|
|
|
|
}
|
233
|
|
|
|
|
|
|
|
234
|
|
|
|
|
|
|
sub parse_n {
|
235
|
10
|
|
|
10
|
1
|
655
|
my $txt=lc shift;
|
236
|
10
|
|
|
|
|
27
|
my $wrap=shift;
|
237
|
10
|
|
|
|
|
16
|
my $last_letter=substr($txt,-2);
|
238
|
|
|
|
|
|
|
|
239
|
|
|
|
|
|
|
#print $last_letter;
|
240
|
10
|
50
|
|
|
|
45
|
if ($last_letter eq 'ок') {
|
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
241
|
0
|
|
|
|
|
0
|
my $h={1=>'ок', #это жена
|
242
|
|
|
|
|
|
|
2=>'ка', #отстался без жены
|
243
|
|
|
|
|
|
|
3=>'ку', #порвал жену
|
244
|
|
|
|
|
|
|
4=>'ке', #студенту жене
|
245
|
|
|
|
|
|
|
5=>'ком', #назвался женой
|
246
|
|
|
|
|
|
|
6=>'ке' #пишу о жене
|
247
|
|
|
|
|
|
|
};
|
248
|
0
|
|
|
|
|
0
|
return substr($txt,0,-2).$h->{$wrap};
|
249
|
|
|
|
|
|
|
} elsif ($last_letter eq 'ел') {
|
250
|
0
|
|
|
|
|
0
|
my $h={1=>'ел', #это жена
|
251
|
|
|
|
|
|
|
2=>'ла', #отстался без жены
|
252
|
|
|
|
|
|
|
3=>'лу', #порвал жену
|
253
|
|
|
|
|
|
|
4=>'лу', #студенту жене
|
254
|
|
|
|
|
|
|
5=>'лом', #назвался женой
|
255
|
|
|
|
|
|
|
6=>'ле' #пишу о жене
|
256
|
|
|
|
|
|
|
};
|
257
|
0
|
|
|
|
|
0
|
return substr($txt,0,-2).$h->{$wrap};
|
258
|
|
|
|
|
|
|
} elsif ($last_letter eq 'ев') {
|
259
|
0
|
|
|
|
|
0
|
my $h={1=>'ев', #это жена
|
260
|
|
|
|
|
|
|
2=>'ьва', #отстался без жены
|
261
|
|
|
|
|
|
|
3=>'ьва', #порвал жену
|
262
|
|
|
|
|
|
|
4=>'ьву', #студенту жене
|
263
|
|
|
|
|
|
|
5=>'ьвом', #назвался женой
|
264
|
|
|
|
|
|
|
6=>'ьве' #пишу о жене
|
265
|
|
|
|
|
|
|
};
|
266
|
0
|
|
|
|
|
0
|
return substr($txt,0,-2).$h->{$wrap};
|
267
|
|
|
|
|
|
|
}
|
268
|
|
|
|
|
|
|
|
269
|
10
|
|
|
|
|
15
|
$_=substr($txt,-1);
|
270
|
|
|
|
|
|
|
|
271
|
10
|
50
|
|
|
|
22
|
if ($_ eq 'й') {
|
272
|
0
|
|
|
|
|
0
|
my $h={1=>'й',
|
273
|
|
|
|
|
|
|
2=>'я',
|
274
|
|
|
|
|
|
|
3=>'ю',
|
275
|
|
|
|
|
|
|
4=>'ю',
|
276
|
|
|
|
|
|
|
5=>'ем',
|
277
|
|
|
|
|
|
|
6=>'е'
|
278
|
|
|
|
|
|
|
};
|
279
|
0
|
|
0
|
|
|
0
|
return substr($txt,0,-1).($h->{$wrap}||return "!$txt");
|
280
|
|
|
|
|
|
|
}
|
281
|
10
|
50
|
|
|
|
19
|
if ($_ eq 'а') {
|
282
|
0
|
|
|
|
|
0
|
my $h={1=>'а', #это жена
|
283
|
|
|
|
|
|
|
2=>'ы', #отстался без жены
|
284
|
|
|
|
|
|
|
3=>'е', #студенту жене
|
285
|
|
|
|
|
|
|
4=>'у', #порвал жену
|
286
|
|
|
|
|
|
|
5=>'ой', #назвался женой
|
287
|
|
|
|
|
|
|
6=>'е' #пишу о жене
|
288
|
|
|
|
|
|
|
};
|
289
|
0
|
|
0
|
|
|
0
|
return substr($txt,0,-1).($h->{$wrap}||return "!$txt");
|
290
|
|
|
|
|
|
|
}
|
291
|
10
|
50
|
|
|
|
27
|
if ($_ eq 'я') {
|
292
|
0
|
|
|
|
|
0
|
my $h={1=>'я', #это жена
|
293
|
|
|
|
|
|
|
2=>'и', #отстался без жены
|
294
|
|
|
|
|
|
|
3=>'е', #студенту жене
|
295
|
|
|
|
|
|
|
4=>'ю', #порвал жену
|
296
|
|
|
|
|
|
|
5=>'ей', #назвался женой
|
297
|
|
|
|
|
|
|
6=>'е' #пишу о жене
|
298
|
|
|
|
|
|
|
};
|
299
|
0
|
|
0
|
|
|
0
|
return substr($txt,0,-1).($h->{$wrap}||return "!$txt");
|
300
|
|
|
|
|
|
|
}
|
301
|
10
|
50
|
|
|
|
19
|
if ($_ eq 'ь') {
|
302
|
0
|
|
|
|
|
0
|
my $h={1=>'ь', #это жена
|
303
|
|
|
|
|
|
|
2=>'я', #отстался без жены
|
304
|
|
|
|
|
|
|
3=>'ю', #студенту жене
|
305
|
|
|
|
|
|
|
4=>'я', #порвал жену
|
306
|
|
|
|
|
|
|
5=>'ем', #назвался женой
|
307
|
|
|
|
|
|
|
6=>'е' #пишу о жене
|
308
|
|
|
|
|
|
|
};
|
309
|
0
|
|
0
|
|
|
0
|
return substr($txt,0,-1).($h->{$wrap}||return "!$txt");
|
310
|
|
|
|
|
|
|
}
|
311
|
10
|
50
|
|
|
|
20
|
if (/[уеъыэю]/) {
|
312
|
0
|
|
|
|
|
0
|
return $txt;
|
313
|
|
|
|
|
|
|
}
|
314
|
10
|
50
|
|
|
|
20
|
if (/[вткнгзхфвпрлдмтб]/) {
|
315
|
0
|
|
|
|
|
0
|
my $h={1=>'', #это жена
|
316
|
|
|
|
|
|
|
2=>'а', #отстался без жены
|
317
|
|
|
|
|
|
|
3=>'е', #студенту жене
|
318
|
|
|
|
|
|
|
4=>'у', #порвал жену
|
319
|
|
|
|
|
|
|
5=>'ом', #назвался женой
|
320
|
|
|
|
|
|
|
6=>'е' #пишу о жене
|
321
|
|
|
|
|
|
|
};
|
322
|
0
|
|
|
|
|
0
|
return $txt.$h->{$wrap};
|
323
|
|
|
|
|
|
|
}
|
324
|
|
|
|
|
|
|
|
325
|
10
|
50
|
|
|
|
19
|
if (/[шщхжч]/) {
|
326
|
0
|
|
|
|
|
0
|
my $h={1=>'', #это жена
|
327
|
|
|
|
|
|
|
2=>'а', #отстался без жены
|
328
|
|
|
|
|
|
|
3=>'У', #студенту жене
|
329
|
|
|
|
|
|
|
4=>'у', #порвал жену
|
330
|
|
|
|
|
|
|
5=>'ем', #назвался женой
|
331
|
|
|
|
|
|
|
6=>'е' #пишу о жене
|
332
|
|
|
|
|
|
|
};
|
333
|
0
|
|
|
|
|
0
|
return $txt.$h->{$wrap};
|
334
|
|
|
|
|
|
|
}
|
335
|
10
|
|
|
|
|
2517
|
carp ("Unalbe to sklon: $txt");
|
336
|
10
|
|
|
|
|
53
|
return "$txt";
|
337
|
|
|
|
|
|
|
|
338
|
|
|
|
|
|
|
}
|
339
|
|
|
|
|
|
|
|
340
|
|
|
|
|
|
|
sub sklon {
|
341
|
5
|
|
|
5
|
1
|
20
|
$_=shift;
|
342
|
5
|
|
|
|
|
987
|
print "$_\n";
|
343
|
5
|
|
|
|
|
23
|
/(\w+)\s(\w+)\s(.+)/;
|
344
|
5
|
|
|
|
|
19
|
my $pad=shift;
|
345
|
5
|
|
|
|
|
15
|
my $decl=$pads{$pad};
|
346
|
|
|
|
|
|
|
|
347
|
5
|
50
|
|
|
|
16
|
croak "Unknown pad attempting to be set : $pad" unless $decl;
|
348
|
5
|
|
|
|
|
18
|
return initcap(parse_lastname($1,$decl)." ".parse_n($2,$decl)." ".parse_n($3,$decl));
|
349
|
|
|
|
|
|
|
|
350
|
|
|
|
|
|
|
}
|
351
|
|
|
|
|
|
|
sub initcap {
|
352
|
5
|
|
|
5
|
1
|
8
|
$_=shift;
|
353
|
5
|
|
|
|
|
6
|
my $out;
|
354
|
5
|
|
|
|
|
23
|
while (/(\w)(\w*)(\W*)/g) {
|
355
|
0
|
|
|
|
|
0
|
$out.=uc ($1).$2.$3;
|
356
|
|
|
|
|
|
|
}
|
357
|
5
|
|
|
|
|
327
|
return $out;
|
358
|
|
|
|
|
|
|
}
|
359
|
|
|
|
|
|
|
|
360
|
|
|
|
|
|
|
1;
|
361
|
|
|
|
|
|
|
|
362
|
|
|
|
|
|
|
__END__
|