ТЕХНОЛОГИЯ СМЕШАННОГО НАБОРА

Реализация на PHP: Основные функции


zam( )

Простые и рекурсивные замены в строке

Функция zam( ) применяет к строке преобразование, указанное именем. Имя преобразования указывает на заготовленный массив замен или пользовательскую функцию.
     Поддерживается библиотека общеупотребительных файлов замен.


    Использование: 
$text1 = zam($text,$zamname)
$text1 = zam($text,$zamname,$zamenstr,$razdel)

Все параметры и возвращаемое значение — строки.
          $text — преобразуемая строка,
          $zamname — имя преобразования,
          $zamenstr — строка с заменами в формате файла замен (по умолчанию пуста).
          $razd — разделитель строк в $zamenstr (по умолчанию ";").

 Действие:  Способ преобразования строки $text определяется способом вызова.
     1. Короткий формат вызова использует преобразование, уже зарегистрированное в памяти под именем, которое содержит параметр $zamname. Если же это первый вызове функции с таким начением $zamname, то преобразование перед применением находится как текстовый массив замен (в пользовательском или системном каталоге) или как PHP-функция:
     1.1. Если существует файл с именем $zamname (расширение по умолчанию .zmn), то преобразование — это массив замен для стандартной PHP-процедуры strtr( ), записанный в текстовом файле (см. ниже «Формат записи»).
     С массивом в файле может связываться метка повтора, в таком случае замены применяются снова, пока она остаётся в строке, а применение замен не оказывается безрезультатным (меняет строку).
     С массивом замен могут быть заданы также начинательная и/или окончательная последовательность символов, которые будут добавляться соответственно, в начало и конец текста перед началом работы.

Пример 1.1: $text1=zam($text,"slav!UCS")
     Здесь преобразуется церковнославянский текста (в формате HIP) в шрифтовую кодировку UCS через набор замен из файла slav!UCS.zmn.

1.2. Если файла с заданным именем не существует, то в качестве преобразования берётся PHP-функция, имя которой равно первому слову строки $zamname (до первого пробела или конца строки). В качестве первого параметра функция принимает $text, в качестве второго — остаток строки (после первого пробела, в частности пустую строку).

Пример 1.2: $text1=zam($text,"itemshow RI").
     Если файла "itemshow RI.zmn" не существует, то результат равен itemshow($text,"RI").

2. Второй формат (точнее: если строка $zamenstr непуста), задаёт преобразование по списку замен, заданному непосредственно — в строке $zamname. Символ $razd разделяет отдельные замены, как конец строки в файле замен. Обязательный параметр $zamname содержит имя этой системы замен для последующих коротких вызовов (в первом формате вызова).

Пример 2: $text1=zam($text,'упрощение','|w|о|;|_е|е|;|v"|и|',';').
     Набор замен выписан явно. После этого вызова, его можно использовать повторно коротким вызовом: zam($text2,'упрощение');

 Глобальные переменные 

global $ZAM_default_url — доступ к системной библиотеке файлов замен. По умолчанию "http://znamen.ru/tsn/".

global $ZAMurl — путь к папке файлам замен, где они ищутся прежде, чем в системной библиотеке. По умолчанию "".

global $ZAMerr — код завершения исполнения. Складывается из кодов замечаний:
           1 : в тексте остались метки повтора массива замен
2 : массив замен взят из системной библиотеки
4 : в массиве замен повтор
8 : в массиве замен неоднозначность (оставлено первое соответствие заменяемому)
16 : ошибка в строке файла замен: нет второго разделителя (строка игнорируется)
32 : ошибка в строке файла замен: нет третьего разделителя (строка игнорируется)
64 : нет файла замен с именем $zamname
128 : нет ни файла замен, ни PHP-функции с именем $zamname

 Доступ к функции:  <? include "http://znamen.ru/tsn/zamlib.php"; ?>

 Формат файла замен 
     Формат строки с заменой:      |«заменяемое»|«заменяющее»|.      Вместо «|» (разделителя) может быть любой видимый символ, один и тот же для одной замены, не входящий ни в «заменяемое», ни в «заменяющее».
     Каждая замена занимает в файле одну строку. При необходимости ввести в заменяемое или заменяющее конец строки, он вводится в строку четырьмя символами: \r\n.
     Игнорируются: пустые строки, строки с пустым заменяемым и части строк после третьего в них разделителя.
     
Особое значение имеют несколько (от 1 до 3) подряд первых строк файла, если они начинаются с "&&". В этом случае их остаток, начиная с третьего символа, не игнорируется, а служит источником следующих параметров массива замен:
     – в строке 1 —
метки повтора,
     – в cтроке 2 — начинательной строки,
     – в строке 3 — окончательной строки.


См. Готовые файлы замен