varspool / pygments-bundle
一个将 Pygments 集成到 Sundown 渲染 Markdown 中以提供代码高亮显示的捆绑包
Requires
- kwattro/markdown-bundle: dev-master
- symfony/framework-bundle: 2.*
This package is auto-updated.
Last update: 2024-09-09 23:40:31 UTC
README
VarspoolPygmentsBundle
提供类似 GFM(Github 风格的 Markdown)的 Markdown(X)HTML 渲染,包括语法高亮的代码块。代码着色由 Python Pygments 库提供(目前通过 proc_open 与 pygmentize 接口)。
VarspoolPygmentsBundle 不会重新发明轮子:它使用 KwattroMarkdownBundle 中的 Sundown 支持,在KwattroMarkdownBundle中执行初始 Markdown 渲染。
安装
安装 Sundown PHP 扩展
该 Sundown 扩展 通过 PECL 以测试版状态提供,因此安装它可能如下所示
sudo pecl install sundown-beta
当 Sundown 扩展在 php\_info()
的输出中显示时,您将能够知道您已成功安装
php -i | grep 'Sundown Support'
安装 pygments
这通常通过您的包管理器提供,如 python-pygments
包或类似。
sudo apt-get install python-pygments
然而,关键是您有可执行的 pygmentize 脚本。它通常位于 /usr/bin/pygmentize
,但如果不是,您可以配置其位置(请参阅下面的 app/config.yml)。
Composer
将 varspool/pygments-bundle
添加到您的 requires 字段。然后安装/更新您的依赖项。
app/AppKernel.php
注册 KwattroMarkdownBundle
和 VarspoolPygmentsBundle
# app/AppKernel.php public function registerBundles() { $bundles = array( //... new Kwattro\MarkdownBundle\KwattroMarkdownBundle(), new Varspool\PygmentsBundle\VarspoolPygmentsBundle(), ); }
app/config.yml
接下来,配置默认的 Markdown 渲染器 kwattro_markdown
服务,使其停止抱怨。
kwattro_markdown: renderer: xhtml
您可以可选地配置 pygmentize
脚本的位置。默认为 /usr/bin/pygmentize
varspool_pygments: bin: /usr/local/bin/pygmentize
您还可以指定传递给 Pygmentize 的词法分析器参数。请参阅文档以获取列表
varspool_pygments: lexer_arguments: linenos: table
尽管其名称如此,此选项还可以包含 格式化程序参数,例如行号。
用法
服务
kwattro_markdown
KwattroMarkdownBundle 通常提供 kwattro_markdown
服务。在设置 VarspoolPygmentsBundle 时,此服务不会更改:该服务将继续提供无语法高亮的 Markdown 渲染。此服务通常是一个 Kwattro\MarkdownBundle\Markdown\KwattroMarkdown
对象。
$xhtml = $this->get('kwattro_markdown')->render($markdown_source);
varspool_markdown
一旦您已安装 VarspoolPygmentsBundle,您将有一个第二个服务可供使用: vaspool_markdown
。此服务将扩展 Kwattro\MarkdownBundle\Markdown\KwattroMarkdown
,因此您应该能够轻松地将其替换。它将在 markdown 中着色代码块。此服务通常是一个 Varspool\PygmentsBundle\Markdown\KwattroMarkdown
对象。
$colorized_xhtml = $this->get('varspool_markdown')->render($markdown_source);
varspool_pygments
此服务是负责着色输出的 Sundown 渲染器实例。它通常是一个 Varspool\PygmentsBundle\Sundown\Render\ColorXHTML
实例。
样式表
Pygments 渲染器使用 div
标签和类标记输出的一部分。然后您需要将这些标签分配样式。
SCSS/Compass
如果您已经使用 Compass 或 SASS,Resources/public/css/_pygments.scss 中有一个示例 Pygments 样式表。默认实现使用 Solarized 色调。您应该能够从您自己的文件中导入此样式表。
动态样式
Pygments 可以提供几个样式表来自动着色输出。提供了一个控制器,它将通过调用 pygmentize -S <style>
输出样式。要使用控制器,请从您的路由中引用它
# app/config/routing.yml varspool_pygments: resource: '@VarspoolPygmentsBundle/Controller/PygmentsController.php' type: annotation
然后在您的页面中通过URL /pygments/<pygments_formatter>/<pygments_style>.css
包含一个CSS文件。(例如:/pygments/html/friendly.css)。
或者,您也可以从varspool_pygments服务中获取样式字符串。
$pygments_formatter = $this->container->get('varspool_pygments'); $styles = $pygments_formatter->getStyles('friendly');