заполнитель python-markdown htmlStash не заменяется - PullRequest
2 голосов
/ 13 августа 2011

В настоящее время я разрабатываю веб-приложение с использованием 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('&', '&amp;')
        txt = txt.replace('<', '&lt;')
        txt = txt.replace('>', '&gt;')
        txt = txt.replace('"', '&quot;')
        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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...