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
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
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']
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
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 }
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, }