summaryrefslogtreecommitdiffstats
path: root/common/rtemsdomain.py
diff options
context:
space:
mode:
Diffstat (limited to 'common/rtemsdomain.py')
-rw-r--r--common/rtemsdomain.py126
1 files changed, 126 insertions, 0 deletions
diff --git a/common/rtemsdomain.py b/common/rtemsdomain.py
new file mode 100644
index 0000000..2ccd354
--- /dev/null
+++ b/common/rtemsdomain.py
@@ -0,0 +1,126 @@
+from docutils import nodes
+from docutils.parsers.rst import directives
+
+from sphinx import addnodes
+from sphinx.roles import XRefRole
+from sphinx.locale import l_, _
+from sphinx.directives import ObjectDescription
+from sphinx.domains import Domain, ObjType, Index
+from sphinx.util.compat import Directive
+from sphinx.util.nodes import make_refnode
+from sphinx.util.docfields import Field, TypedField
+
+"""
+:r:bsp:`sparc/sis`
+
+:r:arch:`sparc`
+
+:r:board:`...`
+
+:r:user:`amar`
+
+:r:list:`devel`
+"""
+
+role_name = {
+ "bsp": "BSP",
+ "arch": "Architecture",
+ "board": "Board",
+ "user": "User",
+ "list": "Mailing List",
+ "rtems": "`RTEMS`",
+}
+
+role_url = {
+ "trac": ("Trac", "https://devel.rtems.org"),
+ "devel": ("Developer Site", "https://devel.rtems.org"),
+ "www": ("RTEMS Home", "https://www.rtems.org/"),
+ "buildbot": ("Buildbot Instance", "https://buildbot.rtems.org/"),
+ "builder": ("Builder Site", "https://builder.rtems.org/"),
+ "docs": ("Documentation Site", "https://docs.rtems.org/"),
+ "lists": ("Mailing Lists", "https://lists.rtems.org/"),
+ "git": ("Git Repositories", "https://git.rtems.org/"),
+ "review": ("Gerrit Code Review", "https://review.rtems.org/"),
+ "bugs": ("Bugs Database", "https://devel.rtems.org/wiki/Bugs/"),
+ "gsoc": ("Google Summer of Code", "https://devel.rtems.org/wiki/GSoC/"),
+ "socis": ("ESA SOCIS", "https://devel.rtems.org/wiki/SOCIS/")
+}
+
+
+role_list = {
+ "announce": ("Announce Mailing List", "https://lists.rtems.org/mailman/listinfo/announce/"),
+ "bugs": ("Bugs Mailing List", "https://lists.rtems.org/mailman/listinfo/bugs/"),
+ "devel": ("Developers Mailing List", "https://lists.rtems.org/mailman/listinfo/devel/"),
+ "build": ("Build logs", "https://lists.rtems.org/mailman/listinfo/build"),
+ "users": ("Users Mailing List", "https://lists.rtems.org/mailman/listinfo/users/"),
+ "vc": ("Version Control Mailing List", "https://lists.rtems.org/mailman/listinfo/vc/"),
+}
+
+
+def rtems_resolve_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
+ role = name.split(":")[1] #XXX: is there a better way?
+
+ try:
+ if role == "list":
+ text, url = role_list[text]
+ elif role == "url":
+ text, url = role_url[text]
+ except KeyError:
+ msg = inliner.reporter.error("rtems_resolve_role(): %s is not a valid %s" % (text, role))
+ err = inliner.problematic("ERROR: %s" % rawtext, None, msg)
+ return [err], [msg]
+
+ # XXX: how do you add an alt tag?
+ node = nodes.reference(rawtext, text, refuri=url, **options)
+ return [node], []
+
+
+
+class RTEMSXrefRole(XRefRole):
+ def __init__(self, item, title, **kwargs):
+ XRefRole.__init__(self, **kwargs)
+ self.item = item
+ self.title = title
+
+ def process_link(self, env, refnode, has_explicit_title, title, target):
+ if has_explicit_title:
+ title = has_explicit_title
+
+ return has_explicit_title or self.title, target
+
+
+
+
+class RTEMSDomain(Domain):
+ """RTEMS domain."""
+
+ name = "r"
+ label = "RTEMS"
+
+ directives = {}
+ object_types = {}
+
+ roles = {
+ "bsp": RTEMSXrefRole("bsp", "BSP"),
+ "arch": RTEMSXrefRole("arch", "Architecture"),
+ "user": RTEMSXrefRole("user", "User"),
+ "list": rtems_resolve_role,
+ "url": rtems_resolve_role,
+ }
+
+
+ def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode):
+ info = "*info*"
+ anchor = "*anchor*"
+ title = "*title*"
+
+ return make_refnode(builder, fromdocname, info, anchor, contnode, title)
+
+ def merge_domaindata(self, docnames, otherdata):
+ pass # XXX is this needed?
+
+
+
+def setup(app):
+ app.add_domain(RTEMSDomain)
+ return {'version': "1.0", 'parallel_read_safe': True}