parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

черт с ним, с   — с этим я уже разобрался, есть поинтереснее момент

Ramesses II 11.11.2002 21:43

Я все о ТИПОГРАФе...

Я попытался сделать свой обработчик, код примерно такой (он еще недоработан)
@text_refine[text]
$text[^text.match[  *][g]{ }]
$text[^text.match[\s\n][g]{
}]
$text[^text.match[&][g]{&amp^;amp^;}]
$text[^text.match[ ][g]{&amp^;nbsp^;}]
$text[^text.match[][g]{&amp^;nbsp^;&amp^;#151^;}]
$text[^text.match[--][g]{&amp^;#151^;}]
$text[^text.match[ ][g]{&amp^;nbsp^;}]
$text[^text.match[<][g]{&amp^;lt^;}]
$text[^text.match[>][g]{&amp^;gt^;}]
$text[^text.match[«][g]{&amp^;#0171^;}]
$text[^text.match[»][g]{&amp^;#0187^;}]
$text[^text.match[\“][g]{&amp^;#0147^;}]
$text[^text.match[\”][g]{&amp^;#0148^;}]

# расстановка параграфов
$text[^text.match[\A][g]{&lt^;P&gt^;${match.1}}]
$text[^text.match[\n][g]{&lt^;/P&gt^;
${match.1}&lt^;P&gt^;}]
$text[^text.match[\z][g]{${match.1}&lt^;/P&gt^;}]

$text[^text.match[ '][g]{ &amp^;#145^;}]
$text[^text.match['][g]{&amp^;#146^;}]
$text[^text.match[([ёЁа-яА-Яa-zA-Z_]+-[ёЁа-яА-Яa-zA-Z_]+)][g]{&lt^;NOBR&gt^;${match.1}&lt^;/NOBR&gt^;}]

# NBSP в сочетаниях т. д., т. п., ж. д., и. о., ... 
$text[^text.match[((\s|\A)[Тт|Ии|Жж]\.) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]

# союзы и частицы, инициалы, сокращение "тов."
$text[^text.match[((\s|\A)[Оо](|б|т)) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]
$text[^text.match[((\s|\A)[Вв]) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]
$text[^text.match[((\s|\A)[Тт]ов\.) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]
$text[^text.match[((\s|\A)[А-Я]\.) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]
# инициалы Дж. и Ph.
$text[^text.match[((\s|\A)[A-ZА-Я]+[a-zа-я]\.) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]
$text[^text.match[((\s|\A)[Сс]()) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]
$text[^text.match[((\s|\A)[Ии]) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]
$text[^text.match[((\s|\A)[Ии]ли) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]
$text[^text.match[((\s|\A)[Ии]з) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]
$text[^text.match[((\s|\A)[Нн](а|ад)) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]
$text[^text.match[((\s|\A)[Пп](од|еред)) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]
$text[^text.match[((\s|\A)[Нн](и|е)) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]
$text[^text.match[((\s|\A)[Зз]а) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]
$text[^text.match[((\s|\A)[Кк]()) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]

# сокращение г. (год)
$text[^text.match[ ([г]\.)][g]{&amp^;nbsp^;${match.1}}]

# выдача текста обратно
$tttexttt[$text]
Но все это слишком громоздко получается...
Расстановка параграфов — аж три строки...

И еще я так и не смог разобраться с:
1. дефисными сочетаниями типа 222-333-222
2. сочетаниями типа "ни на" — хотелось применить такой код:
$text[^text.match[((\s|\A)[Нн](и|е|а|ад)) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]
Но вся загвоздка в том, что в результате выдает:
ни&nbsp;на фиг ты мне не&nbsp;нужен, ни&nsp;куда еще...
потому как первый результат формата убирает пробел и распознавать надо не только начало всего текста (\A) или слова (\s), но и точку с запятой (как конец &nbsp;)...

попытки прописать в коде (\A|\s|;) приводят к ошибке 500...
пытался прописать как ^; и как \; — результат тот же или еще хуже...

Объясните чайнику...

ЗЫ: находить надо именно ';' а не что-нить другое... потому, как сочетания с & бывают...