Beispiel #1
0
    def macro(self, name, args, text, context_block=False):
        func = getattr(self, '_{0}_repl'.format(name), None)
        if func is not None:
            logging.debug("builtin macro: %r" % name)
            return func(args, text, context_block)

        logging.debug("extension macro: %r" % name)
        tag = context_block and moin_page.part or moin_page.inline_part

        elem = tag(
            attrib={
                moin_page.alt: text,
                moin_page.content_type: 'x-moin/macro;name=' + name,
            })

        if args:
            elem_arguments = moin_page.arguments()
            elem.append(elem_arguments)

            for key, value in args.items():
                attrib = {}
                if key:
                    attrib[moin_page.name] = key
                elem_arg = moin_page.argument(attrib=attrib,
                                              children=(value, ))
                elem_arguments.append(elem_arg)

        return elem
Beispiel #2
0
    def parser(self, name, args, content):
        if '/' in name:
            type = Type(name)
        else:
            type = Type(type='x-moin',
                        subtype='format',
                        parameters={'name': name})
        logging.debug("parser type: %r" % (type, ))

        elem = moin_page.part(attrib={moin_page.content_type: type})

        if args:
            elem_arguments = moin_page.arguments()
            elem.append(elem_arguments)

            for key, value in args.items():
                attrib = {}
                if key:
                    attrib[moin_page.name] = key
                elem_arg = moin_page.argument(attrib=attrib,
                                              children=(value, ))
                elem_arguments.append(elem_arg)

        if content:
            elem.append(moin_page.body(children=content))

        return elem
Beispiel #3
0
    def macro(self, name, args, text, context_block=False):
        func = getattr(self, '_{0}_repl'.format(name), None)
        if func is not None:
            logging.debug("builtin macro: %r" % name)
            return func(args, text, context_block)

        logging.debug("extension macro: %r" % name)
        tag = context_block and moin_page.part or moin_page.inline_part

        elem = tag(attrib={
            moin_page.alt: text,
            moin_page.content_type: 'x-moin/macro;name=' + name,
        })

        if args:
            elem_arguments = moin_page.arguments()
            elem.append(elem_arguments)

            for key, value in args.items():
                attrib = {}
                if key:
                    attrib[moin_page.name] = key
                elem_arg = moin_page.argument(attrib=attrib, children=(value, ))
                elem_arguments.append(elem_arg)

        return elem
Beispiel #4
0
    def visit_reference(self, node):
        refuri = node.get('refuri', u'')
        if refuri.startswith(u'<<') and refuri.endswith(u'>>'):  # moin macro
            macro_name = refuri[2:-2].split(u'(')[0]
            if macro_name == u"TableOfContents":
                arguments = refuri[2:-2].split(u'(')[1][:-1].split(u',')
                node = moin_page.table_of_content()
                self.open_moin_page_node(node)
                if arguments and arguments[0]:
                    node.set(moin_page.outline_level, arguments[0])
                return
            arguments = refuri[2:-2].split(u'(')[1][:-1].split(u',')
            self.open_moin_page_node(
                moin_page.part(
                    attrib={moin_page.content_type: "x-moin/macro;name={0}".format(macro_name)}))
            if arguments:
                self.open_moin_page_node(moin_page.arguments())
                for i in arguments:
                    self.open_moin_page_node(moin_page.argument(children=[i]))
                    self.close_moin_page_node()
                self.close_moin_page_node()
            self.open_moin_page_node(refuri)
            self.close_moin_page_node()
            return

        if not allowed_uri_scheme(refuri):
            return
        self.open_moin_page_node(moin_page.a(attrib={xlink.href: refuri}))
Beispiel #5
0
    def visit_reference(self, node):
        refuri = node.get('refuri', u'')
        if refuri.startswith(u'<<') and refuri.endswith(u'>>'):  # moin macro
            macro_name = refuri[2:-2].split(u'(')[0]
            if macro_name == u"TableOfContents":
                arguments = refuri[2:-2].split(u'(')[1][:-1].split(u',')
                node = moin_page.table_of_content()
                self.open_moin_page_node(node)
                if arguments and arguments[0]:
                    node.set(moin_page.outline_level, arguments[0])
                return
            arguments = refuri[2:-2].split(u'(')[1][:-1].split(u',')
            self.open_moin_page_node(
                moin_page.part(
                    attrib={
                        moin_page.content_type:\
                            "x-moin/macro;name=%s" % macro_name, }))
            if arguments:
                self.open_moin_page_node(moin_page.arguments())
                for i in arguments:
                    self.open_moin_page_node(moin_page.argument(children=[i]))
                    self.close_moin_page_node()
                self.close_moin_page_node()
            self.open_moin_page_node(refuri)
            self.close_moin_page_node()
            return

        self.open_moin_page_node(moin_page.a(attrib={xlink.href: refuri}))
Beispiel #6
0
    def visit_reference(self, node):
        refuri = node.get('refuri', u'')
        if refuri.startswith(u'<<') and refuri.endswith(u'>>'):  # moin macro
            macro_name = refuri[2:-2].split(u'(')[0]
            if macro_name == u"TableOfContents":
                arguments = refuri[2:-2].split(u'(')[1][:-1].split(u',')
                node = moin_page.table_of_content()
                self.open_moin_page_node(node)
                if arguments and arguments[0]:
                    node.set(moin_page.outline_level, arguments[0])
                return
            if macro_name == u"Include":
                # include macros are expanded by include.py similar to transclusions
                # rst include handles only wiki pages and does not support additional arguments like moinwiki
                arguments = refuri[2:-2].split(u'(')[1][:-1].split(u',')
                link = Iri(scheme=u'wiki.local', path=arguments)
                node = xinclude.include(
                    attrib={
                        xinclude.href: link,
                        moin_page.alt: refuri,
                        moin_page.content_type: 'x-moin/macro;name=' +
                        macro_name,
                    })
                self.open_moin_page_node(node)
                return
            try:
                arguments = refuri[2:-2].split(u'(')[1][:-1]
            except IndexError:
                arguments = u''  # <<DateTime>>

            self.open_moin_page_node(
                moin_page.inline_part(
                    attrib={
                        moin_page.content_type:
                        "x-moin/macro;name={0}".format(macro_name)
                    }))
            if arguments:
                self.open_moin_page_node(moin_page.arguments())
                self.open_moin_page_node(arguments)
                self.close_moin_page_node()
                self.close_moin_page_node()
            return

        if not allowed_uri_scheme(refuri):
            self.visit_error(node)
            return
        if refuri == u'':
            # build a link to a heading or an explicitly defined anchor
            refuri = Iri(scheme='wiki.local',
                         fragment=node.attributes['name'].replace(' ', '_'))
        self.open_moin_page_node(moin_page.a(attrib={xlink.href: refuri}))
Beispiel #7
0
 def visit_literal_block(self, node):
     parser = node.get('parser', u'')
     if parser:
         named_args = re.findall(r"(\w+)=(\w+)", parser)
         simple_args = re.findall(r"(?:\s)\w+(?:\s|$)", parser)
         args = []
         for value in simple_args:
             args.append(moin_page.argument(children=[value]))
         for name, value in named_args:
             args.append(moin_page.argument(attrib={moin_page.name: name}, children=[value]))
         arguments = moin_page.arguments(children=args)
         self.open_moin_page_node(moin_page.part(children=[arguments], attrib={moin_page.content_type: "x-moin/format;name={0}".format(parser.split(' ')[0])}))
     else:
         self.open_moin_page_node(moin_page.blockcode())
Beispiel #8
0
 def visit_literal_block(self, node):
     parser = node.get('parser', u'')
     if parser:
         named_args = re.findall(r"(\w+)=(\w+)", parser)
         simple_args = re.findall(r"(?:\s)\w+(?:\s|$)", parser)
         args = []
         for value in simple_args:
             args.append(moin_page.argument(children=[value]))
         for name, value in named_args:
             args.append(
                 moin_page.argument(attrib={moin_page.name: name},
                                    children=[value]))
         arguments = moin_page.arguments(children=args)
         self.open_moin_page_node(
             moin_page.part(children=[arguments],
                            attrib={
                                moin_page.content_type:
                                "x-moin/format;name=%s" %
                                parser.split(' ')[0]
                            }))
     else:
         self.open_moin_page_node(moin_page.blockcode())
Beispiel #9
0
    def parser(self, name, args, content):
        if '/' in name:
            type = Type(name)
        else:
            type = Type(type='x-moin', subtype='format', parameters={'name': name})
        logging.debug("parser type: %r" % (type, ))

        elem = moin_page.part(attrib={moin_page.content_type: type})

        if args:
            elem_arguments = moin_page.arguments()
            elem.append(elem_arguments)

            for key, value in args.items():
                attrib = {}
                if key:
                    attrib[moin_page.name] = key
                elem_arg = moin_page.argument(attrib=attrib, children=(value, ))
                elem_arguments.append(elem_arg)

        if content:
            elem.append(moin_page.body(children=content))

        return elem