答案 0 :(得分:1)
正如您已经猜到的,PmWiki对html转换的标记是一个分阶段的过程,包括应用一组有序的正则表达式匹配和文本替换。
Markup($name, $when, $pattern, $replace)
函数(在pmwiki.php
中)负责定义转换管道本身并使用预定义规则(stdmarkup.php
)和您自己提供的规则填充它Local Configuration Files
Custom Markup文档页面将预定义阶段描述为:
_begin start of translation
{$var} Page Text Variables happen here.
fulltext translations to be performed on the full text
split conversion of the full markup text into lines to be processed
directives directive processing
inline inline markups
links conversion of links, url-links, and WikiWords
block block markups
style style handling
_end end of translation
根据function文档,Markup()
参数定义为:
$name
字符串命名插入的规则。如果已存在同名规则,则忽略此规则。
$when
此字符串用于控制何时应用相对于其他规则的规则。 "<xyz"
的规范说明要在名为"xyz"
的规则之前应用此规则,而">xyz"
表示要在规则"xyz"
之后应用此规则。有关规则顺序的详细信息,请参阅CustomMarkup。
$pattern
此字符串是一个正则表达式,翻译引擎用它来查找标记源中此规则的出现。
$replace
此字符串将在匹配发生时替换匹配的文本,或者将返回替换文本的函数名称。
将"directives"
指定为$when
占位符会导致标记规则应用于之后的文本已被分割为行。
因此,为了在多行上发生,应该指示在行分割之前使用,例如:
Markup('SHOUTY', '<split',
'/SHOUTY\\s*(.+?)\\./gs',
'MarkupSHOUTY');