| Предыдущая глава |
↓ Содержание ↓
↑ Свернуть ↑
| Следующая глава |
(реверс) и О о (отождествление). Реверс — перестановка в обратном порядке
байтов (для заглавной буквы) и битов в байтах (для строчной). О-большая это
отождествление русских и латинских букв для одной следующей после неё операции
поиска, а о-маленькая — заглавных и строчных.
Нашлась так же возможность разрешить синтаксическое недразоумение. Имеющее
место при необходимости преобразовать символы из кодировки X в кодировку Y
напрямую. (А не сначала в текущую, а потом из неё, что чревато потерей
некоторых символов, которые есть и в X и в Y, но в текущей — отсутствуют.)
И заключающееся в том что для этого надо две буквы, в то время как "встроенный
формат" Х в операторе Write %Х это вообще-то одна...
А чтобы две: Write %_%Хy здесь %Х в отличии от просто Х, это типа
обращение к подпрограмме. Оказывается, у нас в форматном выражении еще и
подпрограммы есть! Типа %N или даже %{NNN}, где N — одна цифра — номер регистра,
а NNN — выражение, значение которого — номер программной строки. И этой
подпрограмме видите-ли тоже аргумент причитается! Ровно один. Вот вторая буковка
в %Хy и служит таким аргументом. Но впринципе это может быть что угодно, включая
текстовую константу "..." или составную операцию (...). Оно не выполняется а
именно что передаётся. И там в подпрограмме оно может быть как выполнено %%
так и использовано как текст #%. (Аргумент только один потому, что будь их
несколько, это бы потянуло за собой такие проблемы!... Прежде всего
синтаксические.)
При передаче "..." или (...) теряет ограничивающие его скобки или кавычки.
В шаблоне, где %Х — "встроенный шаблон" %N — тоже аналог обращения к
подпрограмме. Но уже без параметров — проблемы синтаксиса: оно бы должно
выглядеть примерно так же как и в форматном выражении, но здесь для всех других
символов главный баламут всея Фокала % работает как "экранирующий".
Я было написал, что мол выше имеет место некоторая путанница с заглавными
и строчными буквами... Но нет: и Write %_%XY; и Write %_%Xy; и Write %_%xY;...
это всегда X -> Y. А вот если: Write %xY; то это две операции: сначала
X -> ДОС а потом ДОС -> Y. По другому — действительно устроить путаницу...
(Не забываем, что X Y здесь — условности: обе буквы, обозначающие
кодировки, обязательно русские.)
Однако, проблема преобразования символов разрешением вышеописанного
синтаксического недоразумения вовсе не исчерпывается. И включает не только
преобразование между кодировками (желательно без потери символов), или,
например, попутное превращение строчных букв в заглавные, или латинских в
эквивалентные им русские — что частный случай, но и общий, а это может
оказаться всё что угодно, что вообще придёт в голову...
С частным случаем впринципе должна справиться пара из анализирующего и
генерирующего шаблонов. (Для того и придуманы.) Но это "вид снаружи", а вот
внутри-то как? Неужто сооружать матрицу преобразований из каждой X в каждую
Y по полному графу?! (А при добавлении новой?... Слишком громоздко получается!)
Можно конешно выбрать промежуточную (или "базовую") Z и тогда для каждой X
будет нужна только пара: X -> Z и Z -> X. А все преобразования для общего
случая делать вот с этим вот Z.
Частный случай реализуется без проблем, если в качестве базовой кодировки
взять достаточно мощную, например уникод, что все обычно и делают. А вот для
преобразований он решительно не годится! Хранить в таком виде тексты — еще
куда ни шло, но вот обрабатывать... Да и главный фокаловский принцип разумной
(и даже минимальной) достаточности там безобразно нарушается! Мало того что
оный уникод гиперизбыточен, ну так при этом еще и недостаточен: под сотню
разных фасонов стрелочек, звёздочек и прочей чепухи; безсистемно насована куча
букв А-латинская с дополнительными элементами; штабеля каких-то непонятных
закорючек. Ну и конешно же не просто редкие, а особо редкие китайские
иероглифы, известные дай бог паре десятков человек... Но за то нету того, что
было в древней семибитной (!) кодировке УПК и заменить это — нечем! А то что
этого теперь нет нигде и вот как-то обходимся... Ну так кодировка, поставившая
себе целью включать в себя ВСЁ (и зарезервировавшая под это столько позиций,
что до сих пор удалось заполнить едва десятую часть) обязана в первую очередь
включить в себя ВСЁ, что было в предшествующих ей кодировках, и уж только
потом... Не пожелала — под нож её! (А не нарушай собственных принципов!) Но
это-то таки еще можно бы простить, а вот безсистемность — нет. Вот те самые
рассованные по разным углам буквы A-латинские со всякими дополнительными
штрихами и черточками, U и E с разного вида точками, но почему-то не такими же,
как у A или I...
Но таки люди (при чем далеко не худшие люди!) проделали большую работу,
пронумеровав (почти) все возможные символы... А результат их труда нам годится
только как справочник — какие вообще символы бывают. И в конечном итоге
отправится на свалку. При чем сразу по причинам нескольких уровней. Верхний из
которых: она создана с позиций евроцентризма, несёт в себе гнилую идеологию
отказа от разума, работает на глобализацию по-американски. Что, впрочем, вполне
соответствовало духу времени. Однако, времена УЖЕ меняются — всё это ДОЛЖНО
уйти в прошлое. Потому что если не справимся, если не сможем всё это туда
"уйти", тогда хана человечеству: вымрет в течении примерно трёх-четырёх-пяти
поколений! (Всё перечисленное — симптомы: человечество смертельно больно, но
лечить его кроме нас больше некому...) Вот — дожили до "интересных" времён из
китайского ругательства, они же — "точка бифуркации". После которой либо
глобализация по-русски (через промежуточное состояние "мир панрегионов"
обещанное нам Школьниковым), либо отсутствие на Земле человека дважды разумного.
А точка бифуркации интересна как раз тем, что "цивилизационная траектория"
вдруг начинает зависеть в том числе и от совершенно ранее незначимых факторов...
Это когда буквально взмах крыла бабочки способен породить ураган. Или наоборот.
За сим, решая свои локальные задачи, удерживаем в виду и вот эти глобальные
цели и факторы... В том числе базовую (промежуточную) кодировку конструируем
свою собственную — не просто не оглядываясь на, но и...
Базовая (промежуточная) кодировка должна быть организована СИСТЕМАТИЧЕСКИ.
За образчик можно взять, например, нашу КОИ-8, сделанную как расширение ASCII.
Или скорее вот того давнего стандарта ИСО, где остаток страницы после
латинского алфавита оставался всё еще незаполненным. Там кодовое пространство
делится на страницы равного размера и эквивалентные друг дружке буквы стоят в
них на одних и тех же позициях. Поэтому преобразование их друг в дружку
осуществляется максимально просто: изменением номера страницы. В том числе
между заглавными и строчными — инверсией одного бита.
Там, кстати, (в полной версии КОИ-8) есть и псевдографика. И тоже
организованная куда более систематически чем в ДОС`овской кодировке, которой
приходится пользоваться. Приходится потому что деваться некуда: место под
ДОС`овскую псевдографику закреплено аппаратно без возможности его изменения.
Но нам всё это не на экран выводить... Так что псевдографику сделаем тоже
систематической, как в более приличных кодировках, нежели ДОС`овская.
И, кстати, проблема "забоя" (символа из всех единиц) у нас не стоит.
Но базовым таки должен быть русский алфавит, как более мощный, а отнюдь не
латинский. Который в минимальной комплектации (как у ИСО или в ASCII) никому
недостаточен. Кроме тех, для кого он совсем не годится. (Это не парадокс: они
пишут сделанными из его букв иероглифами, а алфавитная письменность обязана
быть фонетической!) Поэтому всяк, кому его навязали, пытался хоть как-то
приспособить вот это для своего языка... (А его именно что навязывали — как
один из компонентов гибридной войны, в том числе и на наших глазах и памяти.)
И поскольку каждый выёживался как мог, на свой лад — получилось "кто в лес,
кто по дрова". Так что "в максимальной комплектации" латиница — жуткий бардак!
Попытки хоть как-то это упорядочить, предпринимавшиеся например всё тем же
комитетом ИСО, так и не привели ни к чему путному. Так в ИСО-8859 из 16
кодировок 10 (!) — для латиницы. А индийскую "девангари" — (она у них под
номером 12) ИСО вообще не потянул. Думаю, что знаю почему: не смогли впихнуть
то, что пихали всем, в том числе и в ту, что якобы для нас: ИСО-8859.5
Прикинем: символ — 8-и-битный; 2^8 = 256, или 8 страниц по 32 символа.
Кодировок они сделали 16, это еще 4 бита. Надо ли так понимать, что задумана
была единая 12-и битная кодировка? Возможно, но вряд ли. Потому что в страницы
0-3 каждой из них, они всем впихнули одну и ту же "священную корову" ASCII; в
четвертую (тоже абсолютно для всех) — непонятно для кого предназначенный набор
дополнительных управляющих символов. Начинающийся с символа-заполнителя (с
кодом 80). При том, что в нулевой странице ASCII уже есть символ-заполнитель
с кодом 16. (Передаётся по "синхронной" линии связи в то время пока ничего
нет — чтобы не потерять синхронизацию и обозначить наличие несущей. Байт 16
это 00010110 — два импульса: единичной и двойной ширины, дополнительно
позволяющий определить младшим или старшим битом вперёд передаётся информация.
А 80 это 10000000 — один импульс, разве что с краешку. А значит при
старт-стопном способе передачи старшим битом вперёд — сольётся со стартовым
импульсом, а вот байт 16 — нет.) То есть для каждой кодировки у них всего три
страницы. В первую из которых они неизвестно зачем еще впихнули всем (в том
числе и нам) два символа управления переносами: "неразрывный пробел" с кодом
A0, запрещающий перенос или другой разрыв строки, как будто соединённые им
слова — одно слово. И еще "мягкий дефис" символ нулевой ширины (с кодом AD),
наоборот разрешающий перенос вот в этом месте и оказавшись последним в строке,
как раз и превращающийся в знак переноса. (И это при том, что у них же во
втором комплекте управляющих символов уже есть две команды с примерно таким же
смыслом.) Чтобы их впихнуть, русские буквы, без Ё как раз и занимающие всю
страницу целиком, сдвинули на пол страницы, нарушив принцип формирования этой
кодировки. Но таки в три страницы уложились. А вот с девангари такой фокус у
них не получился. Письменность эта — слоговая, а слогов — много. И хотя
заглавных и строчных букв там нет — в уникоде занимает четыре страницы, а не
три, как русский с дополнительными символами для славянских языков. (Чтобы
букве Ё не так скушно было...)
В общем решено: все остальные алфавиты размещаем в порядке русского,
по-возможности по фонетическому принципу. Но страницы по 32 символа маловаты.
Следующий размер при двоичной системе счисления — 64. Этого должно хватить и
для силлабариев (аналогов алфавита для слоговой письменности). Например в
заново переоткрытой Чудиновым русской рунице, символов — штук пятьдесят.
(Правда очень любящих объединятся в лигатуры.) Но там для каждой согласной в
основном только два варианта — с "передним" и "задним" гласными (смягчающим
согласную и не смягчающим) — под тогдашнюю, еще весьма нечеткую и грубую
артикуляцию. (А все слоги тогда были исключительно "открытые".) А вот в
индийской девангари хотя и только 47: 33 согласных и 14 гласных, но
"согласные" — это сами слоги (парами: обычный и придыхательный, типа ГА-ГХА,
КА-КХА...), а гласные — как одиночные, так и модификаторы к ним (чтобы
получилось ГО-ГХО, ГЕ-ГХЕ, ГИ-ГХИ...), так что возможно еще столько-же. Это
если по-минимуму. А то в кодировке у них — еще куча лигатур, типа — с разной
длительностью... Но уж коли мы таки взялись обозначать не картинки, как в
уникоде, а смысл — надо смотреть, как там с сочетаниями согласный-гласный:
если все слоги исключительно открытые, то отдельных модификаторов не требуется,
а вот если нет... Возможны варианты.
Итак, пространство распределяем 64-символьными страницами. (Пусть даже
пока что они будут редкозаполненными.) Сдвиг на пол страницы, как это учинил
ИСО по отношению к русскому алфавиту — не допускается. Но страница по мере
надобности может "складываться" на четыре четвертушки. (Вот как для "нулевой"
страницы, где все скобки должны быть друг под дружкою. Или для псевдографики,
которой тоже четыре вида.) Или пополам — вот как для алфавитов: под основные
символы и под дополнительные (у нас это только Ё), которыми, если что, можно
пожертвовать, преобразовав их в основные. Для чего Ё должна стоять в той же
позиции что и Е, а не где попало, как у ИСО. (Они её тупо впихнули первой
после своего любимого неразрывного пробела A0, и только потом стали подбирать
ей компанию...)
Итого, рассматриваемая промежуточная кодировка (долго думал как её
назвать, но оказывается в программном коде она уже называется "И-64" потому
что страницы, в отличии от ASCII по 64 символа), содержит по две страницы на
алфавит (которых пока только два); страницу под псевдографику и "нулевую"
страницу. Она же "системная" — самая главная: должна содержать минимально
необходимый, но по-возможности функционально полный набор средств для
достижения тех же целей, что преследовались и при построении кодировки ASCII,
но с другими приоритетами. Для ASCII главное было ручное управление сетью и
оконечным оборудованием. Поскольку вычислительной техники для этого тогда
просто небыло. Далее — представление текстов, включее их форматирование -
разбиение на слова, строчки и абзацы (параграфы). Для чего и тогда и до сих
пор используются некоторые из команд управления оконечным оборудованием. Всё
остальное — по остаточному принципу: спасибо что хоть буквы в алфавитном
порядке... И цифры. Все прочие символы набросаны как попало...
Для И-64 приоритеты обратные. Своим алфавитным порядком, как это сделали в
КОИ-8, больше не жертвуем. Управление сетью и оборудованием возлагаем на
драйверы... Так: считаем, что в дошедшем до нас потоке символов экранирующие
символы (АР1), если они там были — уже изъяты (или при передаче будут
автоматически вставлены) и нам без надобности. Так же как и команда "начало
пакета" с кодом 01. (Для файла — это его физическое начало.) А вот конец
пакета (Ctrl/D обозначающий в UNIX`е конец файла) и конец тела пакета (Ctrl/Ц),
а так же его начало — конец заголовка (Ctrl/Б), нам очень даже могут
| Предыдущая глава |
↓ Содержание ↓
↑ Свернуть ↑
| Следующая глава |