Skip to content

Commit d587375

Browse files
committed
Merge branch 'dev'
2 parents 73beaa4 + fc81206 commit d587375

File tree

5 files changed

+83
-7
lines changed

5 files changed

+83
-7
lines changed

NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
0.6.4 2018-04-23
2+
- Добавлена функция для восстановления перевода из Lite-локализации EU4.
3+
14
0.6.3 2018-04-16
25
- Кодировки в коде переименованы. В версии 0.6.2 был баг, который проявлялся, если вы собирали модуль кодировки на этой версии, а потом пытались использовать скрипт, из-за недопереименованных кодировок в коде.
36
- Заменён код разбора YAML-подобной строки файлов перевода EU4.

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ CP1252CYR:
111111

112112
* Декодировать (CP1252CYR) — заменить промежуточное представление символов кириллицы из CP1252CYREU4 на символы кириллицы UTF-8, которым не поставлены в соответствие латинский буквы. Внимание! Функция декодировки из CP1252CYREU4 не восстанавливает текст, который был закодирован в эту кодировку. Если же текст был декодирован из CP1252CYREU4 и потом закодирован обратно, то исходный и повторно закодированный файлы бутут совпадать.
113113

114+
* Восстановить (CP1252CYR) — заменить промежуточное представление символов кириллицы из CP1252CYREU4 на символы кириллицы UTF-8 с разбором строк локализации и выделением руских слов. Используйте для дальнейшей обработки на свой стрих и риск.
115+
114116
<!-- Сначала выберите кодировку. Если вы собираетесь декодировать файлы, то выбранная кодировка сообщает скрипту кодироку исходных данных, если же вы собираетесь кодировать файлы, скрипт таким образом узнает желаемую кодировку выходных данных. Обратите внимание, что декодировать можно только CP1251, т. к. только в этой кодировке из представленных латиница не пересекается с кириллицей, и, декодировав её, можно получить идентичные оригиналу файлы. Транслит предназначен для тех, кто хочет играть с переводом и одновременно использовать красивые латинские шрифты из модов или оригинальные шрифты из игры. -->
115117

116118
### Вкладка «EU4Lite»

Recodenc.pm

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ use vars qw(
5555
$ENC_TRANSLIT
5656
$DEC_CP1252A
5757
$DEC_CP1252B
58+
$DEC_CP1252B_R
5859
$DEC_CP1252C
5960
);
6061
use parent qw(Exporter);
@@ -80,7 +81,8 @@ use Encode::Recodenc;
8081
*ENC_TRANSLIT = \4;
8182
*DEC_CP1252A = \5;
8283
*DEC_CP1252B = \6;
83-
*DEC_CP1252C = \7;
84+
*DEC_CP1252B_R = \7;
85+
*DEC_CP1252C = \8;
8486

8587
# Примечания к константам:
8688
# - FL_* — одно пространство имён
@@ -364,6 +366,9 @@ sub l10n_eu4 { # r
364366
elsif ($cpfl == $DEC_CP1252B) {
365367
$txt = decode('cp1252b', encode('cp1252', $txt));
366368
}
369+
elsif ($cpfl == $DEC_CP1252B_R) {
370+
$txt = decode_cp1252b_r($txt);
371+
}
367372
# сохранение строки
368373
if (defined($cmm)) {
369374
push(@strs, " $tag:$num \"$txt\" #$cmm\n");
@@ -1411,6 +1416,68 @@ sub cyr_to_translit {
14111416
(ABVGDEËJZIYKLMNOPRSTUFHQCXÇ’ÎYÊÜÄabvgdeëjziyklmnoprstufhqcxç’îyêüä);
14121417
}
14131418

1419+
# функция для декодировки CP1252B с восстановлением русской локализации
1420+
sub enc_cp1252b_rus {
1421+
my $str = shift;
1422+
$str =~ y(ABCEHKMOPTXaceopx€‚ƒ„…†‡ˆ‰‹‘’“”•–—˜™› ¢¥¦¨©ª«¬®¯°±²³´µ¶·¸¹º»¼¾Ë×ë÷)
1423+
(АВСЕНКМОРТХасеорхБГДЖЗИЙЛПУФЦЧШЩЪЫЬЭЮбвгджзийклмнптуфцчшщъыьэюЁЯёя);
1424+
return $str;
1425+
}
1426+
sub decode_cp1252b_r {
1427+
my $str = shift;
1428+
unless ($str) {return ""}
1429+
my @str;
1430+
my $wordbuf;
1431+
my $fl = ''; # £$[
1432+
my $flp = ''; #paragraph §
1433+
my $fle = ''; #escape character \
1434+
@str = $str =~ /\X/g;
1435+
$str = '';
1436+
foreach my $ltr (@str) {
1437+
if ($ltr =~ /[ !"#\$%&'()*+,-.\/0123456789:;<=>?@\[\\\]^_`{|}~¡£¤§½¿]/ || $fl || $flp || $fle) { # _
1438+
# запись буфера со словом в строку результата
1439+
if ($wordbuf) {
1440+
if ($wordbuf =~ /[DFGIJLNQRSUVWYZbdfghijklmnqrstuvwyzŠŒŽšœžŸÀÁÂÃÄÅÆÇÈÉÊÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêìíîïðñòóôõöøùúûüýþÿ]/g || $fl) {
1441+
$wordbuf = decode('cp1252b', encode('cp1252', $wordbuf))
1442+
}
1443+
else {
1444+
$wordbuf = enc_cp1252b_rus($wordbuf);
1445+
}
1446+
$str .= $wordbuf;
1447+
$wordbuf = '';
1448+
}
1449+
# управление флагами
1450+
if ($ltr eq '$') {if ($fl eq '$') {$fl = ''} else {$fl = '$'}}
1451+
if ($ltr eq '[') {$fl = '['}
1452+
elsif ($ltr eq ']' && $fl eq '[') {$fl = ''}
1453+
if ($ltr eq '£') {if ($fl eq '£') {$fl = ''} else {$fl = '£'}}
1454+
elsif ($ltr =~ /[ !"#\$%&'()*+,-.\/0123456789:;<=>?@\[\\\]^`{|}~¡£¤§½¿]/ && $fl eq '£') {$fl = ''} # без «_»
1455+
if ($ltr eq '§') {$flp = 1}
1456+
elsif ($ltr eq '!' && $flp) {$flp = ''}
1457+
elsif (!($ltr =~ /[%*=0-9WBGRbgY+-]/) && $flp) {$flp = ''; goto WC}
1458+
if ($fle) {$fle = ''}
1459+
elsif ($ltr eq '\\') {$fle = 1}
1460+
# запись текущего символа в строку результата
1461+
$str .= $ltr;
1462+
}
1463+
else {
1464+
WC:;
1465+
$wordbuf .= $ltr;
1466+
}
1467+
}
1468+
if ($wordbuf) {
1469+
if ($wordbuf =~ /[DFGIJLNQRSUVWYZbdfghijklmnqrstuvwyzŠŒŽšœžŸÀÁÂÃÄÅÆÇÈÉÊÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêìíîïðñòóôõöøùúûüýþÿ]/g || $fl) {
1470+
$wordbuf = decode('cp1252b', encode('cp1252', $wordbuf))
1471+
}
1472+
else {
1473+
$wordbuf = enc_cp1252b_rus($wordbuf);
1474+
}
1475+
$str .= $wordbuf;
1476+
$wordbuf = '';
1477+
}
1478+
return $str;
1479+
}
1480+
14141481
# функция для замены номеров символов в кодировке юникод на номера для других кодировок
14151482
sub id_to {
14161483
=head2 id_to

recodenc-gui.pl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ BEGIN
8181
binmode(STDERR, ":encoding(console_out)");
8282

8383
*PROGNAME = \'Recodenc';
84-
*VERSION = \'0.6.3';
84+
*VERSION = \'0.6.4';
8585
*LABEL_PADDING = \'3x3';
8686

8787
# загрузка конфигурации
@@ -216,6 +216,7 @@ BEGIN
216216
child => [
217217
IUP::Button->new(EXPAND => 'HORIZONTAL', TITLE => 'Декодировать (CP1251)', ACTION => sub{&w_recodenc_l10n_eu4($Recodenc::DEC_CP1252A); return IUP_DEFAULT}),
218218
IUP::Button->new(EXPAND => 'HORIZONTAL', TITLE => 'Декодировать (CP1252CYR)', ACTION => sub{&w_recodenc_l10n_eu4($Recodenc::DEC_CP1252B); return IUP_DEFAULT}),
219+
IUP::Button->new(EXPAND => 'HORIZONTAL', TITLE => 'Восстановить (CP1252CYR)', ACTION => sub{&w_recodenc_l10n_eu4($Recodenc::DEC_CP1252B_R); return IUP_DEFAULT})
219220
]
220221
)
221222
]

recodenc.pl

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
@ARGV = map {decode('locale', $_)} @ARGV;
4444

4545
*PROGNAME = \'Recodenc';
46-
*VERSION = \'0.6.3';
46+
*VERSION = \'0.6.4';
4747
*ACTION_ENCODE = \1;
4848
*ACTION_DECODE = \2;
4949
*ACTION_TRANSLIT = \3;
@@ -54,7 +54,7 @@
5454

5555
my $mode = 'e';
5656
my $actn = $ACTION_ENCODE;
57-
my $encoding = 'cp1252cyreu4';
57+
my $encoding = 'cp1252cyr';
5858
my $hv = 0;
5959
my @dirs;
6060

@@ -159,7 +159,7 @@ sub det_enc {
159159
die "Задана неверная локализация кодировки CP1252CYR.\n";
160160
}
161161
else {
162-
return $Recodenc::DEC_CP1252B;
162+
return $Recodenc::DEC_CP1252B_R;
163163
}
164164
}
165165
elsif ($encoding eq 'cp1252cyrck2') {
@@ -241,7 +241,7 @@ sub help {
241241
-t, --translit Транслитерировать.
242242
-e, --encoding=cp1252cyr|cp1252cyreu4|cp1252cyrck2|cp1251
243243
Устанавливает кодировку.
244-
По умолчанию cp1252cyreu4.
244+
По умолчанию cp1252cyr.
245245
-g, --tags Тэгы.
246246
-c, --clean Очистить.
247247
-h, --help Показать этот текст и завершить выполнение.
@@ -254,7 +254,10 @@ sub help {
254254
255255
Режим EU4
256256
Действия: -n|-d|-t. Транслитерация указания кодировки не требует.
257-
Кодировки: cp1251, cp1252cyr.
257+
Кодировки: cp1251, cp1252cyr, cp1252cyreu4.
258+
При указании кодировки cp1252cyreu4 для декодировки происходит
259+
восстановление русской локализации из кодировки CP1252CYR, вместо
260+
простого справочного декодирования (cp1252cyr).
258261
При указании одного каталога изменяются файлы в нём. При указании двух
259262
каталогов файлы читаются из первого каталога и сохраняются во втором.
260263
Остальные каталоги отбрасываются.

0 commit comments

Comments
 (0)