Персональный сайт Александра Тауениса » Переводчик телеграмм 2.1 — работы начаты

Переводчик телеграмм 2.1 — работы начаты

В связи с прошествием большей части экзаменов, начаты плавные работы над новой версией Переводчика телеграмм. За 3 года разработки (с августа 2010 г.), после слияния с Переводчиком четырёх проектов (Txt2Morse и DeMorser в 09.2010, InterDic в 10.2011 и eTeleKey в 02.2013) проект оброс кучей плохо читаемого и глючного кода. Сейчас я убираю ~70% кода, буду переписывать с нуля + рефакторить имеющийся хороший код. Интерфейс программы и парсер словарей (InterDic 2.0.2) останется прежними.
Версию 2.1.0 надеюсь выпустить через неделю-другую после полного окончания экзаменов. В ней будет распознавание кода Морзе. Задел к этому сделан ещё в версии 1.2 — это перспективный формат MRC, рассматриваемый как гипотетический вывод сырья от АЦП. В версии 2.1 он будет доработан и станет основным. Линейка 2.0 тоже будет обновлена версией 2.0.3, созданной на базе 2.1 Beta (также как было с 1.6.3-1.6.5=1.7b1-1.7.2) и 2.0.4 на базе релиза 2.1.0.

 

Унитаз


Сюда я выкладываю (вывожу из себя) интересные фрагменты говнокода. Затем они удаляются (спускаются в канализацию) из кода.

Перевод латиницы в кириллицу

Public Function En2Rus(InText As String) As String 'English в кирилицу
Dim outt As String
outt = LCase(InText) 'переводим всё в нижний регистр
outt = Replace(outt, "ch", "ш") 'должно быть в самом верху
outt = Replace(outt, "a", "а")
outt = Replace(outt, "b", "б")
outt = Replace(outt, "w", "в")
outt = Replace(outt, "g", "г")
outt = Replace(outt, "d", "д")
outt = Replace(outt, "e", "е")
outt = Replace(outt, "v", "ж")
outt = Replace(outt, "z", "з")
outt = Replace(outt, "i", "и")
outt = Replace(outt, "j", "й")
outt = Replace(outt, "k", "к")
outt = Replace(outt, "l", "л")
outt = Replace(outt, "m", "м")
outt = Replace(outt, "n", "н")
outt = Replace(outt, "o", "о")
outt = Replace(outt, "p", "п")
outt = Replace(outt, "r", "р")
outt = Replace(outt, "s", "с")
outt = Replace(outt, "t", "т")
outt = Replace(outt, "u", "у")
outt = Replace(outt, "f", "ф")
outt = Replace(outt, "h", "х")
outt = Replace(outt, "c", "ц")
outt = Replace(outt, "o", "ч")
outt = Replace(outt, "q", "щ")
outt = Replace(outt, "x", "ь")
outt = Replace(outt, "y", "ы")
outt = Replace(outt, "e", "э")
outt = Replace(outt, "u", "ю")
outt = Replace(outt, "a", "я")
En2Rus = outt
End Function

Выверт булевого значения наизнанку (boolA = Not boolB)


Public Function InvertBool(inbool As Boolean) As Boolean
If inbool = True Then
InvertBool = False
Else
InvertBool = True
End If
End Function

Чтение файлов

Public Function ReadFSO(filename As String) As String
'Чтение ASCII файлов через FSO
'Нужно reference "Microsoft Scripting Runtime" для использования ReadFSO и SaveFSO
'Использовать так: ReadFSO "имя_файла"
'Функция возвращает содержимое файла.
'В случае отсутствия файла возвращается "FILE_IS_NOT_IN_THE_WORLD"
Dim myFSO As Scripting.FileSystemObject
Dim myTS As TextStream
Set myFSO = New Scripting.FileSystemObject
If myFSO.FileExists(filename) Then
Dim myFile As File
Set myFile = myFSO.GetFile(filename)
Set myTS = myFile.OpenAsTextStream(ForReading)
ReadFSO = myTS.ReadAll
myTS.Close
Else
ReadFSO = "FILE_IS_NOT_IN_THE_WORLD"
End If

Запись реализована аналогично, через функцию SaveFSO. 🙂

Чтобы окно с кодом не мигало в taskbar’е


'If frmMorse.Visible = True Then
' frmMorse.SetFocus 'чтобы окно с кодом...
' Me.SetFocus '...не мигало в taskbar'е
'End If

Найдено в закомментированном виде в давно неиспользуемой функции-обработчике события tmrUpdMrs.Timer (не используется с версии 2.0, атавизм из Morsedit 1.х)

Парсер формата MCF

В версии 1.7 планировался ввод нового формата файлов на основе MRC и INI — MCF (Morse Code File). Но из-за ограничений парсера INI он так и не дошёл до версии 1.7.0. Но код парсера я всё-таки нашёл (случайно).
'If REtest(LCase(fiNa), ".mcf$") = True Then 'Формат MCF 1.0.
' 'MCF = Morse Code File
' MsgBox "Вы открыли файл в опытном формате MCF. При работе возможны ошибки.", vbInformation, "Опытная функция Morsedit"
' Dim tempVar As String
' tempVar = IniLib.ReadINI("mcf", "data", fiNa)
' tempVar = Replace(tempVar, "111", "-") 'тире
' tempVar = Replace(tempVar, "1", ".") 'точки
' tempVar = Replace(tempVar, "0000000", Space(7)) 'пробелы (7 точ. тиш.)
' tempVar = Replace(tempVar, "000", Space(3)) 'между буквами
' tempVar = Replace(tempVar, "0", "") 'лишняя тишина
' tempVar = Replace(tempVar, "1", "") 'лишний сигнал
'
' tempVar = Replace(tempVar, " ", Space(7)) ' bugfix
' txtBox.Text = tempVar
' IsChanged = False 'ничего не изменяли, просто загрузили файл
' lblFiNa.Caption = fiNa 'указываем в заголовке окна имя
' GoTo DoTransl
'End If

Встроенный словарь специальных сокращений

Разработан и внедрён в версии 1.3.2. Выведен из обращения в одной из версий линейки 1.7.х/1.6.х. Мало того, что эти коды пишутся слитно (спецкод «BK» не равнен «BK», ибо !BK! = «-···-·-«, а BK = «-··· -·-«), от чего они в Morsedit 1.3-1.7 помечались восклицательными знаками по краям, так и названы Q-кодами. 🙂 Спецкоды в английской Википедии

'Встроенный словарь Q-кодов
'Dim NewT As String
'NewT = txtBox.Text
'If mnuProsigns.Checked = False Then
' NewT = Replace(NewT, "!BK!", "!Перерыв!")
' NewT = Replace(NewT, "!CL!", "!Закрытие станции!")
' NewT = Replace(NewT, "!CT!", "!Начало сообщения!")
' NewT = Replace(NewT, "!DO!", "!Shift to wabun code!")
' NewT = Replace(NewT, "!KN!", "!Вызываю станцию!")
' NewT = Replace(NewT, "!SK!", "!Конец!")
' NewT = Replace(NewT, "!SN!", "!Понял!")
'Else
' NewT = Replace(NewT, "!Перерыв!", "!BK!")
' NewT = Replace(NewT, "!Закрытие станции!", "!CL!")
' NewT = Replace(NewT, "!Начало сообщения!", "!CT!")
' NewT = Replace(NewT, "!Shift to wabun code!", "!DO!")
' NewT = Replace(NewT, "!Вызываю станцию!", "!KN!")
' NewT = Replace(NewT, "!Конец!", "!SK!")
' NewT = Replace(NewT, "!Понял!", "!SN!")
'End If
'txtBox.Text = NewT

В основе «словаря» лежит наглый копипаст с переводом из английской википедии.

Пасхальные яйца Morsedit 1.7, ограниченно Codemorser 2.0

-В текстовое поле введите фразу «ты дурак», затем откройте «Правка-Поиск/замена». Будет сказано «Эй там, на стуле! Сам ты дурак!»
-Введите в текстовое поле фразу «WHAT HATH GOD WROUGHT?», затем откройте «Вид-Выбор шрифта». Вопросительный знак исчезнет.
-Поклавишный перевод. Активация сей «фичи»:
1) «Правка>Настройки»;
2) Указать интервал автоперевода равным нулю («0»);
3) «Ок».
-Перевод для сторонних нужд. Если в каталог к Morsedit.exe (1.x) поместить файл «in.mrs», то Morsedit 1.x сделает перевод в текст, сохранит его в «out.txt» и закроется.

В версии 2.1/2.0.3 пасхалки будут убраны.



5 комментариев к “Переводчик телеграмм 2.1 — работы начаты”

  1. Из изначальных 57КБ признано хорошим кодом лишь 18,8КБ. Процесс переписи с нуля начат.

  2. Сейчас код вырос всего на 17КБ (почти в два раза), но функциональность версии 2.0.2 почти что восстановлена. На днях планируется внутренний тест 2.0.97, затем ещё две альфа версии. Позже выпущу (уже публично) первую бета-версию: 2.1b1. На базе кода 2.1b2 будет выпущена версия 2.0.3. Затем 2.1RC с последующим небольшим обновлением до 2.1.0 / 2.0.4.

  3. Времени на разработку 2.1 мало, но старый код на 90% переписан. Посмотреть на новый Codemorser можно тут: http://yadi.sk/d/q14udBOx5QvBY
    Ставить поверх 2.0.2. Язык только английский!!! Прочитайте «Известные баги
    .txt»!!!

  4. Закончена версия Alpha-2: http://yadi.sk/d/3uEdCfRi5SNwS
    Ставить поверх 2.0.2. Есть русская и английская локализации. Украинской пока нет. Работает распознавание кода Морзе, возвращена поддержка формата MRC.

  5. Закончена версия Alpha-3. Ссылка на инсталлятор: http://yadi.sk/d/qQq7sxQU5VmeS
    В целом, из release-blocking вещей следующее:
    -Нет украинской локали
    -Нет справки (CodemorserHelpRu.7z)
    -Надо поработать над дизайном ключа
    На неделе (возможно, завтра) будет сразу два релиза — 2.1 Beta 1 и вполне рабочая версия 2.0.3. Затем 2.1 Beta 2 и, затем, 2.1.0. «Классической версии» Переводчика 2.0.4, скоре всего, не будет.

Оставить комментарий

Защита от спама * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.