Страница произведения
Войти
Зарегистрироваться
Страница произведения

Руководство по Фокалу


Автор:
Жанр:
Изобретательство
Опубликован:
22.04.2025 — 23.04.2025
Читателей:
1
Аннотация:
Нет описания
Предыдущая глава  
↓ Содержание ↓
↑ Свернуть ↑
  Следующая глава
 
 

Частенько встречается так-же КОИ-8, активно использовавшаяся у нас годах в

семидесятых — девяностых. (По ГОСТу 19768-74, а семибитная КОИ-7 аж еще с

шестидесятых: ГОСТ 13052-67.) В UNIX`e (а Linux это тоже разновидность UNIX`а)

это стандарт де-факто. Братья-славяне давятся кодировкой 855, тоже ДОС`овской,

где славянских (в том числе не нужных в русском языке) букв больше чем в 866,

но расположены они весьма неудобно, а псевдографика — не вся. Комитет ИСО

было расстарался эти самые кодировки хоть как-то стандартизировать, и пытаясь

угодить всем, как тот слон из басни, учинил их аж шестнадцать штук. Но в

основном для себя любимых. А для нас — ISO 8859.5 старшая часть которой почти

без изменений и вошла в уникод, но сама по себе что-то не больно используется.

Ну так там псевдографики вообще нету.

Общее у всех перечисленных в том, что все они — расширения так называемой

ASCII. И все (кроме уникода) — восьмибитные. Семибитный ASCII у них у всех -

четыре младших "страницы" по 32 символа. (В семибитном КОИ-7 — три.)

Представляет так же некоторый интерес ебздиковская производная ДКОИ,

использовавшаяся на машинах ряда ЕС-ЭВМ. (Сдуру содранных с IBM-360/370, что

небезызвестный Дейкстра назвал величайшей победой запада в холодной войне.)

И совсем уж древняя и кстати безымянная кодировка (хотя кое кто называет её

"УПП") по ГОСТ 10859-64, интересная в частности тем, что её можно было

использовать не только в семибитном, но и в шести, пяти и даже четырёхбитном

вариантах. Но содержащая только заглавные буквы и заточенная под Алгол-60.

Заслуживает упоминания так же некая кодировка "МИК" минского НИИ ЭВМ. И та,

которая используется в яблочной машинке "Макинтош". (Две последние — расширение

ASCII, а две первые — свои собственные.)

Из кодировок, не содержащих русские буквы, интерес представляют например

Radix-50, включающая всего 40 символов, но позволяющая упаковать их по три

штуки в два байта. Еще телетайпетная МТК-2 (вот там то как раз русские буквы

есть) и разные виды "транслита"...

Можно подумать, что вон мол буржуи хорошо со своей ASCII устроились...

Впринципе сначала действительно так и было задумано. Однако, латинский алфавит

недостаточен ни для одного языка, который его использует: там всегда есть

дополнительные буквы, при чем у всех языков — разные. (А кому дополнительные

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

пишут они иероглифами, которые и изображают непроизносимыми комбинациями из

латинских букв. Или таки получаются слова, но совершенно другого языка — вот

например как для аглицкого.) А в этом самом ASCII место после латинского

алфавита, где бы эти дополнительные буквы можно было бы разместить (хотя и

только для кого-то одного), уже давно занято другими, тоже нужными символами.

Без которых например в языке Си ну никак не обойтись. Да и сама эта ASCII,

действительно организованная более-менее разумно — вовсе не американская, как

нас всех уверяют, а предположительно у фашистов стащена. Их нативная,

известная как "ебздик" (EBCDIC) просто безобразна и тоже существует минимум в

шести несовместимых друг с дружкой вариантах. В точности как и сам аглицкий

язык: исходный примитивизм (та самая "простота", которая хуже воровства),

желание здесь и сейчас облегчить себе жизнь, неизбежно порождает хаос и

переусложнение на следующем уровне.

Но потом появился "уникод"... Типа решили взять вообще все какие ни есть

символы и пронумеровать двадцатиразрядными (!) числами. Нет, сначала — 16-и

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

пяти тысяч (!) позиций для самых редких китайских иероглифов может и не

хватить... (Хотя, полагаю, скорее беспокоились о заделе на будущее.) Но как ни

тужились, смогли заполнить только около ста тысяч позиций из этого миллиона...

А сначала вообще пытались тупо узаконить имеющий место хаос, просто выделив под

каждую буковку два байта и разместив в одном её код, а в другом — номер

национальной кодировки. Наплевав на то, что большинство из них различается

всего несколькими символами...

Так что двух байтов под символ уникода видите-ли мало, а четыре — явный

перебор, да и расточительно, но бывает. Ну так оно еще может быть как старшим

так и младшим байтом вперёд! А главное — в старших байтах частенько — ноль.

В общем — маразм крепчал...

Однако, разумные люди нашлись и там — придумали то, что называется Утф-8,

вещь вполне приличную, но увы — существенно неравномерную...

Однако, это только способы записи (хранения, передачи) вот этих вот номеров

символов. Не путать с самой нумерацией! А вот сама она — гигантизм и

узаконенный хаос, пусть даже и немножко причесанный: нормальный человек

способен с толком использовать дай бог тысячу символов; ну китайцу,

предположим, нужно раз в десять больше. Но там штук сорок одних только

звёздочек (тогда как нужна только одна), да и псевдографики невесть сколько

сортов, а вот кое-чего, самого, казалось бы, очевидного — нет! Нет, я понимаю,

что им надо на что-то тратить избыточную производительность: кризис

перепроизводства всё нарастает... (Это когда даже если все ходят в рванье и

впроголодь, полки в магазинах всё равно ломятся. Потому что потребителям,

которые всё это и производят, денег раздают меньше, чем стоит то, что они

произвели...)

Но эти растратчики ресурсов нам не указ! Нам нужно совсем другое...

Вот в данном конкретном случае нам нужна такая (промежуточная,

вспомогательная) кодировка, которая была бы не просто перечнем символов (как

тот же уникод), а позволяла бы легко распознавать их "сорта", а так же

преобразовывать их друг в дружку. Вот например как в КОИ-8, где все виды

букв — в одном и том же алфавитном порядке. В результате определить тип

буквы — по одному или двум старшим битам, а преобразовать — их изменением.

Что предполагает такую же "страничную" организацию. Но во-первых пусть

каждый алфавит занимает свою страницу целиком. (А не как в ASCII.) А во-вторых

пусть страница будет не 32, а 64 символа. Что, полагаю, будет достаточно не

только для любого алфавита со всеми его необходимыми расширениями (но без

излишеств!), но и для слоговых типов письменности. Для алфавитных письменностей

в первой половинке страницы разместим "основные" буквы, а во второй -

"дополнительные", типа нашей Ё, которыми, если что, можно пожертвовать,

преоброазовав их в "основные". А все полезные значки, включая цифры, скобки и

прочие знаки препинания — в "нулевую" страницу. При чем из "слепых" символов

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

не для управления удалённым оборудованием, как в той же ASCII...

Это:

— пробел — для разделения слов

— ПС (перевод строки — n) для разделения строк

— ** (код 0х17) "конец абзаца" — для разделения абзацев (параграфов)

— ПФ (прогон формата — f) для разделения страниц

а так же:

— ГТ (горизонтальная табуляция — t) для разделения полей (ячеек таблицы)

— ВТ (вертикальная табуляция — v) её аналог, но по вертикали

и кроме того:

— ВШ (возврат на шаг — b) для наложения символов

— ВК (возврат каретки — r) для наложения строк

— ** неразрывный пробел нулевой ширины — для образования лигатур

— ЗВ (звонок a) для привлечения внимания (хотя по-мне он тут лишний)

— АР2 (авто-регистр 2, он же "эскейп") начало сложных многосимвольных команд

Еще на нулевой странице предполагается заразервировать три кода (2 3 и 4)

под начало и конец текста, а так же конец файла, пакета или что там у нас?...

И еще три (отличающиеся от них одним битом) — под команды переключения страниц.

(Символы с кодами 3 и 4 — это небезызвестные Cntrl/Ц и Cntrl/Д.)

Вот предположим у нас линия связи. Некоторые, работающие в асинхроном

режиме, например по "старт-стопному" протоколу, постоянно находятся в

состоянии когда нету передачи данных. А те, которые в синхронном — должны

постоянно что-то передавать в линию, обозначая "наличие несущей". (Пропадание

которой означает обрыв канала связи.) Ну так в этом качестве передаётся

неразрывный пробел нулевой ширины с кодом 0х16, начало собственно передачи

обозначается символом с кодом 1, а конец (и переход вот вот в такой режим,

только поддержки синхронизации) — соответственно 4.

Начало файла обычно изображать не надо, надо только конец: некоторые

файловые системы выделяют место с точностью не до байта (как UNIX), а только

до блока. Поэтому код 4 там востребован, а код 1 — нет.

Но полученный из линии код 1 как правило указывает на начало заголовка

пакета. Тело пакета начинается с кода 2 и завершается кодом 3, после чего

например хвостовик с контрольной суммой. (Это от пользователя, сидящего за

терминалом, ничего такого не требуется, а вот от оборудования — да.) А мы

будем считать, что код 3 (Cntrl/Ц) переводит систему в некий управляющий

режим. Где можно, например, указать тип кодировки, или способ её упаковки, или

что-то еще нужное и важное. (Вдруг например китайцы захотят перевести систему

в режим три байта на иероглиф...) После чего код 2 опять переведёт систему в

состояние текста.

А три (из четырёх в нулевой странице ASCII) команды — резервируются для

переключения страниц: да, описываемая кодировка — сугубо вспомогательная,

условно девяти— или даже двенадцати-битная (я еще не решил) и "наружу"

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

нынче хождение восьмибитном байте помещается только четыре страницы. Три из

которых предполагается сделать переключаемыми. (А нулевая — соответственно нет.)

На "непереключаемый случай" в качестве страницы 1 — псевдографика, а 2 и 3

— "рукописный" (системный) алфавит — русские буквы в алфавитном порядке в

первой половине страницы и несовпадающие с ними по написанию латинские — во

второй на тех же позициях. Плюс специфические буквы разных языков в свободных

позициях, в соответствии с их произношением. (Буква Q — под Щ, как и

полагается.) Однако для заглавных и строчных букв это соответсвие несколько

отличается...

— Ишь размечтался! Когда это еще понадобится? А вспомогательная кодировка

нужна уже сейчас. И сейчас в ней пока что шесть страниц: по две на алфавит,

псевдографика и вышеописанная "нулевая". (Куда упихано всё нужное из ASCII,

что не буква — на вышеописанных принципах.)

Однако, к такой кодировке требуется и средство проверки/изменения вот этих

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

обозначаем одной буквой, то как указать в каком направлении выполнить

преобразование (из указанной в текущую или наоборот) — это еще можно придумать:

например из указанной в текущую — строчная буква, а наоборот — заглавная.

А вот если попутно понадобится сделать что-то еще... (Например все заглавные

буквы в перекодируемом тексте сделать строчными.) Не знаю как это обозначить

так, чтобы самому не запутаться. Вот и нечего огород городить: промежуточная

кодировка с вышеописанными свойствами и честные побитовые операции!

Забегая вперёд, скажем, что это средство уже таки есть. Даже два.

— два средства?

— ну вот так оно получилось — ей богу совершенно неожиданно. Сперва "реверс"

понадобился: чтобы байтики в обратном порядке переставить. А так же битики в

каждом байте указанного (маркером) фрагмента. (Заметим, это РАЗНЫЕ операции:

чаще всего нам надо переставлять буковки — превратить "ТОПОР" в "РОПОТ",

а "ROMA" что значи Рим в "AMOR", что значит любовь. Но бывает что надо и

битики...)

Вот и ввели две операции 'r' и 'R' — для каждого байта в отдельности и

для всего фрагмента разом. Ага. А если (в форме '%r' и '%R') передать им еще и

аргумент... А вот ничего путного в этом случае не получается. (Группами по N

байт, чтобы один вид уникода в другой преобразовывать... Глупости! Префикс

повторения нам на что?!) В общем решили поручить временно безработному '%r'

выполнять те самые побитовые операции. Указав такую операцию аргументом. Но

куда конь с копытом, туда и рак с клешнёй! Тоже безработный '%R' возжелал

делать всё то же самое, но не с каждым байтом персонально, а разом со всем

фрагментом!

А еще были сделаны встроенные операции 'о' и 'О' ("объединение"), которые

сами по себе ничего не делают — только предписывают следующей после них

операции поиска не различать большие и маленькие буквы, а так же русские и

латинские. Их вариант '%о' и '%О' — тоже указывает разные вещи. Например

включить или выключить (с аргументами + и -) это самое отождествление навсегда.

(И если например включено '%о+' то теперь 'о' его временно выключает.) А с

числовым аргументом (типа '%о123') указывают вид уникода: входного — единицы и

выходного — десятки. Сейчас (а это уже не первый вариант) 1 — utf-8, 2 — utf16,

4 — utf32... А три? Три — трёхбайтный вариант! Далее 5 — опять utf16, но другим

концом вперёд. То было младшим, а это — старшим. 6 и 7 — аналогично. 8 и 9

сейчас тоже utf16, но без т.н. "суррогатных пар", каковые в данном случае

просто игнорируются, но это не окончательно: про транслит забыли!... А вот

нулевое значение — признак, что пока неизвестно. То есть для входного-то

по умолчанию utf-8 (а для выходного — такой же как входной), но если встретися

символ с кодом FEFF (неразрывный пробел нулевой ширины) вот тут мы и узнаем...

Для входного. А вот как узнать, что мы узнали — увы, пока не придумано.

Очень даже придумано! *<%О> (Но 'О' здесь — обязательно О-русская).

Забегая вперёд: это так называемый "шаблон". Он же "регулярное выражение".

При чем шаблон — "генерирующий". Потому что является правым аргументом

операции вставки * (звёздочка). А конструкция %О в нём вот как раз и генерит

текст типа "%о123", указывающий установленный сейчас вид входного и выходного

уникода. (А если бы 'О' была латинская — выдавало бы что-то типа: "%о+" или

"%о-" — состояние признака объединения заглавных букв со строчными. Или "%О+"

"%О-" — -//— русских с латинскими, буде 'О' была заглавная.)

Других встроенных операций (не перекодировок) на настоящий момент пока тоже

не придумано. Но — договорились... (Кто и с кем? Ну естественно я с самим

собой!) ...Что пусть все перекодировки обозначаются исключительно русскими

буквами: маленькая (строчная) — к нам, в текущую кодировку, которая, напомню,

у нас ДОС`овская — 886-я. А заглавная — соответственно от нас в этой буквой

Предыдущая глава  
↓ Содержание ↓
↑ Свернуть ↑
  Следующая глава



Иные расы и виды существ 11 списков
Ангелы (Произведений: 91)
Оборотни (Произведений: 181)
Орки, гоблины, гномы, назгулы, тролли (Произведений: 41)
Эльфы, эльфы-полукровки, дроу (Произведений: 230)
Привидения, призраки, полтергейсты, духи (Произведений: 74)
Боги, полубоги, божественные сущности (Произведений: 165)
Вампиры (Произведений: 241)
Демоны (Произведений: 265)
Драконы (Произведений: 164)
Особенная раса, вид (созданные автором) (Произведений: 122)
Редкие расы (но не авторские) (Произведений: 107)
Профессии, занятия, стили жизни 8 списков
Внутренний мир человека. Мысли и жизнь 4 списка
Миры фэнтези и фантастики: каноны, апокрифы, смешение жанров 7 списков
О взаимоотношениях 7 списков
Герои 13 списков
Земля 6 списков
Альтернативная история (Произведений: 213)
Аномальные зоны (Произведений: 73)
Городские истории (Произведений: 306)
Исторические фантазии (Произведений: 98)
Постапокалиптика (Произведений: 104)
Стилизации и этнические мотивы (Произведений: 130)
Попадалово 5 списков
Противостояние 9 списков
О чувствах 3 списка
Следующее поколение 4 списка
Детское фэнтези (Произведений: 39)
Для самых маленьких (Произведений: 34)
О животных (Произведений: 48)
Поучительные сказки, притчи (Произведений: 82)
Закрыть
Закрыть
Закрыть
↑ Вверх