source: rtems-docs/common/rtemsdomain.py @ 07f151f

5
Last change on this file since 07f151f was 07f151f, checked in by Chris Johns <chrisj@…>, on 11/10/22 at 04:32:44

waf: Backport from main build fixes

Closes #4752

  • Property mode set to 100644
File size: 4.6 KB
Line 
1from docutils import nodes
2from docutils.parsers.rst import directives
3
4from sphinx import addnodes
5from sphinx.roles import XRefRole
6from sphinx.directives import ObjectDescription
7from sphinx.domains import Domain, ObjType, Index
8from sphinx.util.nodes import make_refnode
9from sphinx.util.docfields import Field, TypedField
10
11import version as rtems_version
12
13"""
14:r:bsp:`sparc/sis`
15
16:r:arch:`sparc`
17
18:r:board:`...`
19
20:r:user:`amar`
21
22:r:list:`devel`
23"""
24
25role_name = {
26        "bsp":          "BSP",
27        "arch":         "Architecture",
28        "board":        "Board",
29        "user":         "User",
30        "list":         "Mailing List",
31        "rtems":        "`RTEMS`",
32}
33
34role_url = {
35        "trac":         ("Trac",                        "https://devel.rtems.org"),
36        "devel":        ("Developer Site",              "https://devel.rtems.org"),
37        "www":          ("RTEMS Home",                  "https://www.rtems.org/"),
38        "buildbot":     ("Buildbot Instance",           "https://buildbot.rtems.org/"),
39        "builder":      ("Builder Site",                "https://builder.rtems.org/"),
40        "docs":         ("Documentation Site",          "https://docs.rtems.org/"),
41        "lists":        ("Mailing Lists",               "https://lists.rtems.org/"),
42        "git":          ("Git Repositories",            "https://git.rtems.org/"),
43        "ftp":          ("FTP File Server",             "https://ftp.rtems.org/"),
44        "review":       ("Gerrit Code Review",          "https://review.rtems.org/"),
45        "bugs":         ("Bugs Database",               "https://devel.rtems.org/wiki/Bugs/"),
46        "gsoc":         ("Google Summer of Code",       "https://devel.rtems.org/wiki/GSoC/"),
47        "socis":        ("ESA SOCIS",                   "https://devel.rtems.org/wiki/SOCIS/")
48}
49
50
51role_list = {
52        "announce":     ("Announce Mailing List",               "https://lists.rtems.org/mailman/listinfo/announce/"),
53        "bugs":         ("Bugs Mailing List",                   "https://lists.rtems.org/mailman/listinfo/bugs/"),
54        "devel":        ("Developers Mailing List",             "https://lists.rtems.org/mailman/listinfo/devel/"),
55        "build":        ("Build Logs",                          "https://lists.rtems.org/mailman/listinfo/build"),
56        "users":        ("Users Mailing List",                  "https://lists.rtems.org/mailman/listinfo/users/"),
57        "vc":           ("Version Control Mailing List",        "https://lists.rtems.org/mailman/listinfo/vc/"),
58}
59
60
61def rtems_resolve_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
62        role = name.split(":")[1] #XXX: is there a better way?
63
64        try:
65                if role == "list":
66                        text, url = role_list[text]
67                elif role == "url":
68                        text, url = role_url[text]
69        except KeyError:
70                msg = inliner.reporter.error("rtems_resolve_role: '%s' is not a valid %s" % (text, role))
71                err = inliner.problematic("ERROR: %s" % rawtext, None, msg)
72                return [err], [msg]
73
74        # XXX: how do you add an alt tag?
75        node = nodes.reference(rawtext, text, refuri=url, **options)
76        return [node], []
77
78
79
80class RTEMSXrefRole(XRefRole):
81        def __init__(self, item, title, **kwargs):
82                XRefRole.__init__(self, **kwargs)
83                self.item = item
84                self.title = title
85
86        def process_link(self, env, refnode, has_explicit_title, title, target):
87                if has_explicit_title:
88                        title = has_explicit_title
89
90                return has_explicit_title or self.title, target
91
92
93
94
95class RTEMSDomain(Domain):
96        """RTEMS domain."""
97
98        name = "r"
99        label = "RTEMS"
100
101        directives = {}
102        object_types = {}
103
104        roles = {
105                "bsp":          RTEMSXrefRole("bsp", "BSP"),
106                "arch":         RTEMSXrefRole("arch", "Architecture"),
107                "user":         RTEMSXrefRole("user", "User"),
108                "list":         rtems_resolve_role,
109                "url":          rtems_resolve_role,
110        }
111
112
113        def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode):
114                info = "*info*"
115                anchor = "*anchor*"
116                title = "*title*"
117
118                return make_refnode(builder, fromdocname, info, anchor, contnode, title)
119
120        def merge_domaindata(self, docnames, otherdata):
121                pass # XXX is this needed?
122
123
124def rtems_replace(app, docname, source):
125        dump = False
126        line = source[0]
127        for key in app.config.replacements:
128                line = line.replace(key, app.config.replacements[key])
129        source[0] = line
130
131replacements = {
132}
133
134def setup(app):
135        app.add_config_value('rtems_major', str(app.config.overrides['rtems_major']), True)
136        app.add_config_value('rtems_minor', str(app.config.overrides['rtems_minor']), True)
137        app.add_config_value('rtems_revision', str(app.config.overrides['rtems_revision']), True)
138        major = str(app.config.overrides['rtems_major'])
139        minor = str(app.config.overrides['rtems_minor'])
140        revision = str(app.config.overrides['rtems_revision'])
141        if revision.isdigit():
142                majminrev = major + '.' + minor + '.' + revision
143        else:
144                majminrev = major + '.' + revision
145        replacements["@rtems-version@"] = str(app.config.overrides['version'])
146        replacements["@rtems-ver-major@"] = major
147        replacements["@rtems-ver-minor@"] = minor
148        replacements["@rtems-ver-revision@"] = revision
149        replacements["@rtems-ver-majminrev@"] = majminrev
150        app.add_config_value('replacements', replacements, True)
151        app.connect('source-read', rtems_replace)
152        app.add_domain(RTEMSDomain)
153        return {'version': "1.0", 'parallel_read_safe': True}
Note: See TracBrowser for help on using the repository browser.