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

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


preobr( )

Цепочка преобразований в строке

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


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

Оба параметра и возвращаемое значение — строки.
          $text — преобразуемая строка,
          $zamname — имя преобразования, по умолчанию пустое (то есть преобразование отсутствует или оно упомянуто в самой строке $text).

 Действие:  Если в строке $text содержится имя преобразования zamname, заключённое в скобки <: и >, то это преобразование применяется к остатку строки после этих скобок рекурсивным вызовом preobr( ) с параметром $zamname = zamname.

Пример 0. preobr('aaa') == 'aaa' .
     Пример 1. preobr('aaa', 'PR') == zam('aaa', 'PR').
     Пример 2. preobr('aaa<:PR1>bbb') == 'aaa'.preobr('bbb','PR1').
     Пример 3. preobr('aaa<:PR2>bbb<:PR1>ccc') == 'aaa'.preobr('bbb'.preobr('ccc','PR1'),'PR2').
     Пример 4. preobr('<p class=g><:hipbezud><:slav2civ><:beztitl>о_у=чн~къ') == '<p class=g>ученикъ'.
     Последний пример использует имена конкретных преобразователей. В этом нём церковнославянское слово в формате HIP подвергается трём преобразованиям — раскрытию титл, переводу в гражданскую орфографию и снятию ударений. Как можно уяснить из примера 3, преобразования выполняются в порядке, обратном записи.

     !! Не одно и то же:  zam('aaa', 'PR')  и  preobr('<:PR>aaa'). Разница возникает, если в результате преобразования PR строки 'aaa' в строке появятся упоминания других преобразователей. Процедура zam( ) в этом случае закончит работу, а преобразование preobr('aaa') будет выполнено повторно, при этом преобразовываться будет участок только до подстроки, заданной глобальной переменной $TSNtagEnd.

Этот механизм позволяет организовывать свёртку цепочек преобразований. Для последовательности преобразований «<:pr3><:pr2><:pr1>» можно завести сокращенную запись «<:pr>». Для этого нужно создать файл pr.zmn, который, согласно Формату файла замен, может состоять только из двух строк:
     «&&
       &&<:pr3><:pr2><:pr1>
».

 Обработка ошибок. 
     Если после скобки, открывающей имя преобразователя, в строке не оказывается заключающей имя преобразователя скобки, а также если отсутствует заданный преобразователь, в строку вставляется сообщение об ошибке, и позднейшие преобразования этой строки не выполняются, заменяясь сообщением-предупреждением.

 Доступные глобальные переменные 

 global $TSNpreoBeg — вид скобки, предваряющей имя преобразователя. По умолчанию <:
     global $TSNpreoEnd — вид скобки, заключающей имя преобразователя. По умолчанию >
     global $TSNtagEnd — строка ограничитель для повторного (нерекурсивного) вызова преобразования (для защиты фрагментов в преобразовании смешанного набора).
     global $TSNerrFont — строка задания шрифта для вставляемого сообщения об ошибке. По умолчанию равна "<font face=sans-serif color=red  size=3>".

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


См. Готовые преобразователи