| 
 | ТЕХНОЛОГИЯ СМЕШАННОГО НАБОРАРеализация на 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>".
  См. Готовые преобразователи