2002-04-23 19:08:56 UTC

Псевдотеги нужны для того, чтобы иметь возможность без проблем публиковать HTML код на сайте и при этом иметь возможность некоторого форматирования текста, например выделение жирным, курсивом, применение нумерованных списков и т.д. Идея псевдотегов взята мной из форума по парсеру на сайте его разработчиков и здесь я хочу показать собственную реализацию этой идеи.

Идея заключается в том, чтобы использовать в тегах вместо угловых скобок, квадратные и потом, при выводе на экран, производить поиск и замену тегов с квадратными скобками на нормальные HTML теги, которые и будут форматировать текст при выводе его на экран. Например, для того, чтобы выделить фрагмент текста жирным, в HTML вы должны написать следующую конструкцию: Текст выделенный жирным. С помощью псевдотегов это будет выглядеть так: [b]Текст выделенный жирным[/b] и так далее, т.е. то же самое можно сделать для всех тегов без атрибутов. В случае же если тег имеет атрибуты, все будет сложнее, и я не буду сейчас рассматривать этот случай, за исключением тега a, т.е. для того, чтобы иметь возможность ставить гиперссылки.

Итак, текст макроса:

@pseudotags[text]
^var[buff;$text]
# переменная названий тегов
^var[tg;b|i|u|ul|ol|li|h1|h2|h3|h4|h5|h6|p|center|sup|sub|a]
^var[buff;^match[\[(^var[tg])\];g;<^item[\1]>;^var[buff]]]
^var[buff;^match[\[/(^var[tg])\];g;</^item[\1]>;^var[buff]]]
# ссылки
^var[buff;^match[\[a href="([^^"]+)"\];ig;<a href="^item[\1]">;^var[buff]]]
# Вывод
^var[buff] 

Для запуска в работу данного макроса я делаю следующее:

^var[temp;^unescape_br[^level[html;^item[text]]]]
^var[temp;^macro[pseudotags;^var[temp]]]
^level[none;^var[temp]]

^item[text] – это столбец контекста, где находится текст публикуемого материала (статьи, примера и т.д.). Я формирую контекст материала из базы данных, однако это можно делать и с помощью обычных файлов.

2002-04-23 19:08:56 UTC parser snippet web