⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 states.py

📁 Requirement =====================================================================================
💻 PY
📖 第 1 页 / 共 5 页
字号:
                        \?%(uric)s*                        %(uri_end)s                      )?                      (                       # optional fragment                        \#%(uric)s*                        %(uri_end)s                      )?                    )                  )                |                       # *OR*                  (?P<email>              # email address                    """ + email_pattern + r"""                  )                )                %(end_string_suffix)s                """) % locals(), re.VERBOSE),          pep=re.compile(                r"""                %(start_string_prefix)s                (                  (pep-(?P<pepnum1>\d+)(.txt)?) # reference to source file                |                  (PEP\s+(?P<pepnum2>\d+))      # reference by name                )                %(end_string_suffix)s""" % locals(), re.VERBOSE),          rfc=re.compile(                r"""                %(start_string_prefix)s                (RFC(-|\s+)?(?P<rfcnum>\d+))                %(end_string_suffix)s""" % locals(), re.VERBOSE))    def quoted_start(self, match):        """Return 1 if inline markup start-string is 'quoted', 0 if not."""        string = match.string        start = match.start()        end = match.end()        if start == 0:                  # start-string at beginning of text            return 0        prestart = string[start - 1]        try:            poststart = string[end]            if self.openers.index(prestart) \                  == self.closers.index(poststart):   # quoted                return 1        except IndexError:              # start-string at end of text            return 1        except ValueError:              # not quoted            pass        return 0    def inline_obj(self, match, lineno, end_pattern, nodeclass,                   restore_backslashes=0):        string = match.string        matchstart = match.start('start')        matchend = match.end('start')        if self.quoted_start(match):            return (string[:matchend], [], string[matchend:], [], '')        endmatch = end_pattern.search(string[matchend:])        if endmatch and endmatch.start(1):  # 1 or more chars            text = unescape(endmatch.string[:endmatch.start(1)],                            restore_backslashes)            textend = matchend + endmatch.end(1)            rawsource = unescape(string[matchstart:textend], 1)            return (string[:matchstart], [nodeclass(rawsource, text)],                    string[textend:], [], endmatch.group(1))        msg = self.reporter.warning(              'Inline %s start-string without end-string.'              % nodeclass.__name__, line=lineno)        text = unescape(string[matchstart:matchend], 1)        rawsource = unescape(string[matchstart:matchend], 1)        prb = self.problematic(text, rawsource, msg)        return string[:matchstart], [prb], string[matchend:], [msg], ''    def problematic(self, text, rawsource, message):        msgid = self.document.set_id(message, self.parent)        problematic = nodes.problematic(rawsource, text, refid=msgid)        prbid = self.document.set_id(problematic)        message.add_backref(prbid)        return problematic    def emphasis(self, match, lineno):        before, inlines, remaining, sysmessages, endstring = self.inline_obj(              match, lineno, self.patterns.emphasis, nodes.emphasis)        return before, inlines, remaining, sysmessages    def strong(self, match, lineno):        before, inlines, remaining, sysmessages, endstring = self.inline_obj(              match, lineno, self.patterns.strong, nodes.strong)        return before, inlines, remaining, sysmessages    def interpreted_or_phrase_ref(self, match, lineno):        end_pattern = self.patterns.interpreted_or_phrase_ref        string = match.string        matchstart = match.start('backquote')        matchend = match.end('backquote')        rolestart = match.start('role')        role = match.group('role')        position = ''        if role:            role = role[1:-1]            position = 'prefix'        elif self.quoted_start(match):            return (string[:matchend], [], string[matchend:], [])        endmatch = end_pattern.search(string[matchend:])        if endmatch and endmatch.start(1):  # 1 or more chars            textend = matchend + endmatch.end()            if endmatch.group('role'):                if role:                    msg = self.reporter.warning(                        'Multiple roles in interpreted text (both '                        'prefix and suffix present; only one allowed).',                        line=lineno)                    text = unescape(string[rolestart:textend], 1)                    prb = self.problematic(text, text, msg)                    return string[:rolestart], [prb], string[textend:], [msg]                role = endmatch.group('suffix')[1:-1]                position = 'suffix'            escaped = endmatch.string[:endmatch.start(1)]            rawsource = unescape(string[matchstart:textend], 1)            if rawsource[-1:] == '_':                if role:                    msg = self.reporter.warning(                          'Mismatch: both interpreted text role %s and '                          'reference suffix.' % position, line=lineno)                    text = unescape(string[rolestart:textend], 1)                    prb = self.problematic(text, text, msg)                    return string[:rolestart], [prb], string[textend:], [msg]                return self.phrase_ref(string[:matchstart], string[textend:],                                       rawsource, escaped, unescape(escaped))            else:                rawsource = unescape(string[rolestart:textend], 1)                nodelist, messages = self.interpreted(rawsource, escaped, role,                                                      lineno)                return (string[:rolestart], nodelist,                        string[textend:], messages)        msg = self.reporter.warning(              'Inline interpreted text or phrase reference start-string '              'without end-string.', line=lineno)        text = unescape(string[matchstart:matchend], 1)        prb = self.problematic(text, text, msg)        return string[:matchstart], [prb], string[matchend:], [msg]    def phrase_ref(self, before, after, rawsource, escaped, text):        match = self.patterns.embedded_uri.search(escaped)        if match:            text = unescape(escaped[:match.start(0)])            uri_text = match.group(2)            uri = ''.join(uri_text.split())            uri = self.adjust_uri(uri)            if uri:                target = nodes.target(match.group(1), refuri=uri)            else:                raise ApplicationError('problem with URI: %r' % uri_text)            if not text:                text = uri        else:            target = None        refname = normalize_name(text)        reference = nodes.reference(rawsource, text,                                    name=whitespace_normalize_name(text))        node_list = [reference]        if rawsource[-2:] == '__':            if target:                reference['refuri'] = uri            else:                reference['anonymous'] = 1        else:            if target:                reference['refuri'] = uri                target['names'].append(refname)                self.document.note_explicit_target(target, self.parent)                node_list.append(target)            else:                reference['refname'] = refname                self.document.note_refname(reference)        return before, node_list, after, []    def adjust_uri(self, uri):        match = self.patterns.email.match(uri)        if match:            return 'mailto:' + uri        else:            return uri    def interpreted(self, rawsource, text, role, lineno):        role_fn, messages = roles.role(role, self.language, lineno,                                       self.reporter)        if role_fn:            nodes, messages2 = role_fn(role, rawsource, text, lineno, self)            return nodes, messages + messages2        else:            msg = self.reporter.error(                'Unknown interpreted text role "%s".' % role,                line=lineno)            return ([self.problematic(rawsource, rawsource, msg)],                    messages + [msg])    def literal(self, match, lineno):        before, inlines, remaining, sysmessages, endstring = self.inline_obj(              match, lineno, self.patterns.literal, nodes.literal,              restore_backslashes=1)        return before, inlines, remaining, sysmessages    def inline_internal_target(self, match, lineno):        before, inlines, remaining, sysmessages, endstring = self.inline_obj(              match, lineno, self.patterns.target, nodes.target)        if inlines and isinstance(inlines[0], nodes.target):            assert len(inlines) == 1            target = inlines[0]            name = normalize_name(target.astext())            target['names'].append(name)            self.document.note_explicit_target(target, self.parent)        return before, inlines, remaining, sysmessages    def substitution_reference(self, match, lineno):        before, inlines, remaining, sysmessages, endstring = self.inline_obj(              match, lineno, self.patterns.substitution_ref,              nodes.substitution_reference)        if len(inlines) == 1:            subref_node = inlines[0]            if isinstance(subref_node, nodes.substitution_reference):                subref_text = subref_node.astext()                self.document.note_substitution_ref(subref_node, subref_text)                if endstring[-1:] == '_':                    reference_node = nodes.reference(                        '|%s%s' % (subref_text, endstring), '')                    if endstring[-2:] == '__':                        reference_node['anonymous'] = 1                    else:                        reference_node['refname'] = normalize_name(subref_text)                        self.document.note_refname(reference_node)                    reference_node += subref_node                    inlines = [reference_node]        return before, inlines, remaining, sysmessages    def footnote_reference(self, match, lineno):        """        Handles `nodes.footnote_reference` and `nodes.citation_reference`        elements.        """        label = match.group('footnotelabel')        refname = normalize_name(label)        string = match.string        before = string[:match.start('whole')]        remaining = string[match.end('whole'):]        if match.group('citationlabel'):            refnode = nodes.citation_reference('[%s]_' % label,                                               refname=refname)            refnode += nodes.Text(label)            self.document.note_citation_ref(refnode)        else:            refnode = nodes.footnote_reference('[%s]_' % label)            if refname[0] == '#':                refname = refname[1:]                refnode['auto'] = 1                self.document.note_autofootnote_ref(refnode)            elif refname == '*':                refname = ''                refnode['auto'] = '*'                self.document.note_symbol_footnote_ref(                      refnode)            else:                refnode += nodes.Text(label)            if refname:                refnode['refname'] = refname                self.document.note_footnote_ref(refnode)            if utils.get_trim_footnote_ref_space(self.document.settings):                before = before.rstrip()        return (before, [refnode], remaining, [])    def reference(self, match, lineno, anonymous=None):        referencename = match.group('refname')        refname = normalize_name(referencename)        referencenode = nodes.reference(            referencename + match.group('refend'), referencename,            name=whitespace_normalize_name(referencename))        if anonymous:            referencenode['anonymous'] = 1        else:            referencenode['refname'] = refname            self.document.note_refname(referencenode)        string = match.string        matchstart = match.start('whole')        matchend = match.end('whole')        return (string[:matchstart], [referencenode], string[matchend:], [])    def anonymous_reference(self, match, lineno):        return self.reference(match, lineno, anonymous=1)    def standalone_uri(self, match, lineno):        if not match.group('scheme') or urischemes.schemes.has_key(              match.group('scheme').lower()):            if match.group('email'):                addscheme = 'mailto:'            else:                addscheme = ''            text = match.group('whole')            unescaped = unescape(text, 0)            return [nodes.reference(unescape(text, 1), unescaped,                                    refuri=addscheme + unescaped)]        else:                   # not a valid scheme            raise MarkupMismatch    pep_url = 'pep-%04d.html'    def pep_reference(self, match, lineno):        text = match.group(0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -