简单的短代码库

1.0.0 2015-11-23 03:19 UTC

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

短代码必须是一个字符串,由字母、数字、破折号或下划线组成。它们不能以下划线开头。如果代码无效,registerregisterAlias 将返回 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 许可。