Реализация транслятора собственной разметки

1. Создайте в папке seophp/include новый файл с именем custom_markup.inc.php
и введите в него следующий код:
<?php
function custom_markup_translate($str)
{
// массив о регулярными выражениями, описывающими собственные дескрипторы
$ search = array (
•#\{bold}(.*?)\{/bold}#is-,
•#\{italic)(.*?)\{/italic}#is',
•#\{underline}(.*?)\{/underline}#is',
'#\{heading}(.*?)\{/heading}#is',
'#\{subheading}(.*?)\{/subheading}#is',
•#\{link: (.*?)} (.*?)\{/linJc}#is1 ,
•#\{elink:(.*?)}<.*?)\{/elink}#is',
•#\{unordered-list}(.*?)\{/unordered-list}\s*#is',
•#\{ordered-list}(.*?)\{/ordered-list}\s*#is',
'#\\s*{list-element}(.*?)\{/list-element}\s*#is',
•#\{picture: <.*?)}#is\
'#\t#\
'#\{comment} (.*?)\{/comment}#is'
);
// массив с HTML-заменами
$replace = array(
'\\1',
•\\l',
•\\l',
'\\1' ,
'\\1' ,
'\\2',
'\\21,

    \\1

',

    \\1

',

  • \\K/li>' ,
    '' ,
    ' ' ,
    ' '
    );
    // выполнение замены
    $step_l = preg_replace($search, $replace, $str);
    $step_2 = preg_split('#(\{HTML\}.*?\{/HTML\})#is', $step_l, -1,
    PREG_SPLIT_DELIM_CAPTORE);
    $return = ' ' ;
    foreach ($step_2 as $s2)
    {
    if (preg_match(' # \ {HTML\ } # ', $s2))
    {
    $return .= preg_replace(' # \ {/?HTML\} # is', ' ' , $s2) ;
    }
    else
    {
    $return .= nl2br($s2) ;
    }
    }
    // возврат HTML-разметки
    return $return;
    >
    ?>
    2. Создайте в папке seophp файл с именем markup.txt и введите в него следующий
    код:
    {HEADING} Генерация оптимизированного HTML с помощью собственного
    языка разметки{/HEADING}Как уже было сказано, WYSIWYG-редакторы часто
    приводят к проблемам, связанным с оптимизацией страниц. Зачастую
    эти редакторы генерируют HTML без дескрипторов, которые адекватно
    подчеркивают структурное значение элементов на странице. Поскольку
    дескрипторы заголовков вроде hi, ul и strong придают документу структуру,
    пренебрежение ими может {BOLD}{ITALIC}понизить{/ITALIC}{/BOLD}
    ранг страницы, особенно если поисковый механизм учитывает факторы,
    присутствующие на странице.
    3. Создайте в папке seophp файл с именем test_markup. txt и введите в него следующий код:

    npoвepкa транслятора в HTML-pa3MeTKy

    <?php
    // включение библиотеки собственной разметки
    require_once 'include/customjnarkup.inc.php';
    // задание имени входного файла
    $file_name = 'markup.txt';
    // открытие файла разметки на диске
    $handle = fopen($file_name, 'г') ;
    // проверка, успешно ли открыты файлы
    if ($handle)
    <
    // чтение содержимого файла
    $markup = fread($handle, filesize("markup.txt"));
    // трансляция собственной разметки и вывод результата
    $ translated = custom_markup_translate ($markup) ;
    echo $translated;
    )
    else
    {
    // вывод сообщения об ошибке
    echo "Невозможно открыть $file_name!";
    }
    ?>

    4. Откройте страницу http://seophp.example.com/test_markup.php— вы должны
    получить результат, показанный на рис. 6.14.
    может быть такая система при создании более сложной системы управления контентом.
    Этот небольшой сценарий знает, как обрабатывать собственные дескрипторы
    разметки с понятным назначением: {bold} (полужирный), {italic} (курсив),
    {underline} (подчеркнуто), {heading} (заголовок), {subheading} (подзаголовок),
    {link} (ссылка), {elink} (ссылка, открывающая новое окно), {unordered-list} (неупорядоченный список), {ordered-list} (упорядоченный список), {list-element}
    (элементсписка), {picture} (изображение) и {comment} (комментарий).
    Файл разметки markup.txt содержит не HTML-элементы, а лишь специальные
    элементы разметки. Но с помощью простой (хотя и довольно объемной) библиотеки специальной разметки все элементы такой разметки заменяются на ходу на стандартные HTML-дескрипторы.
    Функция custom_markup_translate () состоит в основном из ряда регулярных выражений и их замен, которые выполняют преобразование специального кода разметки в HTML. Мы оставляем вам разбор работы этой функции в качестве упражнения.