Возможно ли сгенерировать выделение консоли для markdown с помощью pandoc?

#markdown #highlight #pandoc

#markdown #выделение #pandoc

Вопрос:

Я пишу некоторую документацию в markdown и пытаюсь отобразить ее с помощью pandoc. Я хотел бы иметь возможность выделять интерактивный сеанс оболочки, выделяя команды, введенные пользователем, жирным шрифтом.

Итак, я надеюсь, что

 ```console
$ user text
program output
``` #
  

будет выделено как

 $ user text
program output
  

user text выделено жирным шрифтом.

Возможно ли это сделать в pandoc?

Ответ №1:

Я не думаю, что есть встроенное определение синтаксиса для консоли bash. Но из http://pandoc.org/MANUAL.html#syntax-highlighting:

Если вас не устраивает встроенное выделение или вы хотите выделить язык, который не поддерживается, вы можете использовать --syntax-definition опцию для загрузки файла определения синтаксиса XML в стиле KDE. Прежде чем писать свою собственную, загляните в репозиторий синтаксических определений KDE.

Ответ №2:

Мне потребовалось некоторое время, чтобы разобраться с синтаксисом, но вот несколько простых XML-файлов для выделения строк, начинающихся с $ жирного шрифта:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<language name="Shell" version="1" kateversion="2.4" section="Other" extensions="*.shell" mimetype="" author="Tim Hutt (tdhutt@gmail.com)" license="MIT">
  <highlighting>
    <contexts>
      <context attribute="Output" name="Output" lineEndContext="#stay" >
        <DetectChar char="$" attribute="Command" context="Command" firstNonSpace="true"/>
      </context>
      <context attribute="Command" name="Command" lineEndContext="#pop" />
    </contexts>
    <itemDatas>
      <itemData name="Output" defStyleNum="dsNormal"/>
      <itemData name="Command" defStyleNum="dsOthers" bold="true"/>
    </itemDatas>
  </highlighting>
</language>
  

(Используйте «shell вместо «bash)

К сожалению, bold="true" не работает с Pandoc. Я предполагаю, что он просто считывает результирующее значение defStyleNum и передает его в свой маркер, игнорируя другие атрибуты.

Мы можем злоупотреблять одним из других стилей (я использовал dsOthers здесь — выберите тот, который больше нигде не используется в ваших документах). Просто используйте --css=foo.css опцию Pandoc с некоторым CSS, подобным этому:

Вот как это выглядит, с некоторым кодом Rust выше:

ДЕМОНСТРАЦИЯ

Это небольшое улучшение. Хотелось бы, чтобы был способ скопировать текст с цветовыми кодами ANSI с консоли и заставить Pandoc отобразить это, но я соглашусь на это.