mpratt/luthor

PHP 可扩展 Markdown Lexer/Parser

0.2 2013-12-12 16:56 UTC

This package is auto-updated.

Last update: 2024-09-11 14:02:51 UTC


README

Build Status Scrutinizer Quality Score Code Coverage Latest Stable Version Total Downloads

** 警告:此库未准备好用于生产环境 **

Luthor 是一个可扩展的 Markdown Lexer/Parser,用于 PHP。它将 Markdown 文本转换为 HTML。换句话说,它一行一行地读取 Markdown 文本,并分析其内容。它使用 Lexer 将每个元素标记化,并将其传递给解析器。解析器在标记上操作,并返回一个 HTML 字符串。

此库的关键特性是您可以轻松扩展标记映射,这使您能够实际拥有自定义符号并构建自己的 Markdown。还可以轻松完成其他一些有趣的事情,例如应用过滤器或修改处理或显示标记的方式。它还提供了一组配置选项,可用于更改库的行为!有关如何进行操作的更多信息,请参阅使用部分。或者,最好的方法是查看源代码并一探究竟。

以下是支持的标记列表

  • 段落和换行符
  • 标题
  • 引用块
  • 代码块和带围栏的代码块
  • 列表(以 * - + 1. 开头)
  • 水平线
  • 跨度元素(链接、强调、代码、图像、删除文本)
  • 元素转义
  • 脚注和缩写
  • 通过 {#id .class1 .class2} 在标题、链接和图像上使用特殊属性

此库可以使用,但 够稳定,可在生产环境中使用。与其他 Markdown 解析器相比,这个解析器速度很慢!非常慢!并且它非常重视缩进,也许有点过分。

我不会为此库提供支持,这只是一个爱好项目。库的某些部分可能可以更优雅地完成,也许以后我会清理代码库,但我不做任何承诺。

如果您正在寻找一个可扩展的 Markdown 解析器,我认为最好的替代方案是 Ciconia!优雅且稳定,需要 PHP 5.4。

要求

  • PHP >= 5.3

安装

使用 Composer 安装

如果您使用 Composer 来管理依赖项,您可以通过创建 composer.json 并添加以下内容来使用此库:

{
    "require": {
        "mpratt/luthor": "dev-master"
    }
}

保存它并运行 composer.phar install

独立安装(不使用 Composer)

下载最新版本或克隆此存储库,将 Lib/Luthor 目录放置在您的项目中。之后,您只需要包含 Autoload.php 文件。

    require '/path/to/Luthor/Autoload.php';
    $embera = new \Luthor\Luthor();

或者,如果您已经有了 PSR-0 合规的自动加载器,您只需注册 Luthor 即可。

    $loader->registerNamespace('Luthor', 'path/to/Luthor');

基本用法

    $lex = new \Luthor\Luthor();
    echo $lex->parse('**I dont like Superman**');
    // <p><strong>I dont like Superman</strong></p>

为了扩展 lexer/parser,您需要创建一个新的类,该类扩展 InlineAdapter 或 BlockAdapter。使用 addExtension() 方法注册扩展

    class MyExtension extends \Luthor\Parser\Extensions\Adapters\InlineAdapter
    {
        protected $regex = '~\^([^ ]+)~A';
        public function parse()
        {
            return '<strong>' . $this->matches['1'] . '</strong>';
        }
    }

    $lex = new \Luthor\Luthor();
    $lex->addExtension(new MyExtension());
    echo $lex->parse('I love ^Luthor !');
    // <p>I love <strong>Luthor</strong>!</p>

当文本已经处理完毕时,会运行过滤器

    $lex = new \Luthor\Luthor();
    $lex->addFilter(function ($text){
        return str_replace('Hello', 'World', $text);
    });

    echo $lex->parse('Hello World!');
    // <p>World World!</p>

请查看 Lib 或 Tests 目录以了解其他配置选项。

许可证

MIT 有关完整的版权和许可信息,请参阅 LICENSE 文件。

为什么哦?

是啊,我知道,又一个Markdown解析器?真的吗?——你知道,有时候你会想,“嘿,我想多了解一下X,所以我打算写Y看看会发生什么?”这样的想法。这曾经也发生在我身上,很久以前我开始只是为了好玩/学习而编写这个词法分析器/解析器。问题是,我从未完成它。

所以有一天,我在翻看我的“未完成项目”文件夹时,发现了这个代码库的一半,并决定是时候完成它或者删掉了。我最终重写了大部分代码,虽然有些地方可以更加仔细地考虑,但最终我认为结果还不错。

作者

嗨!我是迈克尔·普雷特,我来自哥伦比亚!

我的个人网站是西班牙语的。