示例#1
0
 def run(self):
     env = self.state.document.settings.env
     arg0 = self.arguments[0]
     is_nextversion = env.config.django_next_version == arg0
     ret = []
     node = addnodes.versionmodified()
     ret.append(node)
     if not is_nextversion:
         if len(self.arguments) == 1:
             linktext = u'リリースノートを参照してください </releases/%s>' % (arg0)
             xrefs = roles.XRefRole()('doc', linktext, linktext,
                                      self.lineno, self.state)
             node.extend(xrefs[0])
         node['version'] = arg0
     else:
         node['version'] = "Development version"
     node['type'] = self.name
     if len(self.arguments) == 2:
         inodes, messages = self.state.inline_text(self.arguments[1],
                                                   self.lineno + 1)
         node.extend(inodes)
         if self.content:
             self.state.nested_parse(self.content, self.content_offset,
                                     node)
         ret = ret + messages
     env.note_versionchange(node['type'], node['version'], node,
                            self.lineno)
     return ret
示例#2
0
    def run(self):
        env = self.state.document.settings.env
        arg0 = self.arguments[0]
        is_nextversion = env.config.next_version == arg0
        ret = []
        node = addnodes.versionmodified()
        ret.append(node)
        if is_nextversion:
            node['version'] = "Development version"
        else:
            if len(self.arguments) == 1:
            #                linktext = 'Please, see the Changelog <0_0_4>'
            #                xrefs = roles.XRefRole()('release', linktext, linktext, self.lineno, self.state)
            #                node.extend(xrefs[0])

                linktext = 'Please, see the Changelog <changes>'
                xrefs = roles.XRefRole()('doc', linktext, linktext, self.lineno, self.state)
                node.extend(xrefs[0])

        node['version'] = arg0
        node['type'] = self.name
        if len(self.arguments) == 2:
            inodes, messages = self.state.inline_text(self.arguments[1], self.lineno + 1)
            node.extend(inodes)
            if self.content:
                self.state.nested_parse(self.content, self.content_offset, node)
            ret = ret + messages
        env.note_versionchange(node['type'], node['version'], node, self.lineno)
        return ret
示例#3
0
文件: roles.py 项目: vmeshche/oneDAL
def txtref_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
    xref_role = roles.XRefRole(lowercase=True,
                               innernodeclass=nodes.inline,
                               warn_dangling=True)

    def extract_ref_words(ref):
        return [item for sub in ref.split('-') for item in sub.split('_')]

    def make_term_text(words, ref, suffix=''):
        txt = ' '.join(words).strip()
        txt = txt[0].lower() + txt[1:]
        return f"{txt}{suffix} <{ref.strip()}>"

    term_match = _term_txt_ref_re.match(text)
    if term_match:
        alias, ref, suffix = term_match.group(1), term_match.group(
            2), term_match.group(3)
        if len(alias) > 0 and len(suffix) == 0:
            fixed_term = text
        elif len(alias) == 0 and len(suffix) > 0:
            words = extract_ref_words(ref)
            fixed_term = make_term_text(words, ref, suffix)
        else:
            raise RuntimeError('Unexpected role syntax: ' + rawtext)
    else:
        ref, words = text, extract_ref_words(text)
        fixed_term = make_term_text(words, ref)

    return xref_role('std:ref', rawtext, fixed_term, lineno, inliner, options,
                     content)
示例#4
0
def parse_version_directive(name, arguments, options, content, lineno,
                            content_offset, block_text, state, state_machine):
    env = state.document.settings.env
    is_nextversion = env.config.django_next_version == arguments[0]
    ret = []
    node = addnodes.versionmodified()
    ret.append(node)
    if not is_nextversion:
        if len(arguments) == 1:
            linktext = 'Please, see the release notes <releases-%s>' % (
                arguments[0])
            try:
                xrefs = roles.XRefRole()('ref', linktext, linktext, lineno,
                                         state)  # Sphinx >= 1.0
            except:
                xrefs = roles.xfileref_role('ref', linktext, linktext, lineno,
                                            state)  # Sphinx < 1.0
            node.extend(xrefs[0])
        node['version'] = arguments[0]
    else:
        node['version'] = "Development version"
    node['type'] = name
    if len(arguments) == 2:
        inodes, messages = state.inline_text(arguments[1], lineno + 1)
        node.extend(inodes)
        if content:
            state.nested_parse(content, content_offset, node)
        ret = ret + messages
    env.note_versionchange(node['type'], node['version'], node, lineno)
    return ret
示例#5
0
 def run(self):
     env = self.state.document.settings.env
     arg0 = self.arguments[0]
     is_nextversion = env.config.django_next_version == arg0
     ret = []
     node = addnodes.versionmodified()
     ret.append(node)
     if not is_nextversion:
         if len(self.arguments) == 1:
             linktext = 'Please, see the release notes <releases-%s>' % \
                        (arg0,)
             try:
                 # Sphinx >= 1.0
                 xrefs = roles.XRefRole()('std:ref', linktext, linktext,
                                          self.lineno, self.state)
             except AttributeError:
                 # Sphinx < 1.0
                 xrefs = roles.xfileref_role('ref', linktext, linktext,
                                             self.lineno, self.state)
             node.extend(xrefs[0])
         node['version'] = arg0
     else:
         node['version'] = "Development version"
     node['type'] = self.name
     if len(self.arguments) == 2:
         inodes, messages = self.state.inline_text(self.arguments[1],
                                                   self.lineno + 1)
         node.extend(inodes)
         if self.content:
             self.state.nested_parse(self.content, self.content_offset,
                                     node)
         ret = ret + messages
     env.note_versionchange(node['type'], node['version'], node,
                            self.lineno)
     return ret
示例#6
0
文件: roles.py 项目: vmeshche/oneDAL
def capterm_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
    xref_role = roles.XRefRole(innernodeclass=nodes.inline, warn_dangling=True)
    term_match = _term_ref_re.match(text)
    if term_match:
        txt, ref = term_match.group(1), term_match.group(2)
    else:
        txt, ref = text, text
    fixed_term = f'{txt.strip()} <{ref.strip().capitalize()}>'
    return xref_role('std:term', rawtext, fixed_term, lineno, inliner, options,
                     content)
    def run(self):
        env = self.state.document.settings.env
        arg0 = self.arguments[0]
        ret = []
        node = addnodes.versionmodified()
        ret.append(node)

        node['type'] = self.name
        if env.config.next_version == arg0:
            version = "Development version"
            link = None
        else:
            version = arg0
            link = 'release-%s' % arg0

        node['version'] = version
        # inodes, messages = self.state.inline_text(self.version_text[self.name] % version, self.lineno+1)
        # node.extend(inodes)
        if link:
            text = ' Please see the changelog <%s>' % link
            xrefs = roles.XRefRole()('std:ref', text, text, self.lineno, self.state)
            node.extend(xrefs[0])
        env.note_versionchange(node['type'], node['version'], node, self.lineno)
        return ret
示例#8
0
文件: eql.py 项目: zhutony/edgedb
class EdgeQLDomain(s_domains.Domain):

    name = "eql"
    label = "EdgeQL"

    object_types = {
        'function': s_domains.ObjType('function', 'func', 'func-desc'),
        'constraint': s_domains.ObjType('constraint', 'constraint'),
        'type': s_domains.ObjType('type', 'type'),
        'keyword': s_domains.ObjType('keyword', 'kw'),
        'operator': s_domains.ObjType('operator', 'op', 'op-desc'),
        'statement': s_domains.ObjType('statement', 'stmt'),
    }

    _role_to_object_type = {
        role: tn
        for tn, td in object_types.items() for role in td.roles
    }

    directives = {
        'function': EQLFunctionDirective,
        'constraint': EQLConstraintDirective,
        'type': EQLTypeDirective,
        'keyword': EQLKeywordDirective,
        'operator': EQLOperatorDirective,
        'synopsis': EQLSynopsisDirective,
        'react-element': EQLReactElement,
        'struct': EQLStructElement,
    }

    roles = {
        'func': EQLFunctionXRef(),
        'func-desc': EQLFunctionDescXRef(),
        'constraint': EQLConstraintXRef(),
        'type': EQLTypeXRef(),
        'kw': s_roles.XRefRole(),
        'op': s_roles.XRefRole(),
        'op-desc': EQLOperatorDescXRef(),
        'stmt': s_roles.XRefRole(),
        'gh': GitHubLinkRole(),
    }

    desc_roles = {
        'func-desc',
        'op-desc',
    }

    initial_data = {
        'objects': {}  # fullname -> docname, objtype, description
    }

    def resolve_xref(self, env, fromdocname, builder,
                     type, target, node, contnode):

        objects = self.data['objects']
        expected_type = self._role_to_object_type[type]

        target = target.replace(' ', '-')
        if expected_type == 'keyword':
            targets = [f'keyword::{target}']
        elif expected_type == 'operator':
            targets = [f'operator::{target}']
        elif expected_type == 'statement':
            targets = [f'statement::{target}']
        elif expected_type in {'type', 'function', 'constraint'}:
            targets = [f'{expected_type}::{target}']
            if '::' not in target:
                targets.append(f'{expected_type}::std::{target}')
        else:
            targets = [target]

        docname = None
        obj_type = None
        obj_desc = None
        for target in targets:
            try:
                docname, obj_type, obj_desc = objects[target]
            except KeyError:
                continue

        if docname is None:
            if not node.get('eql-auto-link'):
                raise shared.DomainError(
                    f'cannot resolve :eql:{type}: targeting {target!r}')
            else:
                return

        if obj_type != expected_type:
            raise shared.DomainError(
                f'cannot resolve :eql:{type}: targeting {target!r}: '
                f'the type of referred object {expected_type!r} '
                f'does not match the reftype')

        if node['reftype'] in self.desc_roles:
            node = d_nodes.Text(obj_desc)
        else:
            node = s_nodes_utils.make_refnode(
                builder, fromdocname, docname, target, contnode, None)
            node['eql-type'] = obj_type

        return node

    def clear_doc(self, docname):
        for fullname, (fn, _l, _d) in list(self.data['objects'].items()):
            if fn == docname:
                del self.data['objects'][fullname]

    def merge_domaindata(self, docnames, otherdata):
        for fullname, (fn, objtype, desc) in otherdata['objects'].items():
            if fn in docnames:
                self.data['objects'][fullname] = (fn, objtype, desc)

    def get_objects(self):
        for refname, (docname, type, _desc) in self.data['objects'].items():
            yield (refname, refname, type, docname, refname, 1)

    def get_full_qualified_name(self, node):
        fn = node.get('eql-fullname')
        if not fn:
            raise shared.DirectiveParseError(
                self, 'no eql-fullname attribute')
        return fn
示例#9
0
class EdgeQLDomain(s_domains.Domain):

    name = "eql"
    label = "EdgeQL"

    object_types = {
        'function': s_domains.ObjType('function', 'func', 'func-desc'),
        'constraint': s_domains.ObjType('constraint', 'constraint'),
        'type': s_domains.ObjType('type', 'type'),
        'keyword': s_domains.ObjType('keyword', 'kw'),
        'operator': s_domains.ObjType('operator', 'op', 'op-desc'),
        'statement': s_domains.ObjType('statement', 'stmt'),
    }

    _role_to_object_type = {
        role: tn
        for tn, td in object_types.items() for role in td.roles
    }

    directives = {
        'function': EQLFunctionDirective,
        'constraint': EQLConstraintDirective,
        'type': EQLTypeDirective,
        'keyword': EQLKeywordDirective,
        'operator': EQLOperatorDirective,
        'synopsis': EQLSynopsisDirective,
        'react-element': EQLReactElement,
        'section-intro-page': EQLSectionIntroPage,
        'struct': EQLStructElement,
    }

    roles = {
        'func': EQLFunctionXRef(),
        'func-desc': EQLFunctionDescXRef(),
        'constraint': EQLConstraintXRef(),
        'type': EQLTypeXRef(),
        'kw': s_roles.XRefRole(),
        'op': s_roles.XRefRole(),
        'op-desc': EQLOperatorDescXRef(),
        'stmt': s_roles.XRefRole(),
        'gh': GitHubLinkRole(),
    }

    desc_roles = {
        'func-desc',
        'op-desc',
    }

    initial_data: Dict[str, Dict[str, Any]] = {
        'objects': {}  # fullname -> docname, objtype, description
    }

    def resolve_xref(self, env, fromdocname, builder, type, target, node,
                     contnode):

        objects = self.data['objects']
        expected_type = self._role_to_object_type[type]

        target = target.replace(' ', '-')
        if expected_type == 'keyword':
            targets = [f'keyword::{target}']
        elif expected_type == 'operator':
            targets = [f'operator::{target}']
        elif expected_type == 'statement':
            targets = [f'statement::{target}']
        elif expected_type in {'type', 'function', 'constraint'}:
            targets = [f'{expected_type}::{target}']
            if '::' not in target:
                targets.append(f'{expected_type}::std::{target}')
        else:
            targets = [target]

        docname = None
        obj_type = None
        obj_desc = None
        for target in targets:
            try:
                docname, obj_type, obj_desc = objects[target]
            except KeyError:
                continue

        if docname is None:
            if not node.get('eql-auto-link'):
                # if ref was not found, the :eql: xref may be being used
                # outside of the docs, so try resolving ref from intersphinx
                # inventories
                inventories = InventoryAdapter(env)

                for target in targets:
                    obj_type, name = target.split('::', 1)
                    if ':' not in name:
                        continue
                    docset_name, name = name.split(':', 1)

                    docset = inventories.named_inventory.get(docset_name)
                    if docset is None:
                        continue
                    refs = docset.get('eql:' + obj_type)
                    if refs is None:
                        continue
                    ref = refs.get(obj_type + '::' + name)
                    if ref is None:
                        continue

                    newnode = d_nodes.reference(
                        '',
                        '',
                        internal=False,
                        refuri=ref[2],
                    )
                    if node.get('refexplicit'):
                        newnode.append(d_nodes.Text(contnode.astext()))
                    else:
                        title = contnode.astext()
                        newnode.append(
                            contnode.__class__(title[len(docset_name) + 1:],
                                               title[len(docset_name) + 1:]))
                    return newnode

                raise shared.DomainError(
                    f'cannot resolve :eql:{type}: targeting {target!r}')
            else:
                return

        if obj_type != expected_type:
            raise shared.DomainError(
                f'cannot resolve :eql:{type}: targeting {target!r}: '
                f'the type of referred object {expected_type!r} '
                f'does not match the reftype')

        if node['reftype'] in self.desc_roles:
            node = d_nodes.Text(obj_desc)
        else:
            node = s_nodes_utils.make_refnode(builder, fromdocname, docname,
                                              target, contnode, None)
            node['eql-type'] = obj_type

        return node

    def resolve_any_xref(self, env, fromdocname, builder, target, node,
                         contnode):
        # 'myst-parser' resolves all markdown links as :any: xrefs, so return
        # empty list to prevent sphinx trying to resolve these as :eql: refs
        return []

    def clear_doc(self, docname):
        for fullname, (fn, _l, _d) in list(self.data['objects'].items()):
            if fn == docname:
                del self.data['objects'][fullname]

    def merge_domaindata(self, docnames, otherdata):
        for fullname, (fn, objtype, desc) in otherdata['objects'].items():
            if fn in docnames:
                self.data['objects'][fullname] = (fn, objtype, desc)

    def get_objects(self):
        for refname, (docname, type, _desc) in self.data['objects'].items():
            yield (refname, refname, type, docname, refname, 1)

    def get_full_qualified_name(self, node):
        fn = node.get('eql-fullname')
        if not fn:
            raise self.error('no eql-fullname attribute')
        return fn