LINUX.ORG.RU

яролит - реализация на javascript

 , , ,


0

1

Думаю, кто-то помнит тему Новая версия Яролита (форк ГОСТ 16876-71, табл 2)

На страничке http://программирование-по-русски.рф/яролит.яргт/ можно попробовать ещё более новую версию реализации яролита. Наконец-то я сделал обратное, а не только прямое преобразование.

Кодировка на данный момент такова:

Русский алфавит:

a b v g d e jo zh z i jj k l m n o p r s t u f kh c ch sh shh jq y q eh ju ja

(Соответствует ГОСТ 16876-71, таблица 2, кроме Ь = Q и Ъ = JQ - в госте эти значки превращаются в небуквенные литеры)

Английские буквы:

xe - переключение в английский режим. В частности, «xeRussia» раскодируется как «Russia», а не как «Руссиа».

В английском режиме «x» кодируется как «xx», а «w» - как «ww»

xr - переключение обратно на русский

Суммарно, JAxeRxrJA == ЯRЯ

Не ASCII, не кириллица = xuNNNNNNx, где NNNNNN - 16-ричный код символа.

Исходники функций прямого и обратного преобразования - https://bitbucket.org/budden/ppr/src/master/static/jarolit/

Буду благодарен за код ревью. Пока речь не идёт об упаковке в тот или иной «пакет». Наиболее интересно на данный момент, как сделать код более быстрым. Например, имеет ли смысл делать case по коду символа, а не по строковым значениями? С точки зрения правильности код выглядит правильным, но если увидите баги - пишите.

★★★★★

JAxeRxrJA == ЯRЯ

Скажи честно, ты брат близнец саахрикту, или его вторая личность, как Джекилл и Хайд?

gremlin_the_red ★★★★ ()

Ещё немного и запилил бы транслятор яра в js. Был бы неплохой такой вброс ИМХО.

ados ★★★★★ ()

Традиционно предложу тебе заняться делом и не противодействовать глобализации.

t184256 ★★★★★ ()
Ответ на: комментарий от Alve

программирование-по-русски.рф и всё понял.

Действительно, вот помню я в русской музыкальной школе учился, так меня злило засилье итальянщины, эти непонятные крещендо, пьяно, аллегро, а ноты... до, си, ля бимоль, какого ля!? Вот если бы все было на русском, то весь бы мир слушал Аллу Пугачеву. Тем кто не верит только один пример, американцы взяли и перевели на английский ноты: A, B, C, D, E, F, G и теперь все знают Леди Гагу.

Aber ★★★★ ()
Последнее исправление: Aber (всего исправлений: 1)
Ответ на: комментарий от ados

Что ж, в сравнении с метапрогом что угодно лучше.

anonymous ()
Ответ на: комментарий от den73

Вот к примеру, транслит яндекса:

v chashchah yuga zhil by citrus? Da, no falshivyy ekzemplyar!

Мягкий знак они скромно пропустили, а «ы» от «й» никак не отличается. Т.е. исходную надпись на русском языке восстановить не получится.

А вот у меня как:

V chashhakh juga zhil by citrus? Da, no falqshivyjj ehkzempljar!

Можно взять любой ГОСТ и убедиться, что среди них нет ни одного взаимно однозначного отображения кириллицы на латинские буквы. Эту-то дыру закрывает транслит зайцева, яролит и другие аналоги. Но мой лучше всех, т.к. практически это багфикс для старого советского ГОСТа, в котором не было поставлено требования отображать буквы буквами. И ЕМНИП именно этот ГОСТ всё ещё используется в Германии для переводов документов с РЯ, в т.ч. актуально для тех, кто эмигрирует. Знаки препинания нельзя вставить в email или имя учётной записи.

Но предмет обсуждения не в том - яролит существует уже не меньше года. Кому он нужен - тому нужен. Кому не нужен - тому не нужен. Предмет обсуждения в том, что было бы неплохо взглянуть на код и посмотреть, как его можно улучшить.

den73 ★★★★★ ()
Последнее исправление: den73 (всего исправлений: 2)
Ответ на: комментарий от den73

Я к сожалению взглянул на код и это ######### просто, хотя бы от switch-ей избавься (твой радикализм в плане выбора имен видимо не излечить)

Lancelot ()

Просто невероятный труд, сравнимый с открытием Америки Колумбом,лол

deadplace ()

Используя Open Source, мы минируем свою страну и создаём предпосылки для небывалого разгула шпионажа.

О, ты ещё и К Спермским пользуешься, и на пыню молишься, 100%

deadplace ()

Язык - важная составная часть национальной идентичности. Русский язык несколько столетий боролся за главенство в России и достиг его только в советское время. Но сейчас русский уступает место английскому. Это уже произошло в науке и технологии, это происходит в образовании. Если ничего не делать, то скоро элита общества станет двуязычной или даже англоязычной.

Ты не путай жопу с пальцем, т.е. культуру и технический прогресс.

deadplace ()

Перепощу пару гениальных мыслей

Что даёт тема обсуждения уязвимостей? Американские технологии - это решето, потому что сделано тяп ляп и «нужно было ещё вчера». Как и многие другие ИТ, потому что область сравнительно молодая, и от уязвимостей люди не гибнут (если центрифуги не крутить). Этого в интернете навалом, есть агрегаторы уязвимостей. Недавно на ЛОРе в новостях пробегала очередная ошибка в ЦПУ интел. Смысл обсуждать?

Основная беда от уязвимостей такова, что мы полностью находимся под контролем АНБ. Вот вчера краем глаза увидел заголовок новости о том, что МТС заплатит США почти миллиард долларов за какое-то мошенничество. Как это происходит?

Сегодня изучает Rust, а завтра родину продаст Итак, уважаемые коллеги, на этом форуме я бы хотел спросить о вашем опыте в Rust. Не секрет, что несмотря на убогость и сложность этого языка многие рассматривают его как альтернативу для C

deadplace ()
Последнее исправление: deadplace (всего исправлений: 1)

яролит - реализация на javascript

Ну наконец-то!

theNamelessOne ★★★★★ ()

15 лет ждал /шутка/.

Не унывай den мы буржуям еще покажем «кузькину мать».

PS: Если по делу - молодец.

anonymous ()
Ответ на: комментарий от anonymous

Sorry /настроение хорошее/.

Ты давай не скромничай там.
Пора китайским и японским товарищам помочь.

anonymous ()
Ответ на: комментарий от Lancelot

хотя бы от switch-ей избавься

А как правильнее? По идее, нормальный компилятор (а v8 - компилятор) строит дерево или хеш-таблицу по вариантам.

Вот тут показано https://jsperf.com/switch-vs-object-function, что через объект с полям не так и быстрее.

Массив, индексированный кодом буквы? Я собираюсь портировать этот код под разные языки, в т.ч. 1С, и меня тут смущают две вещи:

Во-первых, массив - это глобальная переменная, т.е. я должен буду в каждом языке сделать надёжный способ инициализации, а пользователь должен не забыть сделать инициализацию, и не попасть при этом в проблемы параллельности.

Во-вторых, коды букв кириллицы, вообще говоря, зависят от кодовой страницы. Значит, массив надо инициализировать не просто константой, а делать какое-то тестовое вычисление. Код заметно вырастет в размере.

Чем меньше в коде разных конструкций, тем надёжнее и проще процесс портирования.

den73 ★★★★★ ()
Ответ на: комментарий от den73

Придумал пример, яснее показывающий убожество яндекс-транслита:

белый конь == belyy kon == белыы кон

А вот ГОСТ 7.79-2000 (один из вариантов):

bely`j kon`

Здесь присутствуют знаки препинания, которые нельзя вставить в E-mail, имя пользователя и которые плохо лезут в URL.

В Яролите это будет belyjj konq

Не вполне элегантно, зато взаимно однозначно.

den73 ★★★★★ ()
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от Aber

так меня злило засилье итальянщины, эти непонятные крещендо, пьяно, аллегро, а ноты... до, си, ля бимоль, какого ля!? Вот если бы все было на русском...

Ноты древней Руси ©, кодировку «духовноскрепных кракозябр» заказывай у ТС'а.

quickquest ★★★★★ ()
Ответ на: комментарий от den73

я должен буду в каждом языке сделать надёжный способ инициализации, а пользователь должен не забыть сделать инициализацию, и не попасть при этом в проблемы параллельности.

Инициализацию при запуске модуля программы можно сделать в любом языке (static поле в ООП, модуль объекта в 1С, и т.д.).

Во-вторых, коды букв кириллицы, вообще говоря, зависят от кодовой страницы.

Так вариант со switch от этого не спасает.

monk ★★★★★ ()
Ответ на: комментарий от den73

В Яролите это будет belyjj konq

q это провал. А ГОСТ то делали не дураки. Адекватно изобразить мягкий знак в рамках ascii по-другому никак.

bread ()
Ответ на: комментарий от monk

Так вариант со switch от этого не спасает.

Почему не спасает? Я не помню, что такое char в Си, т.е. можно ли сделать в Си switch по буквам кириллицы. Но в Js должен спасать. Код посмотри.

den73 ★★★★★ ()
Ответ на: комментарий от Lancelot

Не понял мысль про конфиг. Он тут не нужен - нужно при инициализации один раз узнать коды кириллицы и забить их в массив. Но в целом соглашусь, что switch - это не идеал. Если когда-нибудь руки дойдут - сделаю лучше.

Для латиницы коды фиксированы, можно сделать двоичный поиск (через сравнение кодов). Но не факт, что это будет быстрее, чем взять код латинской буквы и дальше использовать switch. Во всяком случае, для нормальных компилируемых языков switch должен быть быстрее.

den73 ★★★★★ ()
Ответ на: комментарий от anonymous

Они на битбукете, и хочу переехать на гитлаб. Что, все приличные люди обязаны отдать свои исходники на хранение в Микрософт?

den73 ★★★★★ ()
Ответ на: комментарий от bread

Если ГОСТ тебя устраивает - то пользуйся им. Если понадобится вставить русское слово без ошибок туда, где оно не помещается, например, в адрес E-mail или в имя пользователя Linux, то придётся пересмотреть свои понятия об адекватности. Транслит Зайцева появился из попытки качественно решить задачу работы с томографами - туда надо вбивать фамилию пациента, и для этого нужна латиница.

В Транслите Зайцева белый конь = belihy konjh. Может оно и ничего, но это далеко от любого ГОСТа. А Яролит - это почти в точности один из ГОСТов.

den73 ★★★★★ ()
Последнее исправление: den73 (всего исправлений: 3)

Дистиллированная шиза, конечно. С тройной степенью очистки.

anonymous ()
Ответ на: комментарий от den73

Ты пишешь

Во-вторых, коды букв кириллицы, вообще говоря, зависят от кодовой страницы. Значит, массив надо инициализировать не просто константой, а делать какое-то тестовое вычисление. Код заметно вырастет в размере.

Где у тебя в варианте со switch это тестовое вычисление? Или чем switch { case «я»: ... } отличается от select[«я»] ?

можно ли сделать в Си switch по буквам кириллицы

Если char/wchar, то можно. А если UTF-8, то вообще по буквам нельзя.

monk ★★★★★ ()
Ответ на: комментарий от monk

Где у тебя в варианте со switch это тестовое вычисление?

Но ведь я же строку ему для выбора предлагаю, а не код буквы. Я представляю дело так, что чрезмерно умный компилятор JS мог бы увидеть, что вот есть длинный switch, и дальше по встроенному шаблону сгенерировать какую-то хеш-функцию для него. При этом он сам бы внутри себя динамически и на данной платформе вычислил бы коды букв, он ведь JIT. То, что ключами являются строки, а не числа, не должно смутить хороший компилятор, ведь это же не Си, а JS. На самом деле это довольно легко проверить, но мне лень :)

den73 ★★★★★ ()
Ответ на: комментарий от monk

А если UTF-8, то вообще по буквам нельзя.

Т.е. в Си мне придётся разбирать UTF-8 и ещё иметь дело с обработкой некорректного UTF-8. Ну ладно, что ж поделать. Но всё равно можно получить код буквы, а уже дальше по нему делать switch. Другое дело, что в офтопике есть несколько видов строк, в которых коды кириллицы наверняка отличаются, т.е. нужно делать более одной версии кода.

den73 ★★★★★ ()
Ответ на: комментарий от den73

Другое дело, что в офтопике есть несколько видов строк, в которых коды кириллицы наверняка отличаются

Юникодные коды одинаковы во всём мире. То есть нормальный метод — получить массив символов UTF32 и по нему делать switch.

monk ★★★★★ ()
Ответ на: комментарий от den73

Вот ещё одна сравнивалка хеш-таблиц с swith, но тут опять же вызываются функции, что явно смазывает всю картину.

https://jsperf.com/switch-vs-hash/3

У меня получается одинаково. Оказывается, для создания теста достаточно залогиниться через github. Попробую-ка.

den73 ★★★★★ ()
Ответ на: комментарий от monk

А как же Windows-1251? Или ты хочешь сказать, что я должен utf преобразовать в UCS и тем самым избавиться от влияния кодовой страницы?

den73 ★★★★★ ()
Последнее исправление: den73 (всего исправлений: 2)
Ответ на: комментарий от den73

Т.е. в Си мне придётся разбирать UTF-8 и ещё иметь дело с обработкой некорректного UTF-8.

Это в любом языке так. То, что в некоторых это скрыто в стандартной библиотеке ничего по сути не меняет.

В Си тоже есть libunicode

monk ★★★★★ ()
Ответ на: комментарий от den73

Что, все приличные люди обязаны отдать свои исходники на хранение в Микрософт?

Ne objazany, konechno, no ved` Github - eto nastojashij lider v kachestve hranilish`a ishodnikov. A vse eti potugi komu-to chto-to dokazat` putem hranenija ishodnikov v drugih hranilisha`h vyzyvajut smeh skvoz` slezy.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.