onesimus-systems / recoder
简单的短代码库
1.0.0
2015-11-23 03:19 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: ^4.8.0
This package is auto-updated.
Last update: 2024-09-09 04:48:08 UTC
README
Recoder 是一个简单的短代码处理器,使用类似 WordPress 的语法。此库支持多种格式,例如
[shortcode]
[shortcode argument="value"]
[shortcode truevalue argument=simple other="complex value"]
[shortcode]content[/shortcode]
[shortcode argument="value"]content[/shortcode]
要求
- PHP >= 5.4
- 多字节字符串扩展
安装
Composer
composer require onesimus-systems/recoder
或者在您的 composer.json 中
(...)
"require": {
"onesimus-systems/recoder": "^1.0.0"
}
(...)
并运行 composer install
。
使用
方法
Recoder Recoder::_construct(string $open = null, string $close = null) bool Recoder::register(string $shortcode, callable $func) bool Recoder::registerAlias(string $shortcode, string $aliasedCode) string Recoder::process(string $text [, mixed $... ]) null Recoder::unregister([string $shortcode = null]) null Recoder::setDelimiters(string $open, string $close = null)
基本用法
$sc = new Recoder(); $sc->register('name', function(array $options) { return $options['_code']; }); $sc->register('content', function(array $options) { return $options['_content']; }); $parsedText = $sc->process('[name]'); // Return: name $parsedText = $sc->process('[content]Some content[/content]'); // Return: Some content
短代码必须是一个字符串,由字母、数字、破折号或下划线组成。它们不能以下划线开头。如果代码无效,register
和 registerAlias
将返回 false,否则返回 true。通过注册新的函数可以覆盖短代码。它们也可以被注销
$sc->unregister('content'); // Unregister one code $sc->unregister(); // Unregister all codes
代码别名
$sc->registerAlias('newCode', 'aliasedCode'); // Now [newCode] will do the samething as [aliasedCode]
代码别名在处理时解析。这意味着,如果别名代码的回调函数发生变化,别名将解析到新的回调函数,而不是注册时的原始回调函数。
使用参数
$sc->register('list-args', function(array $options) { $r = []; foreach($options as $key => $val) { if ($key[0] !== '_') { $r []= "$key:$val"; } } return implode(' & ', $r); }); $parsedText = $sc->process('[list-args arg1=val1 arg2="Some value"]'); // Return: arg1:val1 & arg2:Some value
选项数组包含以下库定义的键
_raw
- 包含内容和结束标签的原始短代码_content
- 配对短代码内的文本,如果短代码是自闭合的则为空白_offset
- 短代码在文本中的偏移量_code
- 短代码名称本身_length
- 原始短代码字符串的长度
其他任何键都是短代码的参数。以下划线开头的键是库使用的保留键。
向短代码处理程序传递额外参数
$sc->register('code', function(array $options, $someObj) { return $someObj->someMethod(); }); $parsedText = $sc->process('[code]', $obj); // Everything after the first argument is passed to the handlers
定义自己的语法
$sc = new Recoder('{', '}'); // Code syntax is now {code arg=val}
边缘情况
- 未注册的短代码将被忽略并保持原样。
- 不匹配的结束短代码(
[code]content[/codex]
)将被忽略,开标签将被解释为自闭合短代码,例如[code]
。 - 重叠短代码(
[code]content[inner][/code]content[/inner]
)不受支持,将被解释为自闭合,例如[code]content[inner][/code]
,第二个结束标签将被忽略。 - 具有相同名称的嵌套短代码也视为重叠,这意味着字符串
[c]x[c]y[/c]z[/c]
将被解释为xyz[/c]
(第一个结束标签与第一个开标签匹配)。这可以通过给定的短代码处理程序名称别名来解决,例如[c]x[d]y[/d]z[/c]
将被正确处理。
许可证
Recoder 采用 MIT 许可。