bgu*_*uiz 3 javascript markdown jekyll rouge
如何配置 Jekyll & Rouge 以指定应使用另一种语言的解析器突出显示一种语言。
例如,我希望能够在我的 Markdown 源文件中执行此操作:
```nodejs-repl
> foo();
Uncaught ReferenceError: foo is not defined
```
Run Code Online (Sandbox Code Playgroud)
...但使用相同的语法高亮器 Javascript 语言解析器突出显示该代码块语法。
我想这样做有几个原因:
Rouge 已经有语言别名的概念(见下面的例子),但是是否可以通过 Jekyll 指定自定义语言别名,如果可以,如何做到这一点?
细节:
(1)
我正在使用 Jekyll 3.8.5 和 Rouge 3.11.0。
(2)
以下是我的 Jekyll 配置文件的相关部分:
```nodejs-repl
> foo();
Uncaught ReferenceError: foo is not defined
```
Run Code Online (Sandbox Code Playgroud)
(3)
为了真正清楚“语言别名”指的是什么,我将提供一个示例:
对于 Javascript,您可以在代码围栏之后使用js和javascript之后,因为它们在 Rouge 中默认是语言别名。因此,以下两个代码块是相同的:
使用语言别名js:
```js
foo();
```
Run Code Online (Sandbox Code Playgroud)
使用语言别名javascript:
```javascript
foo();
```
Run Code Online (Sandbox Code Playgroud)
我能够通过使用 Jekyll 的_plugins目录来“扩展”Rogue 荧光笔。
我的大部分研究都来自rogue-ruby的GitHub的问题#1392和源代码为LinkedIn的rest-li基础哲基尔网站。
_plugins在 Jekyll 根目录中创建一个目录_plugins目录中创建一个ruby文件# This "hook" is executed right before the site's pages are rendered
Jekyll::Hooks.register :site, :pre_render do |site|
puts "Adding more JavaScript Markdown aliases..."
require "rouge"
# This class defines the PDL lexer which is used to highlight "pdl" code snippets during render-time
class MoreJSLexer < Rouge::Lexers::Javascript
title 'MoreJS'
aliases 'js', 'nodejs-repl'
end
end
Run Code Online (Sandbox Code Playgroud)
jekyll serve并记下自定义日志行"Adding more JavaScript Markdown aliases..." Incremental build: disabled. Enable with --incremental
Generating...
Jekyll Feed: Generating feed for posts
Adding more JavaScript Markdown aliases...
done in 0.637 seconds.
Auto-regeneration: enabled for '/Users/kueng/work/sandboxes/minima'
Server address: http://127.0.0.1:4000
Server running... press ctrl-c to stop.
Run Code Online (Sandbox Code Playgroud)
我使用最小的GitHub 存储库作为我的沙箱和jekyll 3.8.7. 我_plugins/more_javascript.rb使用第 3 步中的代码创建了一个Ruby 文件。我使用下面的 Markdown 代码段编辑了其中一个 Markdown 文件,并且只注意到js并nodejs-repl突出显示了语法。
```nodejs
var a, b, c;
a = 5; b = 6; c = a + b;
document.getElementById("demo1").innerHTML = c;
```
```js
var a, b, c;
a = 5; b = 6; c = a + b;
document.getElementById("demo1").innerHTML = c;
```
```nodejs-repl
var a, b, c;
a = 5; b = 6; c = a + b;
document.getElementById("demo1").innerHTML = c;
```
Run Code Online (Sandbox Code Playgroud)