1

GitHub 帮助中有一个页面描述了如何使用语法高亮代码块。在该页面上,有说明如何为此目的将语言与其关键字匹配:

我们使用Linguist来执行语言检测和语法高亮。您可以在语言 YAML 文件中找出哪些关键字是有效的。

但是,该 YAML 中有很多数据,我并不清楚如何使用它来确定哪些关键字适用于任何给定语言。

我编写了一个简单的引导 脚本来尝试将此 YAML 解析为更易读的JSON文件,从每种语言映射到其有效关键字列表:

curl https://raw.githubusercontent.com/github/linguist/f75c5707a62a3d66501993116826f4e64c3ca4dd/lib/linguist/languages.yml | ./languages.boot > languages.json

但我完全不相信这是正确的。例如,我的脚本生成的许多关键字都包含空格,而我的印象是这些关键字不起作用

代码围栏的内容被视为文字文本,而不是被解析为内联。info 字符串的第一个单词通常用于指定代码示例的语言,并呈现在标记的class属性中code

我正在寻找的是对这个 YAML 文件的“模式”的理解,因为它与 GitHub Markdown 中的语法突出显示有关。理想情况下,我希望能够使用这种理解来编写一个程序,该程序接受语言 YAML 文件并生成类似于Stack Exchange 语法突出显示的语言代码列表的内容,但用于 GitHub 上的 Markdown。我怎样才能写出这样的程序?

4

1 回答 1

3

我正在寻找的是对这个 YAML 文件的“模式”的理解。

对于languages.yml文件中的每种语言,您可以用作说明符

  1. 语言名称;
  2. 任何语言aliases
  3. 任何语言interpreters
  4. 任何文件扩展名,带或不带前导..

空格必须用破折号代替(例如,emacs-lisp是 的一个说明符Emacs Lisp)。带有tm_scope: none条目的语言没有定义语法,也不会在 github.com 上突出显示。

我怎样才能写出这样的程序?

实际上,已经有人编写了这样的程序。在github/linguist#2278中,jmm 详细介绍了他的调查结果,并收到了 GitHub 工程师之一的确认(同一线程)。他还提供了指向他自己的程序以计算标识符的链接以及带有结果的 wiki 页面(可能不是最新的)。

于 2017-08-20T19:35:47.023 回答