From 5daabd23cfd13662e74ce8d069204882eb1fbad9 Mon Sep 17 00:00:00 2001 From: Amar Takhar Date: Fri, 15 Jan 2016 23:41:06 -0500 Subject: Initial reST documentation using Sphinx. --- common/rtemsdomain.py | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 common/rtemsdomain.py (limited to 'common/rtemsdomain.py') 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} -- cgit v1.2.3