Пример #1
0
def parse_creole(request, markup):
    """Parse some creole markup and create a genshi stream."""
    return Parser(dialect=Creole10(
        wiki_links_base_url=request.url_root,
        wiki_links_space_char='_',
        no_wiki_monospace=True,
        use_additions=True
    )).generate(markup)
Пример #2
0
        app = get_application()
        for extension in app.markup_extensions:
            macros[extension.name] = make_macro(extension)
        macros_set_up = True
    if macro_name in macros:
        return macros[macro_name](body, args, kwargs, is_block, environ)


zinecreole = create_dialect(creole11_base,
                            wiki_links_base_url=u'',
                            wiki_links_path_func=path_func,
                            wiki_links_space_char=u'_',
                            no_wiki_monospace=True,
                            macro_func=macro_func)

creole_parser = Parser(dialect=zinecreole())


class CreoleParser(BaseParser):
    """Creole wiki markup parser.

    >>> p = CreoleParser(app=None)
    >>> p.parse(u'Hello **there**', 'entry').to_html()
    u'<p>Hello <strong>there</strong></p>\\n'
    >>> p.parse(u'<<intro>>\\nHello //again//\\n<</intro>>\\n '
    ... u'that was the __intro__.', 'entry').to_html()
    u'<intro><p>Hello <em>again</em></p>\\n</intro><p> that was the <u>intro</u>.</p>\\n'
    """

    name = _(u'Creole')
Пример #3
0
#!/usr/bin/env python
import os
import sqlite3

import macros
from creoleparser import Parser, create_dialect, creole11_base

import circuits
from circuits.web import Controller, Logger, Server, Static

text2html = Parser(create_dialect(creole11_base, macro_func=macros.dispatcher),
                   method="xhtml")


class Wiki(object):
    def __init__(self, database):
        super(Wiki, self).__init__()

        create = not os.path.exists(database)

        self._cx = sqlite3.connect(database)
        self._cu = self._cx.cursor()

        if create:
            self._cu.execute("CREATE TABLE pages (name, text)")
            for defaultpage in os.listdir("defaultpages"):
                filename = os.path.join("defaultpages", defaultpage)
                self.save(defaultpage, open(filename, "r").read())

    def save(self, name, text):
        self._cu.execute("SELECT COUNT() FROM pages WHERE name=?", (name, ))
Пример #4
0
def wiki_link_cb(page_name):
    if page_name.startswith('media:'):
        return settings.MEDIA_URL + page_name.replace('media:', '', count=1)
    else:
        if page_name_re.match(page_name):
            return reverse('scenario.show', args=(page_name, ))
        else:
            return False


def wiki_image_cb(page_name):
    return settings.MEDIA_URL + page_name


_non_bodied_macros = {'ip': ip}
_bodied_macros = {
    'enterSecret': enter_secret,
    'requireSecret': require_secret,
    'spoiler': spoiler,
    'code': code,
    'color': color,
    'highlight': highlight_
}
_dialect = create_dialect(creole11_base,
                          non_bodied_macros=_non_bodied_macros,
                          bodied_macros=_bodied_macros,
                          custom_markup=[(comment_re, comment)],
                          wiki_links_path_func=[wiki_link_cb, wiki_image_cb])

render_scenario = Parser(dialect=_dialect, method='xhtml')
Пример #5
0
    def __init__(self, config):
        super(Environment, self).__init__()

        self.config = config

        self.dbm = DatabaseManager(
            self.config.get("db"),
            echo=(self.config.get("debug") and self.config.get("verbose")),
        ).register(self)

        self.storage = DefaultStorage(
            self.config,
            self.config.get("repo"),
            charset=self.config.get("encoding"),
        )

        self.search = WikiSearch(
            self.dbm.session,
            self.config.get("language"),
            self.storage,
        )

        self.parser = Parser(create_dialect(
            creole11_base,
            macro_func=macros.dispatcher,
            wiki_links_base_url="/",
            wiki_links_class_func=self._wiki_links_class_func,
            wiki_links_path_func=self._wiki_links_path_func,
        ),
                             method="xhtml")

        template_config = {
            "allow_exec":
            False,
            "auto_reload":
            True,
            "default_encoding":
            self.config.get("encoding"),
            "search_path": [
                self.storage.path,
                os.path.join(self.config.get("theme"), "templates"),
            ],
            "variable_lookup":
            "lenient",
        }

        self.templates = TemplateLoader(**template_config)

        self.macros = macros.loadMacros()

        self.stylesheets = []
        self.version = sahriswiki.__version__

        self.site = {
            "name": self.config.get("name"),
            "author": self.config.get("author"),
            "keywords": self.config.get("keywords"),
            "description": self.config.get("description"),
        }

        self.request = None
        self.response = None
Пример #6
0
 def restore(self, creole):
     self.hyperMgr.reset()
     document = Parser(unicode(creole, 'utf-8', 'ignore')).parse()
     return TextTagEmitter(document, self.txt, self.hyperMgr,
                           self.bullet_image).emit()
template_loader = TemplateLoader(TEMPLATE_PATH,
                                 auto_reload=True,
                                 variable_lookup='lenient')

# context locals.  these two objects are use by the application to
# bind objects to the current context.  A context is defined as the
# current thread and the current greenlet if there is greenlet support.
local = Local()
local_manager = LocalManager([local])
request = local('request')
application = local('application')

# create a new creole parser
creole_parser = Parser(
    dialect=Creole10(wiki_links_base_url='',
                     wiki_links_path_func=lambda page_name: href(page_name),
                     wiki_links_space_char='_',
                     no_wiki_monospace=True,
                     use_additions=True))


def generate_template(template_name, **context):
    """Load and generate a template."""
    context.update(href=href, format_datetime=format_datetime)
    return template_loader.load(template_name).generate(**context)


def parse_creole(markup):
    """Parse some creole markup and create a genshi stream."""
    return creole_parser.generate(markup)

Пример #8
0
from creoleparser import Parser, create_dialect, creole11_base

def enter_secret(macro, environ, *secrets):
    environ['secrets'].update(secrets)

def macro_func(name, argument, body, type, environ):
    return body

_dialect = create_dialect(creole11_base, macro_func=macro_func,
        bodied_macros={'enterSecret': enter_secret},)
_render = Parser(dialect=_dialect, method='xhtml')

def extract_secrets(text):
    environ = {'secrets': set()}
    # Parse to populate environ['secrets'], discard xhtml
    _render(text, environ=environ)
    return environ['secrets']