scribe / pygments-bundle
一个集成Pygments的包,用于在Sundown渲染的Markdown中提供代码高亮。
Requires
- scribe/markdown-bundle: ~0.1
- symfony/framework-bundle: ~2.5
This package is not auto-updated.
Last update: 2022-02-01 12:39:58 UTC
README
提供类似于GFM(Github风味Markdown)的Markdown(X)HTML渲染,包括带有语法高亮的代码块。代码着色由Python Pygments库提供(目前通过proc_open与pygmentize接口)。
VarspoolPygmentsBundle并非重新发明轮子:它使用KwattroMarkdownBundle中的Sundown支持来进行初始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
接下来,为kwattro_markdown
服务配置默认的Markdown渲染器,以便它停止抱怨。
kwattro_markdown: renderer: xhtml
您可以选择配置pygmentize
脚本的位置。默认为/usr/bin/pygmentize
varspool_pygments: bin: /usr/local/bin/pygmentize
您还可以指定传递给Pygmentize的lexer参数。有关列表,请参阅文档
varspool_pygments: lexer_arguments: linenos: table
尽管其名称如此,此选项也可以包含格式化参数,例如linenos。
用法
服务
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
(例如 /pygments/html/friendly.css)在您的页面上包含一个 CSS 文件。
或者,您可以从 varspool_pygments 服务获取样式作为字符串。
$pygments_formatter = $this->container->get('varspool_pygments'); $styles = $pygments_formatter->getStyles('friendly');