Единственный способ, о котором я знаю, - это разветвить расширение CodeHilite (и я разработчик). Сначала вам нужно будет сделать копию существующего расширения (это file), внесите изменения в код, необходимые для получения желаемого результата, и сохраните файл в вашем PYTHONPATH (вероятно, в каталоге «sitepackages», точное расположение которого зависит от того, в какой системе вы работаете и как Питон был установлен). Обратите внимание, что вам нужно создать уникальное имя для вашего файла, чтобы не конфликтовать с другими пакетами Python.
Как только вы это сделаете, вам нужно рассказать об этом Пеликану. Поскольку файл конфигурации Pelican — это просто Python, импортируйте новое расширение (используйте имя вашего файла без расширения файла: yourmodule.py
=> yourmodule
) и включите его в список расширений.
from yourmodule import CodeHiliteExtension
MD_EXTENSIONS = [
CodeHiliteExtension(css_class='highlight', linenums=False),
'extra']
Обратите внимание, что вызов CodeHiliteExtension
не является строкой, а фактически вызывает класс и передает соответствующие аргументы, которые вы можете настроить по мере необходимости.
И это должно быть так. Если вы хотите настроить более простой способ развертывания вашего расширения (или распространения его для использования другими), вы можете подумать о создании файла setup.py
, что выходит за рамки этого вопроса. См. этот учебник для получения помощи. к расширениям Markdown.
Если вам нужна конкретная помощь с изменениями, которые необходимо внести в код расширения, это зависит от того, чего вы хотите достичь. Для начала аргументы передаются в Pygments в строке 117. Самый простой подход — жестко запрограммировать там нужные параметры.
Имейте в виду, что если вы попытаетесь воспроизвести поведение в reStructuredText, вы, вероятно, будете разочарованы. Docutils оборачивает Pygments некоторой собственной обработкой. Фактически, некоторые параметры никогда не передаются в Pygments, а обрабатываются самим синтаксическим анализатором reStructeredText. Если я правильно помню, нумерация строк CSS является одной из таких функций. На самом деле Pygments не предлагает такой опции.
В этом случае вам нужно будет изменить свой форк расширения CodeHilite, заставив Pygments возвращать ненумерованный код, а затем самостоятельно применить необходимые хуки, прежде чем расширение вернет выделенный блок кода. Для этого вам, вероятно, потребуется разделить разрывы строк, а затем перебрать строки, соответствующим образом обернув каждую строку. Наконец, присоединитесь к вновь завернутым линиям и вернитесь.
Я подозреваю, что следующие (непроверенные) изменения помогут вам начать работу:
diff --git a/markdown/extensions/codehilite.py b/markdown/extensions/codehilite.py
index 0657c37..fbd127d 100644
--- a/markdown/extensions/codehilite.py
+++ b/markdown/extensions/codehilite.py
@@ -115,12 +115,18 @@ class CodeHilite(object):
except ValueError:
lexer = get_lexer_by_name('text')
formatter = get_formatter_by_name('html',
- linenos=self.linenums,
+ linenos=self.linenums if self.linenumes != 'css' else False,
cssclass=self.css_class,
style=self.style,
noclasses=self.noclasses,
hl_lines=self.hl_lines)
- return highlight(self.src, lexer, formatter)
+ result = highlight(self.src, lexer, formatter)
+ if self.linenums == 'css':
+ lines = result.split('\n')
+ for i, line in enumerate(lines):
+ lines[i] = '<div class="line">%s</div>' % line
+ result = '\n'.join(lines)
+ return result
else:
# just escape and build markup usable by JS highlighting libs
txt = self.src.replace('&', '&')
Вы можете добиться большего успеха в достижении того, чего хотите, отключив Pygments и используя библиотеку JavaScript для выделения. Это зависит от того, какую библиотеку JavaScript вы выберете и какие функции она имеет.
person
Waylan
schedule
15.04.2015