Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Spearance 21.05.2004 13:11 / 21.05.2004 13:45
Пршло время выложить свой вариант класса для общей обкатки и теста.# $Id: typograf.p,v 1.4.5.0 2004/05/21 Eugene Spearance Exp $ @CLASS typograf ######################################## # Определение пути к классу ##### @auto[filespec][full_path] $full_path[^file:dirname[$filespec]] $c_dir[/^full_path.trim[start;$request:document-root]] $hash[^hash::create[]] ### End @auto ######################################## # Обработка текста # # $.dirty_text[текст] - который нужно типографировать # $.regex_path[путь_к_файлу] - с альтернативной таблицей правил (включая имя файла) # $.symbols_path[путь_к_файлу] - с альтернативной таблицей замен символов (включая имя файла) # ##### @text_process[params][regex_path] ^if(def $params.dirty_text){ ^memory:compact[] ^if(def $params.regex_path){$regex_path[$params.regex_path]}{$regex_path[$c_dir/regex.cfg]} ^rem{ *** Заменяю символы UTF-8 и символы мнемоники на печатные *** } $result[^prepare_text[$params.dirty_text;$params.symbols_path]] ^rem{ *** Удаляю таблицы стилей, скрипты, пре-формаченый текст и теги. ПОРЯДОК УДАЛЕНИЯ НЕ МЕНЯТЬ!!! *** } $result[^remove[$result;css]] $result[^remove[$result;js]] $result[^remove[$result;pre]] $result[^remove[$result;tag]] ^rem{ *** Обрабатываю текст правилами *** } ^if(!$regex){ $regex[^table::load[$regex_path]] } ^regex.menu{ ^if(def $regex.reg1){ $result[^result.match[$regex.reg1][$regex.reg2]{^process{^taint[as-is][$regex.reg3]}}] } } ^rem{ *** Возвращаю таблицы стилей, скрипты, пре-формаченый текст и теги ПОРЯДОК ВОЗВРАТА НЕ МЕНЯТЬ!!! *** } $result[^return[$result;tag]] $result[^return[$result;pre]] $result[^return[$result;js]] $result[^return[$result;css]] ^memory:compact[] } ### End @text_process ######################################## # Замена символов в UTF кодировке и символов "мнемоников" на печатные символы ##### @prepare_text[dirty_text;symbols_path] ^if(!$table_symbols){ $table_symbols[^table::load[nameless;^if(def $symbol_path){$symbol_path}{$c_dir/replace.cfg}]] } $result[^dirty_text.replace[$table_symbols]] ### End @prepare_text ######################################## # Замена тегов, скриптов и внутренних CSS на <*>, <js>, <css> # # tag - заменяю теги на <*> # css - заменяю встроенные таблицы стилей на <css> # js, javascript - заменяю скрипты на <js> # pre - заменяю предварительно форматированный текст на <pre> # ##### @remove[prepared_text;text_type][counter] $counter(0) ^hash.add[$.[$text_type][^hash::create[]]] ^switch[$text_type]{ ^case[css]{ $result[^prepared_text.match[(<style[^^>]*>.*?</style>)][gi]{<css>^hash.[$text_type].add[$.[$counter][$match.1]]^counter.inc[]}] } ^case[js;javascript]{ $result[^prepared_text.match[(<script[^^>]*>.*?</script>)][gi]{<js>^hash.[$text_type].add[$.[$counter][$match.1]]^counter.inc[]}] } ^case[pre]{ $result[^prepared_text.match[(<pre[^^>]*>.*?</pre>)][gi]{<pre>^hash.[$text_type].add[$.[$counter][$match.1]]^counter.inc[]}] } ^case[DEFAULT]{ $result[^prepared_text.match[(<[^^>]+>)][g]{<*>^hash.[$text_type].add[$.[$counter][$match.1]]^counter.inc[]}] } } ### End @remove ######################################## # Возврат тегов, скриптов и внутренних CSS ##### @return[matched_text;text_type][counter] $counter(0) $result[$matched_text] ^if(def $hash.[$text_type]){ ^switch[$text_type]{ ^case[css]{ $result[^result.match[(<css>)][g]{$hash.[$text_type].[$counter]^counter.inc[]}] } ^case[js;javascript]{ $result[^result.match[(<js>)][g]{$hash.[$text_type].[$counter]^counter.inc[]}] } ^case[pre]{ $result[^result.match[(<pre>)][g]{$hash.[$text_type].[$counter]^counter.inc[]}] } ^case[DEFAULT]{ $result[^result.match[(<\*>)][g]{$hash.[$text_type].[$counter]^counter.inc[]}] } } } ### End @returnЭто облегченный по функциональности вариант класса, относительно того что используется на моем сайте.
@USE typograf.p ... ^typograf:text_process[ $.dirty_text[текст] - который нужно типографировать $.regex_path[путь_к_файлу] - с альтернативной таблицей правил (включая имя файла) $.symbols_path[путь_к_файлу] - с альтернативной таблицей замен символов (включая имя файла) ... ]Все это богатство вместе с таблицей правил и таблицей замен можно скачать здесь.