Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PmWiki中的多行标记_Php_Markup_Pmwiki - Fatal编程技术网

Php PmWiki中的多行标记

Php PmWiki中的多行标记,php,markup,pmwiki,Php,Markup,Pmwiki,假设我想创建标记来转换: 一些文本。你好。还有一些文字。 为此: 一些文本。你好还有一些文字。 我将使用以下PHP实现这一点: Markup('SHOUTY', 'directives', '/SHOUTY\\s*(.+?)\\./gs', 'MarkupSHOUTY'); function MarkupSHOUTY($matches) { return mb_strtoupper($matches[1]) . '!'; } 这适用于上面的朴素测试用例,但在实际使用中失败:

假设我想创建标记来转换:

一些文本。你好。还有一些文字。
为此:

一些文本。你好还有一些文字。
我将使用以下PHP实现这一点:

Markup('SHOUTY', 'directives',
  '/SHOUTY\\s*(.+?)\\./gs',
  'MarkupSHOUTY');

function MarkupSHOUTY($matches) {
  return mb_strtoupper($matches[1]) . '!';
}
这适用于上面的朴素测试用例,但在实际使用中失败:

这里是SHOUTY Sparta。
他应该拿着他的沃帕尔剑:
好久不见他所寻找的敌人了--
他就这样在那棵树旁休息,
站在那里沉思了一会儿。
不要按这个按钮。不要按它。
变成

这里是斯巴达!
他应该拿着他的沃帕尔剑:
好久不见他所寻找的敌人了--
他就这样在那棵树旁休息,
站在那里沉思了一会儿。
不要按这个按钮。别按它!

如何在PmWiki中创建多行标记?

正如您已经猜到的,PmWiki的标记到html转换是一个多阶段的过程,包括应用一组有序的正则表达式匹配和文本替换

一些理论思考
Markup($name、$when、$pattern、$replace)
函数(在
pmwiki.php
中)负责定义转换管道本身,并用预定义规则(在
stdmarkup.php
中)和您在中提供的自己的规则填充它

文档页面将预定义阶段描述为:

_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
根据文档,
Markup()
参数定义为:

$name
该字符串命名插入的规则。如果已存在同名规则,则忽略此规则

$when
此字符串用于控制何时相对于其他规则应用规则。
“xyz”
的规范要求在规则
“xyz”
之后应用此规则。有关规则顺序的详细信息,请参见

$pattern
此字符串是一个正则表达式,翻译引擎使用它查找标记源中出现的此规则

$replace
当匹配发生时,此字符串将替换匹配的文本,或者替换返回替换文本的函数名

将此应用到您的案例中 当占位符将“指令”指定为$时,将导致标记规则在文本已拆分为行后应用于文本

因此,为了在多条线路上进行,应指示在线路拆分之前进行操作,例如:


Markup('SHOUTY','这让我觉得非常非常愚蠢。-/如果这行得通,我会非常沮丧!太棒了。我不知道我怎么会错过处理这一问题的代码,但你看,我会解决这个问题,去掉我完全无用的研究工作。