Как я могу использовать файл YAML языков, чтобы определить, какие ключевые слова подходят для данного языка?
В справке GitHub есть страница, описывающая, как использовать выделенные синтаксисом блоки кода. На этой странице есть инструкции, описывающие, как сопоставить языки с их ключевыми словами:
Мы используем Linguist для определения языка и выделения синтаксиса. Вы можете узнать, какие ключевые слова действительны в файле YAML языков.
Тем не менее, в YAML содержится много данных, и я не совсем понимаю, как именно их можно использовать, чтобы определить, какие ключевые слова подходят для данного языка.
Я написал простой загрузочный скрипт, чтобы попытаться проанализировать этот YAML для более удобочитаемого сопоставления файла JSON для каждого языка и его списка допустимых ключевых слов:
curl https://raw.githubusercontent.com/github/linguist/f75c5707a62a3d66501993116826f4e64c3ca4dd/lib/linguist/languages.yml | ./languages.boot > languages.json
Но я совсем не уверен, что это правильно. Например, многие ключевые слова, которые генерирует мой скрипт, содержат пробелы, и у меня сложилось впечатление, что они не будут работать:
Содержимое ограждения кода обрабатывается как буквальный текст, а не как встроенные. Первое слово информационной строки обычно используется для указания языка примера кода и отображается в
class
атрибутcode
тег.
Что я ищу, так это понимание "схемы" этого файла YAML, поскольку оно связано с подсветкой синтаксиса в GitHub Markdown. В идеале я хотел бы использовать это понимание для написания программы, которая использует языковой файл YAML и генерирует что-то вроде списка языковых кодов для подсветки синтаксиса Stack Exchange, но для Markdown на GitHub. Как я могу написать такую программу?
1 ответ
То, что я ищу, это понимание "схемы" этого файла YAML.
Для каждого языка в languages.yml
файл, вы можете использовать в качестве спецификаторов:
- название языка;
- любой язык
aliases
; - любой язык
interpreters
; - любое из расширений файлов, с или без лидирующих
.
,
Пробелы должны быть заменены тире (например, emacs-lisp
один спецификатор для Emacs Lisp
). Языки с tm_scope: none
запись не имеет определенной грамматики и не будет выделена на github.com.
Как я могу написать такую программу?
На самом деле, кто-то уже написал такую программу. В github / linguist # 2278, jmm подробно описывает результаты своего исследования и получил подтверждение от одного из инженеров GitHub (та же тема). Он также дает ссылку на свою собственную программу для вычисления идентификаторов и вики-страницу с результатами (которые могут быть не актуальными).