Для использования расширения необходимо загрузить и установить модуль pygments
.
# активируем виртуальное окружение $ source .venv/bin/activate # ставим модуль markdown (VirtualEnv) Idea@Centre:~$ python -m pip install -U pygments
Далее нужно будет определить соответствующие классы CSS с соответствующими правилами. Правила CSS должны быть определены или связаны с заголовком ваших HTML-шаблонов. Mодуль pygments
может сгенерировать правила CSS. Просто запустите следующую команду из командной строки:
(VirtualEnv) Idea@Centre:~$ pygmentize -S default -f html -a .codehilite > styles.css
Если вы используете другой css_class
(по умолчанию: .codehilite
), то установите значение параметра -a
для этого имени класса. Правила CSS будут записаны в файл styles.css.
Если нужно использовать другую тему, то замените default
на желаемую тему. Для получения списка доступных тем подсветки, установленных в системе (дополнительные темы можно установить через плагины модуля pygments
), выполните следующую команду:
(VirtualEnv) Idea@Centre:~$ pygmentize -L style
Более подробную информацию смотрите в документации модуля pygments
.
import markdown html = markdown.markdown(some_text, extensions=['codehilite'])
some_text
- разметка Markdown,extensions
- список расширений модуля.Расширение markdown.extensions.codehilite
добавляет подсветку кода/синтаксиса к стандартным блокам кода разметки Markdown с использованием модуля pygments
.
Расширение codehilite
следует тому же синтаксису, что и обычные блоки кода Markdown, за одним исключением. Маркер должен знать, какой язык использовать для блока кода. Есть три способа указать маркеру, какой язык содержит блок кода, и каждый из них дает свой результат.
Если первая строка блока кода содержит shebang
, то язык является производным от этого и используются номера строк.
#!/usr/bin/python # Code goes here ...
В результате получится:
1 #!/usr/bin/python 2 # Code goes here ...
Если первая строка содержит shebang
, но строка она не содержит пути, то эта строка удаляется из блока кода перед обработкой. Используются номера строк.
#!python # Code goes here ...
В результате получится:
1 # Code goes here ...
Если первая строка начинается с трех или более двоеточий, то текст, следующий за двоеточиями, определяет язык. Перед обработкой первая строка удаляется из блока кода, и номера строк не используются.
:::python # Code goes here ...
В результате получится:
# Code goes here ...
Некоторые строки могут быть выделены, это делается с помощью синтаксиса нескольких двоеточий. При использовании CSS-стилей default
модуля pygments
, выделенные линии имеют желтый фон. Это полезно, чтобы обратить внимание читателя на конкретные строки.
:::python hl_lines="1 3" # This line is emphasized # This line isn't # This line is emphasized
В результате 1-я и 3-я строки будут подсвечены.
Расширение codehilite
полностью обратно совместимо, поэтому при обнаружении блока кода, не определяющего язык, этот блок просто упаковывается в предварительные теги и выводится.
# Code goes here ...
В результате сгенерируется HTML:
<div class="codehilite"><pre><code># Code goes here ... </code></pre></div>
Для настройки вывода доступны следующие параметры:
linenums
: псевдоним для параметра форматирования белье Pygments. Возможные значения: True
, False
и None
. По умолчанию None
.True
заставит каждый блок кода иметь номера строк, даже при использовании двоеточий :::
для идентификации языка.False
отключит все номера строк, даже если для идентификации языка используются shebang
символы #!
.guess_lang
: автоматическое определение языка. По умолчанию True
.False
будет подсвечивать синтаксис в блоках с кодом только тогда, когда явно устанавливается язык.css_class
: задает имя класса CSS для тега <div>
, оборачивающего блок с кодом. По умолчанию - codehilite
.pygments_style
: задает тему подсветки pygments
(ColorScheme). По умолчанию default
.Примечание. Это полезно, только если для параметра noclasses
установлено значение True
, в противном случае стили CSS должны быть предоставлены конечным пользователем.noclasses
: включает встроенные стили вместо классов CSS. По умолчанию False
.use_pygments
: при генерации вывода указывает использование модуля pygments
.
Если True (по умолчанию) и доступен модуль pygments
, то расширение CodeHilite
будет использовать Pygments
для анализа и форматирования вывода. Кроме того, при использовании Pygments
>=2.4 вывод будет заключен в теги <code>
, тогда как в более ранних версиях этого не будет.
В противном случае Pygments использоваться не будут. Если для блока кода определен язык, то он будет назначен тегу кода как класс, способом, предложенным спецификацией HTML5, и может использоваться библиотекой JavaScript в браузере для выделения блока кода. Смотрите параметр lang_prefix
, чтобы настроить префикс.
lang_prefix
: префикс, добавленный к классу языка, назначенному тегу кода HTML. Язык по умолчанию language-
.
Этот параметр применяется только в том случае, если для параметра use_pygments
установлено значение False
, поскольку Pygments
не предоставляет возможности для включения языкового префикса.
import markdown text = """ #!/usr/bin/python # Code goes here ... """ config = {'codehilite':{'linenums': 'False', 'css_class': 'code-hilite'}} html = markdown.markdown(text, extensions=['codehilite'], extension_configs=config) print(html) # <div class="code-hilite"> # <pre><code> # <span class="ch">#!/usr/bin/python</span> # <span class="c1"># Code goes here ...</span> # </code></pre> # </div>