Ejemplo n.º 1
0
def uri(argument):
    """
    Return the URI argument with unescaped whitespace removed.
    (Directive option conversion function.)

    Raise ``ValueError`` if no argument is found.
    """
    if argument is None:
        raise ValueError('argument required but none supplied')
    else:
        parts = split_escaped_whitespace(escape2null(argument))
        uri = ' '.join(''.join(unescape(part).split()) for part in parts)
        return uri
Ejemplo n.º 2
0
def uri(argument):
    """
    Return the URI argument with unescaped whitespace removed.
    (Directive option conversion function.)

    Raise ``ValueError`` if no argument is found.
    """
    if argument is None:
        raise ValueError('argument required but none supplied')
    else:
        parts = split_escaped_whitespace(escape2null(argument))
        uri = ' '.join(''.join(unescape(part).split()) for part in parts)
        return uri
    def phrase_ref(
        self, before: str, after: str, rawsource: str, escaped: str, text: str
    ) -> DispatchResult:
        """Handle phrase references e.g. `phrase ref`_, `embedded <ref_>`_ """
        match = self.patterns.embedded_link.search(escaped)
        if match:  # embedded <URI> or <alias_>
            text = unescape(escaped[: match.start(0)])
            rawtext = unescape(escaped[: match.start(0)], True)
            aliastext = unescape(match.group(2))
            rawaliastext = unescape(match.group(2), True)
            underscore_escaped = rawaliastext.endswith(r"\_")
            if aliastext.endswith("_") and not (
                underscore_escaped or self.patterns.uri.match(aliastext)
            ):
                aliastype = "name"
                alias = normalize_name(aliastext[:-1])
                target = nodes.target(match.group(1), refname=alias)
                target.indirect_reference_name = aliastext[:-1]
            else:
                aliastype = "uri"
                alias_parts = split_escaped_whitespace(match.group(2))
                alias = " ".join(
                    "".join(unescape(part).split()) for part in alias_parts
                )
                alias = self.adjust_uri(alias)
                if alias.endswith(r"\_"):
                    alias = alias[:-2] + "_"
                target = nodes.target(match.group(1), refuri=alias)
                target.referenced = 1
            if not aliastext:
                raise ApplicationError("problem with embedded link: %r" % aliastext)
            if not text:
                text = alias
                rawtext = rawaliastext
        else:
            target = None
            rawtext = unescape(escaped, True)

        refname = normalize_name(text)
        reference = nodes.reference(
            rawsource, text, name=whitespace_normalize_name(text)
        )
        reference[0].rawsource = rawtext

        node_list = [reference]

        if rawsource[-2:] == "__":
            if target and (aliastype == "name"):
                reference["refname"] = alias
                self.document.note_refname(reference)
                # self.document.note_indirect_target(target) # required?
            elif target and (aliastype == "uri"):
                reference["refuri"] = alias
            else:
                reference["anonymous"] = 1
        else:
            if target:
                target["names"].append(refname)
                if aliastype == "name":
                    reference["refname"] = alias
                    self.document.note_indirect_target(target)
                    self.document.note_refname(reference)
                else:
                    reference["refuri"] = alias
                    self.document.note_explicit_target(target, self.parent)
                # target.note_referenced_by(name=refname)
                node_list.append(target)
            else:
                reference["refname"] = refname
                self.document.note_refname(reference)
        return before, node_list, after, []