|
(*~\Глагол\Отделы\Иное~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**) ОТДЕЛ Буква;
(*============================================================================*)
(* НАЗНАЧЕНИЕ: распознавание и преобразование букв *)
(*============================================================================*)
ПОСТ
(* номера допустимых азбук *)
русскаяАзбука = 0;
украинскаяАзбука = 1;
белорусскаяАзбука = 2;
дореформеннаяАзбука = 3;
латинскаяАзбука = 4;
(* известные буквы - буквы из азбучных цепочек в допустимых азбуках *)
(* 0 *) русскиеЗаглавные = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
русскиеСтрочные = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
(* 1 *) украинскиеЗаглавные = "АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯʼ";
украинскиеСтрочные = "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя’";
(* 2 *) белорусскиеЗаглавные = "АБВГДЕЁЖЗІЙКЛМНОПРСТУЎФХЦЧШЫЬЭЮЯʼ";
белорусскиеСтрочные = "абвгдеёжзійклмнопрстуўфхцчшыьэюя’";
(* 3 *) дореформенныеЗаглавные = "АБВГДЕЁЖЗИІЙКЛМНОПРСТУФХЦЧШЩЪЫЬѢЭЮЯ#0472#0474";
дореформенныеСтрочные = "абвгдеёжзиійклмнопрстуфхцчшщъыьѣэюя#0473#0475";
(* 4 *) латинскиеЗаглавные = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
латинскиеСтрочные = "abcdefghijklmnopqrstuvwxyz";
(* сюда ещё бы добавить греческую азбуку! *)
ВИД
(* вид "ПризнакиИзвестнойБуквы" - набор параметров принадлежности
переменной вида ЗНАК к одной из допустимых азбучных цепочек *)
Вид = НАБОР
азбуки:МНОЖ;(* множество допустимых азбук с этой буквой: {0}/{1}/{2}/{3}/{4} *)
заглавная,строчная:ЗНАК; (* пара букв из азбучных цепочек *)
КОН;
(* глобальные переменные для задач отдела Буква, не видные в других отделах *)
ПЕР
рПризнакиИзвестнойБуквы:РЯД 128 ИЗ Вид;
всегоБукв:ЦЕЛ; (* сколько занято букв в ряду <рПризнакиИзвестнойБуквы> *)
рНомераБукв:РЯД 10000H ИЗЯЧЦЕЛ;(* ряд из номеров букв в ряду <рПризнакиИзвестнойБуквы> *)
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Азбуки(знак:ЗНАК):МНОЖ;
(* Принадлежность <знак> к множеству допустимых азбук: {0},{1},{2},{3},{4} *)
УКАЗ
ВОЗВРАТ рПризнакиИзвестнойБуквы[рНомераБукв[ВЦЕЛ(знак)]].азбуки
КОН Азбуки;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Известная-(этойБуквы:ЗНАК):КЛЮЧ;
(* ВКЛ, если <этойБуквы> является известной буквой *)
УКАЗ
ВОЗВРАТ Азбуки(этойБуквы) # {} (* не пусто *)
КОН Известная;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Русская-(этойБуквы:ЗНАК):КЛЮЧ;
(* ВКЛ, если <этойБуквы> является русской буквой *)
УКАЗ
ВОЗВРАТ русскаяАзбука В Азбуки(этойБуквы)
КОН Русская;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Украинская-(этойБуквы:ЗНАК):КЛЮЧ;
(* ВКЛ, если <этойБуквы> является украинской буквой *)
УКАЗ
ВОЗВРАТ украинскаяАзбука В Азбуки(этойБуквы)
КОН Украинская;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Белорусская-(этойБуквы:ЗНАК):КЛЮЧ;
(* ВКЛ, если <этойБуквы> является белорусской буквой *)
УКАЗ
ВОЗВРАТ белорусскаяАзбука В Азбуки(этойБуквы)
КОН Белорусская;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Дореформенная-(этойБуквы:ЗНАК):КЛЮЧ;
(* ВКЛ, если <этойБуквы> является русской дореформенной буквой *)
УКАЗ
ВОЗВРАТ дореформеннаяАзбука В Азбуки(этойБуквы)
КОН Дореформенная;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Латинская-(этойБуквы:ЗНАК):КЛЮЧ;
(* ВКЛ, если <этойБуквы> является латинской буквой *)
УКАЗ
ВОЗВРАТ латинскаяАзбука В Азбуки(этойБуквы)
КОН Латинская;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Заглавная-(буква:ЗНАК):КЛЮЧ;
(* ВКЛ, если <буква> является заглавной буквой *)
УКАЗ
ВОЗВРАТ буква = рПризнакиИзвестнойБуквы[рНомераБукв[ВЦЕЛ(буква)]].заглавная
КОН Заглавная;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ВЗаглавную-(буква:ЗНАК):ЗНАК;
(* Переводит <буква> в заглавную букву *)
ПЕР
номер:ЦЕЛ; (* номер в ряду <рПризнакиИзвестнойБуквы> (из 128 наборов) *)
УКАЗ
номер:=рНомераБукв[ВЦЕЛ(буква)];
ЕСЛИ номер = 0 ТО
ВОЗВРАТ буква
КОН;
ВОЗВРАТ рПризнакиИзвестнойБуквы[номер].заглавная
КОН ВЗаглавную;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ВСтрочную-(буква:ЗНАК):ЗНАК;
(* Переводит <буква> в строчную букву *)
ПЕР
номер:ЦЕЛ;
УКАЗ
номер:=рНомераБукв[ВЦЕЛ(буква)];
ЕСЛИ номер = 0 ТО
ВОЗВРАТ буква
КОН;
ВОЗВРАТ рПризнакиИзвестнойБуквы[номер].строчная
КОН ВСтрочную;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ДобавитьБукву(заглавнаяБуква,строчнаяБуква:ЗНАК; номерАзбуки:ЦЕЛ);
ПЕР
номер:ЦЕЛ; (* номер в ряду <рПризнакиИзвестнойБуквы> (из 128 наборов) *)
УКАЗ
номер:=1;
ПОКА номер < всегоБукв ВЫП
ЕСЛИ рПризнакиИзвестнойБуквы[номер].заглавная = заглавнаяБуква
ТО (* такая буква уже есть в других азбуках *)
рПризнакиИзвестнойБуквы[номер].азбуки:=
рПризнакиИзвестнойБуквы[номер].азбуки+{номерАзбуки};
ВОЗВРАТ
КОН;
УВЕЛИЧИТЬ(номер)
КОН;
(* новая буква в ряду <рПризнакиИзвестнойБуквы> *)
рПризнакиИзвестнойБуквы[номер].азбуки:={номерАзбуки};
рПризнакиИзвестнойБуквы[номер].заглавная:=заглавнаяБуква;
рПризнакиИзвестнойБуквы[номер].строчная:=строчнаяБуква;
рНомераБукв[ВЦЕЛ(заглавнаяБуква)]:=УЗК(УЗК(номер));
рНомераБукв[ВЦЕЛ(строчнаяБуква)]:=УЗК(УЗК(номер));
УВЕЛИЧИТЬ(всегоБукв)
КОН ДобавитьБукву;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ДобавитьАзбуку(рЗаглавные-,рСтрочные-:ЦЕПЬ; номерАзбуки:ЦЕЛ);
(* Добавляет в ряд <рПризнакиИзвестнойБуквы> из <рЗаглавные> и <рСтрочные>
все знаки из азбучной цепочки и <номерАзбуки> *)
(* Добавляет в ряд <рНомераБукв> новый <номер>=<всегоБукв> *)
ПЕР
место:ЦЕЛ; (* <место> в азбучной цепочке <рЗаглавные> и <рСтрочные> *)
УКАЗ
ОТ место:=0 ДО РАЗМЕР(рЗаглавные)-2 ВЫП
ДобавитьБукву(рЗаглавные[место],рСтрочные[место],номерАзбуки)
КОН
КОН ДобавитьАзбуку;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Подготовить; (* Подготовить ряд <рПризнакиИзвестнойБуквы> *)
УКАЗ
(* 0-я буква - пустышка *)
всегоБукв:=1;
ДобавитьАзбуку(русскиеЗаглавные, русскиеСтрочные, русскаяАзбука);
ДобавитьАзбуку(украинскиеЗаглавные, украинскиеСтрочные, украинскаяАзбука);
ДобавитьАзбуку(белорусскиеЗаглавные, белорусскиеСтрочные, белорусскаяАзбука);
ДобавитьАзбуку(дореформенныеЗаглавные,дореформенныеСтрочные,дореформеннаяАзбука);
ДобавитьАзбуку(латинскиеЗаглавные, латинскиеСтрочные, латинскаяАзбука);
КОН Подготовить;
(*-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-*)
УКАЗ
Подготовить
КОН Буква.
|
|