В настоящее время я разрабатываю веб-приложение с использованием django и использую python-markdown для преобразования markdown в HTML.Есть несколько ситуаций, которые в настоящее время не обрабатывает разметка, и поэтому написали несколько базовых расширений.
"""
Helps make paras for Less framework
@div large-column float-left
# This is an H1
this is a paragraph right here!
and a new one
## Heading 2
and yet another one
--> becomes -->
<div class="large-column float left">
<h1>This is an H1</h1>
<p>this is a paragraph right here!</p>
<p>and a new one</p>
<h2>Heading 2</h2>
<p>and yet another one</p>
</div>
"""
import re
import markdown
# Global vars
LESS_BLOCK_RE = re.compile( \
r'@(?P<tag>div|span)[ ]*(?P<class>[a-zA-z0-9-\ ^\n]+)[ ]*\n(?P<inner>.*)(?=div|span)?',
re.MULTILINE|re.DOTALL
)
class LessFrameworkExtension(markdown.Extension):
def extendMarkdown(self, md, md_globals):
md.registerExtension(self)
md.preprocessors.add('less_framework', LessBlockPreprocessor(md),'_begin')
def reset(self):
print 'resetting'
class LessBlockPreprocessor(markdown.preprocessors.Preprocessor):
def __init__(self, md):
markdown.preprocessors.Preprocessor.__init__(self, md)
def getConfig(self, key):
if key in self.config:
return self.config[key][0]
else:
return None
def run(self, lines):
""" Match and store Less Framework Blocks in the HTML Stash """
text = "\n".join(lines)
while 1:
m = LESS_BLOCK_RE.search(text)
if m:
less_tag = m.group('tag')
less_class = m.group('class')
less_inner = m.group('inner')
print less_tag
print less_class
print less_inner
placeholder = self.markdown.htmlStash.store(less_inner, safe=True)
text = '<%s class="%s">\n%s\n</%s>' % (less_tag, less_class, placeholder, less_tag)
else:
break
return text.split("\n")
def _escape(self, txt):
""" basic html escaping """
txt = txt.replace('&', '&')
txt = txt.replace('<', '<')
txt = txt.replace('>', '>')
txt = txt.replace('"', '"')
return txt
def makeExtension(configs):
return LessFrameworkExtension(configs)
Вышеприведенное расширение работает частично, но вывод:
<div class="large-column float-left
">
wzxhzdk:0
</div>'
Похоже, это заполнитель магазина htmlStash.Возможно, мне не хватает вызова Python-Markdown?Глядя на аналогичные расширения в проекте python-markdown, кажется, что мой подход последовательный.
Любая помощь будет принята с благодарностью!
Пример ввода и ожидаемый результат
@div large-column float-left
# This is an H1
this is a paragraph right here!
and a new one
## Heading 2
and yet another one
Расширенная уценка -> становится -> HTML
<div class="large-column float left">
<h1>This is an H1</h1>
<p>this is a paragraph right here!</p>
<p>and a new one</p>
<h2>Heading 2</h2>
<p>and yet another one</p>
</div>