diff --git a/NEWS b/NEWS index 5f8b6ad..298dfb9 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,6 @@ +0.6.1 2017-11-05 +- Возвращено либеральное правило проверки на BOM (но только в начале файла; кроме мода-сохранения) — теперь BOM не обязательно проставлять в исходных файлах. Более того — теперь я этого не рекомендую. + 0.6.0 2017-05-13 - Прекращена поставка устаревшего `font.txt`. - Графический интерфейс переведён на IUP. diff --git a/README.md b/README.md index 094d8e9..68c8f76 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,8 @@ CP1252CYR: Интерфейс выбора каталогов для EU4Lite и CK2Lite отличается, т. к. соответствующая функция производит сборку локализации для Lite-перевода, поэтому требуются два исходных каталога с разными локализациями и обязательный каталог сохранения. +Начаная с версии 0.6.1 BOM в начале исходного файла в кодировке UTF-8 не обязателен и не рекомендуется к установке. + +## Примеры текста + +Текст примера: + +``` +Съешь же ещё этих мягких французских булок да выпей чаю. +``` + +CP1251 в промежуточном представлении в UTF8: + +``` +Ñúåøü æå åù¸ ýòèõ ìÿãêèõ ôðàíöóçñêèõ áóëîê äà âûïåé ÷àþ. +``` + +CP1252CYR в промежуточном представлении в UTF8: + +``` +C¹e·» ¨e e¸ë ¼²ªx ¯÷¥¬ªx ´pa°µ³©c¬ªx  ³®o¬ ¦a ¢º±e« ¶a¾. +``` + +Транслит: + +``` +S’exy je eçë êtih mägkih franquzskih bulok da vîpey caü. +``` + ## Связь с автором diff --git a/Recodenc.pm b/Recodenc.pm index fc8ed96..442370c 100644 --- a/Recodenc.pm +++ b/Recodenc.pm @@ -330,7 +330,9 @@ sub l10n_eu4 { closedir($ch); foreach my $filename (@filenames) { open(my $filehandle, '<:unix:perlio:encoding(utf-8)', encode('locale_fs', "$dir1/$filename")); - seek($filehandle, 3, 0); # отбрасывание трёх байт с начала файла (BOM) + my $sof; # отбрасывание BOM, если он есть + read($filehandle, $sof, 1); + unless ($sof eq "\x{FEFF}") {seek($filehandle, 0, 0)} my $fl = 0; # флаг нужности/ненужности обработки строк my @strs; # объявление хранилища строк push(@strs, "\x{FEFF}"); # добавление BOM в начало файла @@ -375,7 +377,7 @@ sub l10n_eu4 { undef $filehandle; # запись результатов обработки unless (defined($dir2)) {$dir2 = $dir1} - open($filehandle, '>:unix:perlio:encoding(utf-8)', encode('locale_fs', "$dir2/$filename")); + open($filehandle, '>:unix:perlio:encoding(utf-8)', encode('locale_fs', "$dir2/$filename")) or die "Невозможно открыть файл: $!"; print $filehandle @strs; close $filehandle; } @@ -425,7 +427,9 @@ sub l10n_eu4_lite { closedir($ch); foreach my $filename (@filenames) { open(my $filehandle, '<:unix:perlio:encoding(utf-8)', encode('locale_fs', "$dir_orig_ru/$filename")); - seek($filehandle, 3, 0); + my $sof; # отбрасывание BOM, если он есть + read($filehandle, $sof, 1); + unless ($sof eq "\x{FEFF}") {seek($filehandle, 0, 0)} my $fl = 0; # флаг нужности/ненужности обработки строк my @strs; push(@strs, "\x{FEFF}"); @@ -471,7 +475,9 @@ sub l10n_eu4_lite { @filenames = ('prov_names_l_english.yml', 'prov_names_adj_l_english.yml'); foreach my $filename (@filenames) { open(my $filehandle, '<:unix:perlio:encoding(utf-8)', "$dir_orig_en/$filename"); - seek($filehandle, 3, 0); + my $sof; # отбрасывание BOM, если он есть + read($filehandle, $sof, 1); + unless ($sof eq "\x{FEFF}") {seek($filehandle, 0, 0)} my @strs; push(@strs, "\x{FEFF}"); while (my $str = <$filehandle>) { @@ -552,7 +558,9 @@ sub l10n_eu4_tags { mkdir(encode('locale_fs', "$dir_save_ru/ru")); foreach my $filename (@filenames) { open(my $filehandle, '<:unix:perlio:encoding(utf-8)', encode('locale_fs', "$dir_orig_ru/$filename")); - seek($filehandle, 3, 0); + my $sof; # отбрасывание BOM, если он есть + read($filehandle, $sof, 1); + unless ($sof eq "\x{FEFF}") {seek($filehandle, 0, 0)} my @strs; push(@strs, "\x{FEFF}"); while (my $str = <$filehandle>) { @@ -581,7 +589,9 @@ sub l10n_eu4_tags { mkdir(encode('locale_fs', "$dir_save_ru/en")); foreach my $filename (@filenames) { open(my $filehandle, '<:crlf:perlio:encoding(utf-8)', encode('locale_fs', "$dir_orig_en/$filename")); - seek($filehandle, 3, 0); + my $sof; # отбрасывание BOM, если он есть + read($filehandle, $sof, 1); + unless ($sof eq "\x{FEFF}") {seek($filehandle, 0, 0)} my @strs; push(@strs, "\x{FEFF}"); while (my $str = <$filehandle>) { @@ -695,7 +705,9 @@ sub l10n_ck2 { foreach my $filename (@filenames) { open(my $filehandle, "<$reg_read", encode('locale_fs', "$dir1/$filename")); if ($cpfl == $ENC_CP1251 or $cpfl == $ENC_CP1252CYRCK2 or $cpfl == $ENC_TRANSLIT) { - seek($filehandle, 3, 0); + my $sof; # отбрасывание BOM, если он есть + read($filehandle, $sof, 1); + unless ($sof eq "\x{FEFF}") {seek($filehandle, 0, 0)} } my @strs; while (my $str = <$filehandle>) { @@ -777,7 +789,9 @@ sub l10n_ck2_lite { closedir($corh); foreach my $filename (@filenames_or) { open(my $filehandle, '<:unix:perlio:encoding(utf-8)', encode('locale_fs', "$dir_orig_ru/$filename")); - seek($filehandle, 3, 0); + my $sof; # отбрасывание BOM, если он есть + read($filehandle, $sof, 1); + unless ($sof eq "\x{FEFF}") {seek($filehandle, 0, 0)} while (my $str = <$filehandle>) { chomp $str; if ($str =~ m/^$/ or $str =~ m/^\#/ or $str =~ m/^;/) {next} # пропуск пустых строк, строк с комментариями и строк без тегов @@ -891,7 +905,9 @@ sub l10n_ck2_tags { mkdir(encode('locale_fs', "$dir_save_ru/ru")); foreach my $filename (@filenames_or) { open(my $filehandle, '<:unix:perlio:encoding(utf-8)', encode('locale_fs', "$dir_orig_ru/$filename")); - seek($filehandle, 3, 0); + my $sof; # отбрасывание BOM, если он есть + read($filehandle, $sof, 1); + unless ($sof eq "\x{FEFF}") {seek($filehandle, 0, 0)} my $ff; my @strs; push(@strs, "\x{FEFF}#CODE\n"); @@ -1217,7 +1233,11 @@ sub plaintext { foreach my $filename (@filenames) { unless (-f encode('locale_fs', "$dir1/$filename")) {next} open(my $filehandle, "<$reg_read", encode('locale_fs', "$dir1/$filename")); - if ($reg_read eq ':encoding(utf-8)') {seek($filehandle, 3, 0)} + if ($reg_read eq ':encoding(utf-8)') { + my $sof; # отбрасывание BOM, если он есть + read($filehandle, $sof, 1); + unless ($sof eq "\x{FEFF}") {seek($filehandle, 0, 0)} + } my @strs; if ($reg_write eq ':encoding(utf-8)') {push(@strs, "\x{FEFF}")} while (my $str = <$filehandle>) { diff --git a/encxs/INSTALL b/encxs/INSTALL index 91212b1..ee62250 100644 --- a/encxs/INSTALL +++ b/encxs/INSTALL @@ -1,6 +1,6 @@ * Windows 1. Установите Strawberry Perl . -2. Откройте отно командной строки. +2. Откройте окно командной строки. 3. В окне командной строки перейдите в каталог с модулем. 4. В окне командной строки выполните следующие команды: 1. perl Build.PL diff --git a/recodenc-gui.pl b/recodenc-gui.pl index 0ee76d0..0a5f956 100755 --- a/recodenc-gui.pl +++ b/recodenc-gui.pl @@ -81,7 +81,7 @@ BEGIN binmode(STDERR, ":encoding(console_out)"); *PROGNAME = \'Recodenc'; -*VERSION = \'0.6.0'; +*VERSION = \'0.6.1'; # загрузка конфигурации my $conf_path_dir; # имя каталога файла конфигурации diff --git a/recodenc.pl b/recodenc.pl index 878d6c1..0212906 100755 --- a/recodenc.pl +++ b/recodenc.pl @@ -43,7 +43,7 @@ @ARGV = map {decode('locale', $_)} @ARGV; *PROGNAME = \'Recodenc'; -*VERSION = \'0.6.0'; +*VERSION = \'0.6.1'; *ACTION_ENCODE = \1; *ACTION_DECODE = \2; *ACTION_TRANSLIT = \3;