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

Фокал - часть 3 (пишется)


Автор:
Опубликован:
24.05.2026 — 24.05.2026
Читателей:
1
Аннотация:
Типа продолжение к "Фокал снаружи и внутри"
Предыдущая глава  
↓ Содержание ↓
↑ Свернуть ↑
  Следующая глава
 
 

буквами такой простой фокус к сожалению не получается. Очень уж от кодировки

зависит...

Но таки в файловых системах вариант регулярных выражений — крайне

упрощенный (можно даже сказать "выхолощенный"). Это как если бы в выражении

арифметическом почему-то нельзя было использовать скобки. И функции. Но ведь

можно же! А здесь у нас этих скобок — аж два вида: <...> и [...]

Кстати, напоминаю: регулярное выражение потому и "шаблон", что

"сопоставляется" с фрагментом строки, определяет — подходит он под него или

нет. Ну так конструкция <...> сопоставляется когда сопоставились все её

элементы, а конструкция [...] — когда один, любой. (Следующие после него даже

и не рассматриваются). А элементом может быть любая конструкция, в том числе и

вот такая. В результате чего они могут вкладываться друг в дружку как матрешки

на любую глубину. Как впрочем и подвыражения в арифметических выражениях...

Повторюсь: главная фенька шаблонов — префиксы повторения! Здесь * и ? не

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

сделать это следующему после них элементу. Так что вместо просто звёздочки

придётся написать *. а *А соответственно сопоставится с любым количеством

букв А идущих подряд — от того места, до куда дошло сопоставление.

Но количество повторений может быть и ограничено: {N} или {N,M} — ровно N,

или >= N но <= M где N и M — фокаловские выражения. Если отсутствуют то для

первого — "от 0", а для второго — "до бесконечности". Так что * это {,} а

? это {,1}. Есть еще + (плюс) эквивалентный {1,} и — (минус) предписывающий

данному префиксу не "жадный", а "ленивый" алгоритм сопоставления. Их смысл

ясен из названия и проявляется, когда элементов с префиксами повторения в

шаблоне несколько...

Впрочем, хватит и одного. Например в тексте _____аББаБа___ ленивый *-[Ба]Б

выделит только аБ в то время, как жадный *[Ба]Б всё аББаБ целиком.

Среди вышеупомянутых встроенных шаблонов есть так же %Д %В %И %К %У

изображающие заглавные русские буквы в других кодировках и %д %в %и %к %у

изображающие строчные (дД — в ДОС`овской, она же CP-866, вВ — в виндовой, она

же CP-1251, иИ — ИСО-8859.5, кК — КОИ-8 а так же уУ — пресловутый уникод.)

На предмет преобразования символов между кодировками: типа в анализирующем

шаблоне указана одна, а в парном к нему генерирующем — другая. Только русские,

потому, что латинские там везде как в ASCII. (Который содран с давнего

стандарта ISO. А его похоже спёрли у фашистов: климат — великая вещь! Казалось

бы — что такого, подумаешь... А ничего, что в европах даже при ручной обработке

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

для этого надо было десять крестьян? И результаты труда вот этих лишних

работников накапливаются из года в год, из века в век... Или же с приятностью

проедаются... Немцы смогли это грамотно использовать, приняв во всех своих

землях еще аж в конце XVIII века, когда и Германии-то еще небыло, законы об

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

остальные европеи. Но лет через сто — к концу XIX века это уже была "страна

хорошистов и отличников" — по очень многим пунктам "впереди планеты всей".

Вплоть до того, что две науки: мировая (читай англо-саксонская) — отсталая,

и немецкая — передовая. А Первую Мировую немцы проиграли (уже практически

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

договорняка вишь им захотелось... Возвращаясь к нашей теме: еще до Второй

Мировой у них уже была телетайпетная сеть с автоматической коммутацией,

сопоставимая по эффективности с нынешним интернетом. Вот нулевая страница

ASCII и заполнена в основом командами управления этой сетью. Ну и телетайпом

немножко...) Так что шаблона %L для них всех вполне достаточно. Вот если и

когда будет какая либо экзотика, типа собственной ("нативной"?) американской

кодировки с неприличным названием ЕБЗДИК или её вариант с русскими буквами

ДКОИ, активно использовавшийся в серии ЕС-ЭВМ, сдуру содранной с идиотской

IBM-360, что, помнится, еще Дейкстра назвал величайшей победой запада в

холодной войне!...

Разумеется, в самом форматном выражении преобразования символов между

кодировками обозначаются теми же самыми буквами. (И тоже только русскими.)

При чем заглавная буква указывает преобразование "на экспорт" — из текущей

кодировки в указанную, а строчная — из указанной в текущую. (Которая — всегда

ДОС`овская.) Преобразуется тот фрагмент строки, что под маркером. Но префиксы

на это тоже действуют.

Из других "встроенных форматов" (кроме перекодировок) пока только R r

(реверс) и О о (отождествление). Реверс — перестановка в обратном порядке

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

отождествление русских и латинских букв для одной следующей после неё операции

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

Нашлась так же возможность разрешить синтаксическое недразоумение. Имеющее

место при необходимости преобразовать символы из кодировки 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, запрещающий перенос или другой разрыв строки, как будто соединённые им

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



Иные расы и виды существ 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)
Закрыть
Закрыть
Закрыть
↑ Вверх