예제 #1
0
 def check_docutils_inliner(po, msgstr):
     inliner = Inliner()
     settings = AttrDict({'character_level_inline_markup': False, 'pep_references': None, 'rfc_references': None})
     inliner.init_customizations(settings)
     document = new_document(None)
     document.settings.syntax_highlight = 'long'
     stream = StringIO()
     reporter = Reporter(po.file, report_level=Reporter.WARNING_LEVEL,
                         halt_level=Reporter.SEVERE_LEVEL, stream=stream)
     memo = Struct(document=document, reporter=reporter, language=None, inliner=inliner)
     inliner.parse(msgstr, po.current_index, memo, None)
     return stream.getvalue()
예제 #2
0
    def _parse(self, line):
        """
        Parses a single line/string for inline rst statements, like strong, emphasis, literal, ...

        :param line: string to parse
        :return: nodes
        """
        inline_parser = Inliner()
        inline_parser.init_customizations(self.doc_settings)
        result, message = inline_parser.parse(line, 0, self.doc_memo, self.dummy_doc)
        if message:
            raise SphinxNeedLayoutException(message)
        return result
예제 #3
0
 def rolefunc(
     role_name: str,  # e.g. "role"
     rawtext: str,  # e.g. ":role:`text`"
     text: str,  # e.g. "text"
     lineno: int,
     inliner: Inliner,
     options: Dict[str, Any] = None,
     content: List[str] = None,
 ) -> Tuple[List[Node], List[str]]:
     """
     Attempt to implemented substitutions inside inline markup.
     This is not directly supported:
         https://sourceforge.net/p/docutils/feature-requests/53/
     Role functions: see
         http://docutils.sourceforge.net/docs/howto/rst-roles.html
     See also:
         https://github.com/sphinx-doc/sphinx/issues/2173
     Returns the tuple (nodes, messages).
     Search docutils for "role_fn" to see how this function will be called.
     """
     options = options or {}  # type: Dict[str, Any]
     content = content or []  # type: List[str]
     log.debug("rolefunc() called with role_name={rn!r}, rawtext={rt!r}, "
               "text={t!r}, lineno={ln}, inliner={i!r}, "
               "options={o!r}, content={c!r}".format(
                   rn=role_name,
                   rt=rawtext,
                   t=text,
                   ln=lineno,
                   i=inliner,
                   o=options,
                   c=content,
               ))
     parsed_nodes, parsed_msgs = inliner.parse(
         text=text, lineno=0, memo=inliner,
         parent=None)  # type: Tuple[List[Node], List[str]]
     top_node = nodes.inline(  # was nodes.inline
         text="", refid=css_class, **options)  # type: Element
     top_node["classes"].append(
         css_class)  # see deprecated Element.set_class  # noqa
     top_node += parsed_nodes  # adds children to this_node; see Element
     return [top_node], []
예제 #4
0
def _role_annot(
    name: str,
    rawtext: str,
    text: str,
    lineno: int,
    inliner: Inliner,
    options: Dict[str, Any] = {},
    content: Sequence[str] = (),
    # *,  # https://github.com/ambv/black/issues/613
    additional_classes: Iterable[str] = (),
) -> Tuple[List[Node], List[SystemMessage]]:
    options = options.copy()
    set_classes(options)
    if additional_classes:
        options["classes"] = options.get("classes", []).copy()
        options["classes"].extend(additional_classes)
    memo = Struct(document=inliner.document,
                  reporter=inliner.reporter,
                  language=inliner.language)
    node = nodes.inline(unescape(rawtext), "", **options)
    children, messages = inliner.parse(_unescape(text), lineno, memo, node)
    node.extend(children)
    return [node], messages