|
ТЕХНОЛОГИЯ СМЕШАННОГО НАБОРАРеализация на PHP: Основные функции preobr( ) Цепочка преобразований в строке Функция preobr( ) производит последовательность преобразований строки, которые могут быть заданы и в самой строке. Под преобразованием понимается то же, что у функции zam( ). |
Использование: | $text1 = preobr($text)
$text1 = preobr($text,$zamname) |
Оба параметра и возвращаемое значение — строки.
$text — преобразуемая строка,
$zamname — имя преобразования, по умолчанию пустое
(то есть преобразование отсутствует или
оно упомянуто в самой строке $text).
Действие: Если в строке $text содержится имя преобразования zamname, заключённое в скобки <: и >, то это преобразование применяется к остатку строки после этих скобок рекурсивным вызовом preobr( ) с параметром $zamname = zamname.
Пример 0. preobr('aaa') == 'aaa' .
!! Не одно и то же: zam('aaa', 'PR') и preobr('<:PR>aaa').
Разница возникает, если в результате преобразования PR строки
'aaa' в строке появятся упоминания других преобразователей.
Процедура zam( ) в этом случае закончит работу,
а преобразование preobr('aaa') будет выполнено повторно,
при этом преобразовываться будет участок только до подстроки,
заданной глобальной переменной $TSNtagEnd.
Этот механизм позволяет организовывать свёртку цепочек преобразований.
Для последовательности преобразований «<:pr3><:pr2><:pr1>»
можно завести сокращенную запись «<:pr>».
Для этого нужно создать файл pr.zmn, который, согласно
Формату файла замен, может состоять только из двух строк:
Обработка ошибок.
Доступные глобальные переменные
global $TSNpreoBeg — вид скобки, предваряющей имя
преобразователя. По умолчанию <:
Доступ к функции include "http://znamen.ru/tsn/tsnlib.php";
Пример 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, преобразования выполняются в порядке, обратном записи.
«&&
&&<:pr3><:pr2><:pr1>».
Если после скобки, открывающей имя преобразователя, в строке не оказывается
заключающей имя преобразователя скобки, а также если отсутствует
заданный преобразователь, в строку вставляется сообщение об ошибке,
и позднейшие преобразования этой строки не выполняются,
заменяясь сообщением-предупреждением.
global $TSNpreoEnd — вид скобки, заключающей имя
преобразователя. По умолчанию >
global $TSNtagEnd — строка ограничитель для повторного (нерекурсивного)
вызова преобразования (для защиты фрагментов
в преобразовании смешанного набора).
global $TSNerrFont — строка задания шрифта для вставляемого
сообщения об ошибке.
По умолчанию равна "<font face=sans-serif color=red size=3>".
См. Готовые преобразователи