Example #1
0
    def run(self, input_lines, document, input_offset=0, match_titles=1,
            inliner=None):
        """
        Parse `input_lines` and modify the `document` node in place.

        Extend `StateMachineWS.run()`: set up parse-global data and
        run the StateMachine.
        """
        self.language = languages.get_language(
            document.settings.language_code)
        self.match_titles = match_titles
        if inliner is None:
            inliner = Inliner()
        self.memo = Struct(document=document,
                           reporter=document.reporter,
                           language=self.language,
                           section_level=0,
                           inliner=inliner)
        self.document = document
        self.attach_observer(document.note_source)
        self.reporter = self.memo.reporter
        self.node = document
        results = StateMachineWS.run(self, input_lines, input_offset,
                                     input_source=document['source'])
        assert results == [], 'SimpleParserStateMachine.run() results should be empty!'
        self.node = self.memo = None    # remove unneeded references
Example #2
0
 def __init__(self, renderer, lineno: int):
     self._renderer = renderer
     self._lineno = lineno
     self.document = renderer.document
     self.language = get_language(renderer.language_module)
     self.reporter = self.document.reporter
     self.node = renderer.current_node
     self.match_titles = True
Example #3
0
    def reset(self, document, parent, level):
        """Reset the state of state machine.

        After reset, self and self.state can be used to
        passed to docutils.parsers.rst.Directive.run

        Parameters
        ----------
        document: docutils document
            Current document of the node.
        parent: parent node
            Parent node that will be used to interpret role and directives.
        level: int
            Current section level.
        """
        self.language = languages.get_language(
            document.settings.language_code)
        # setup memo
        self.memo.document = document
        self.memo.reporter = document.reporter
        self.memo.language = self.language
        self.memo.section_level = level
        # setup inliner
        if self.memo.inliner is None:
            self.memo.inliner = Inliner()
            self.memo.inliner.init_customizations(document.settings)
        inliner = self.memo.inliner
        inliner.reporter = document.reporter
        inliner.document = document
        inliner.language = self.language
        inliner.parent = parent
        # setup self
        self.document = document
        self.reporter = self.memo.reporter
        self.node = parent
        self.state.runtime_init()
        self.input_lines = document['source']
Example #4
0
    def reset(self, document, parent, level):
        """Reset the state of state machine.

        After reset, self and self.state can be used to
        passed to docutils.parsers.rst.Directive.run

        Parameters
        ----------
        document: docutils document
            Current document of the node.
        parent: parent node
            Parent node that will be used to interpret role and directives.
        level: int
            Current section level.
        """
        self.language = languages.get_language(
            document.settings.language_code)
        # setup memo
        self.memo.document = document
        self.memo.reporter = document.reporter
        self.memo.language = self.language
        self.memo.section_level = level
        # setup inliner
        if self.memo.inliner is None:
            self.memo.inliner = Inliner()
            self.memo.inliner.init_customizations(document.settings)
        inliner = self.memo.inliner
        inliner.reporter = document.reporter
        inliner.document = document
        inliner.language = self.language
        inliner.parent = parent
        # setup self
        self.document = document
        self.reporter = self.memo.reporter
        self.node = parent
        self.state.runtime_init()
        self.input_lines = document['source']
Example #5
0
    def run(self, input_lines, document, input_offset=0, match_titles=1,
            inliner=None):
        """
        Parse `input_lines` and modify the `document` node in place.

        Extend `StateMachineWS.run()`: set up parse-global data and
        run the StateMachine.
        """
        self.language = languages.get_language(
            document.settings.language_code)
        self.match_titles = match_titles
        if inliner is None:
            inliner = Inliner()
        inliner.init_customizations(document.settings)
        self.memo = states.Struct(document=document,
                           reporter=document.reporter,
                           language=self.language,
                           title_styles=[],
                           section_level=0,
                           section_bubble_up_kludge=0,
                           inliner=inliner)
        self.document = document
        self.attach_observer(document.note_source)
        self.reporter = self.memo.reporter
        self.node = document
        self.debug = True
#        print "\n| ".join(input_lines)
#        assert sys.stderr.encoding
#        assert document.settings.input_encoding == 'unicode'
#        assert document.settings.output_encoding == 'unicode'
#        assert document.settings.error_encoding == 'unicode'
#        assert document.settings.error_encoding_error_handler == 'replace'
# FIXME: why is stderr encoding not set?
        results = StateMachineWS.run(self, input_lines, input_offset,
                                     input_source=document['source'])
        assert results == [], 'AtlassianStateMachine.run() results should be empty!'
        self.node = self.memo = None    # remove unneeded references
Example #6
0
    def __init__(self, app, need, layout, node, style=None, fromdocname=None):
        self.app = app
        self.need = need

        self.layout_name = layout
        available_layouts = getattr(app.config, 'needs_layouts', {})
        if self.layout_name not in available_layouts.keys():
            raise SphinxNeedLayoutException(
                'Given layout "{}" is unknown for need {}. Registered layouts are: {}'
                .format(self.layout_name, need['id'],
                        ' ,'.join(available_layouts.keys())))
        self.layout = available_layouts[self.layout_name]

        self.node = node

        # Used, if need is referenced from another page
        if fromdocname is None:
            self.fromdocname = need['docname']
        else:
            self.fromdocname = fromdocname

        classes = [
            "need", 'needs_grid_' + self.layout['grid'],
            'needs_layout_' + self.layout_name
        ]

        if style is not None:
            self.style = style
        elif self.need['style'] is not None:
            self.style = self.need['style']
        else:
            self.style = getattr(self.app.config, 'needs_default_style', None)

        if self.style and len(self.style) > 0:
            for style in self.style.strip().split(','):
                style = style.strip()
                classes.append('needs_style_' + style)
        else:
            classes.append('needs_style_none')

        classes.append('needs_type_' + ''.join(self.need['type'].split()))

        self.node_table = nodes.table(classes=classes, ids=[self.need['id']])
        self.node_tbody = nodes.tbody()

        self.grids = {
            'simple': {
                'func': self._grid_simple,
                'configs': {
                    'colwidths': [100],
                    'side_left': False,
                    'side_right': False,
                    'footer': False
                }
            },
            'simple_side_left': {
                'func': self._grid_simple,
                'configs': {
                    'colwidths': [30, 70],
                    'side_left': 'full',
                    'side_right': False,
                    'footer': False
                }
            },
            'simple_side_right': {
                'func': self._grid_simple,
                'configs': {
                    'colwidths': [70, 30],
                    'side_left': False,
                    'side_right': 'full',
                    'footer': False
                }
            },
            'simple_side_left_partial': {
                'func': self._grid_simple,
                'configs': {
                    'colwidths': [20, 80],
                    'side_left': 'part',
                    'side_right': False,
                    'footer': False
                }
            },
            'simple_side_right_partial': {
                'func': self._grid_simple,
                'configs': {
                    'colwidths': [80, 20],
                    'side_left': False,
                    'side_right': 'part',
                    'footer': False
                }
            },
            'complex': self._grid_complex,
            'content': {
                'func': self._grid_content,
                'configs': {
                    'colwidths': [100],
                    'side_left': False,
                    'side_right': False,
                    'footer': False
                }
            },
            'content_footer': {
                'func': self._grid_content,
                'configs': {
                    'colwidths': [100],
                    'side_left': False,
                    'side_right': False,
                    'footer': True
                }
            },
            'content_side_left': {
                'func': self._grid_content,
                'configs': {
                    'colwidths': [5, 95],
                    'side_left': True,
                    'side_right': False,
                    'footer': False
                }
            },
            'content_side_right': {
                'func': self._grid_content,
                'configs': {
                    'colwidths': [95, 5],
                    'side_left': False,
                    'side_right': True,
                    'footer': False
                }
            },
            'content_footer_side_left': {
                'func': self._grid_content,
                'configs': {
                    'colwidths': [5, 95],
                    'side_left': True,
                    'side_right': False,
                    'footer': True
                }
            },
            'content_footer_side_right': {
                'func': self._grid_content,
                'configs': {
                    'colwidths': [95, 5],
                    'side_left': False,
                    'side_right': True,
                    'footer': True
                }
            },
        }

        # Dummy Document setup
        self.doc_settings = OptionParser(
            components=(Parser, )).get_default_values()
        self.dummy_doc = new_document("dummy", self.doc_settings)
        self.doc_language = languages.get_language(
            self.dummy_doc.settings.language_code)
        self.doc_memo = Struct(document=self.dummy_doc,
                               reporter=self.dummy_doc.reporter,
                               language=self.doc_language,
                               title_styles=[],
                               section_level=0,
                               section_bubble_up_kludge=False,
                               inliner=None)

        self.functions = {
            'meta': self.meta,
            'meta_all': self.meta_all,
            'meta_links': self.meta_links,
            'meta_links_all': self.meta_links_all,
            'meta_id': self.meta_id,
            'image': self.image,
            'link': self.link,
            'collapse_button': self.collapse_button
        }
Example #7
0
    def __init__(self, app, need, layout, node, style=None, fromdocname=None):
        self.app = app
        self.need = need

        self.layout_name = layout
        available_layouts = app.config.needs_layouts
        if self.layout_name not in available_layouts.keys():
            raise SphinxNeedLayoutException(
                'Given layout "{}" is unknown for need {}. Registered layouts are: {}'.format(
                    self.layout_name, need["id"], " ,".join(available_layouts.keys())
                )
            )
        self.layout = available_layouts[self.layout_name]

        self.node = node

        # Used, if need is referenced from another page
        if fromdocname is None:
            self.fromdocname = need["docname"]
        else:
            self.fromdocname = fromdocname

        # For ReadTheDocs Theme we need to add 'rtd-exclude-wy-table'.
        classes = ["need", "needs_grid_" + self.layout["grid"], "needs_layout_" + self.layout_name]
        classes.extend(app.config.needs_table_classes)

        self.style = style or self.need["style"] or getattr(self.app.config, "needs_default_style", None)

        if self.style:
            for style in self.style.strip().split(","):
                style = style.strip()
                classes.append("needs_style_" + style)
        else:
            classes.append("needs_style_none")

        classes.append("needs_type_" + "".join(self.need["type"].split()))

        self.node_table = nodes.table(classes=classes, ids=[self.need["id"]])
        self.node_tbody = nodes.tbody()

        self.grids = {
            "simple": {
                "func": self._grid_simple,
                "configs": {"colwidths": [100], "side_left": False, "side_right": False, "footer": False},
            },
            "simple_footer": {
                "func": self._grid_simple,
                "configs": {"colwidths": [100], "side_left": False, "side_right": False, "footer": True},
            },
            "simple_side_left": {
                "func": self._grid_simple,
                "configs": {"colwidths": [30, 70], "side_left": "full", "side_right": False, "footer": False},
            },
            "simple_side_right": {
                "func": self._grid_simple,
                "configs": {"colwidths": [70, 30], "side_left": False, "side_right": "full", "footer": False},
            },
            "simple_side_left_partial": {
                "func": self._grid_simple,
                "configs": {"colwidths": [20, 80], "side_left": "part", "side_right": False, "footer": False},
            },
            "simple_side_right_partial": {
                "func": self._grid_simple,
                "configs": {"colwidths": [80, 20], "side_left": False, "side_right": "part", "footer": False},
            },
            "complex": self._grid_complex,
            "content": {
                "func": self._grid_content,
                "configs": {"colwidths": [100], "side_left": False, "side_right": False, "footer": False},
            },
            "content_footer": {
                "func": self._grid_content,
                "configs": {"colwidths": [100], "side_left": False, "side_right": False, "footer": True},
            },
            "content_side_left": {
                "func": self._grid_content,
                "configs": {"colwidths": [5, 95], "side_left": True, "side_right": False, "footer": False},
            },
            "content_side_right": {
                "func": self._grid_content,
                "configs": {"colwidths": [95, 5], "side_left": False, "side_right": True, "footer": False},
            },
            "content_footer_side_left": {
                "func": self._grid_content,
                "configs": {"colwidths": [5, 95], "side_left": True, "side_right": False, "footer": True},
            },
            "content_footer_side_right": {
                "func": self._grid_content,
                "configs": {"colwidths": [95, 5], "side_left": False, "side_right": True, "footer": True},
            },
        }

        # Dummy Document setup
        self.doc_settings = OptionParser(components=(Parser,)).get_default_values()
        self.dummy_doc = new_document("dummy", self.doc_settings)
        self.doc_language = languages.get_language(self.dummy_doc.settings.language_code)
        self.doc_memo = Struct(
            document=self.dummy_doc,
            reporter=self.dummy_doc.reporter,
            language=self.doc_language,
            title_styles=[],
            section_level=0,
            section_bubble_up_kludge=False,
            inliner=None,
        )

        self.functions = {
            "meta": self.meta,
            "meta_all": self.meta_all,
            "meta_links": self.meta_links,
            "meta_links_all": self.meta_links_all,
            "meta_id": self.meta_id,
            "image": self.image,
            "link": self.link,
            "collapse_button": self.collapse_button,
            "permalink": self.permalink,
        }

        # Prepare string_links dict, so that regex and templates get not recompiled too often.
        #
        # Do not set needs_string_links here and update it.
        # This would lead to deepcopy()-errors, as needs_string_links gets some "pickled" and jinja Environment is
        # too complex for this.
        self.string_links = {}
        for link_name, link_conf in app.config.needs_string_links.items():
            self.string_links[link_name] = {
                "url_template": Environment(loader=BaseLoader).from_string(link_conf["link_url"]),
                "name_template": Environment(loader=BaseLoader).from_string(link_conf["link_name"]),
                "regex_compiled": re.compile(link_conf["regex"]),
                "options": link_conf["options"],
                "name": link_name,
            }