1e8f5c617SMarkus Heiser# -*- coding: utf-8; mode: python -*- 2e8f5c617SMarkus Heiseru""" 3e8f5c617SMarkus Heiser cdomain 4e8f5c617SMarkus Heiser ~~~~~~~ 5e8f5c617SMarkus Heiser 6e8f5c617SMarkus Heiser Replacement for the sphinx c-domain. 7e8f5c617SMarkus Heiser 8e8f5c617SMarkus Heiser :copyright: Copyright (C) 2016 Markus Heiser 9e8f5c617SMarkus Heiser :license: GPL Version 2, June 1991 see Linux/COPYING for details. 10*2c645cd7SMarkus Heiser 11*2c645cd7SMarkus Heiser List of customizations: 12*2c645cd7SMarkus Heiser 13*2c645cd7SMarkus Heiser * Add option 'name' to the "c:function:" directive. With option 'name' the 14*2c645cd7SMarkus Heiser ref-name of a function can be modified. E.g.:: 15*2c645cd7SMarkus Heiser 16*2c645cd7SMarkus Heiser .. c:function:: int ioctl( int fd, int request ) 17*2c645cd7SMarkus Heiser :name: VIDIOC_LOG_STATUS 18*2c645cd7SMarkus Heiser 19*2c645cd7SMarkus Heiser The func-name (e.g. ioctl) remains in the output but the ref-name changed 20*2c645cd7SMarkus Heiser from 'ioctl' to 'VIDIOC_LOG_STATUS'. The function is referenced by:: 21*2c645cd7SMarkus Heiser 22*2c645cd7SMarkus Heiser * :c:func:`VIDIOC_LOG_STATUS` or 23*2c645cd7SMarkus Heiser * :any:`VIDIOC_LOG_STATUS` (``:any:`` needs sphinx 1.3) 24e8f5c617SMarkus Heiser""" 25e8f5c617SMarkus Heiser 26*2c645cd7SMarkus Heiserfrom docutils.parsers.rst import directives 27*2c645cd7SMarkus Heiser 28e8f5c617SMarkus Heiserfrom sphinx.domains.c import CObject as Base_CObject 29e8f5c617SMarkus Heiserfrom sphinx.domains.c import CDomain as Base_CDomain 30e8f5c617SMarkus Heiser 31e8f5c617SMarkus Heiser__version__ = '1.0' 32e8f5c617SMarkus Heiser 33e8f5c617SMarkus Heiserdef setup(app): 34e8f5c617SMarkus Heiser 35e8f5c617SMarkus Heiser app.override_domain(CDomain) 36e8f5c617SMarkus Heiser 37e8f5c617SMarkus Heiser return dict( 38e8f5c617SMarkus Heiser version = __version__, 39e8f5c617SMarkus Heiser parallel_read_safe = True, 40e8f5c617SMarkus Heiser parallel_write_safe = True 41e8f5c617SMarkus Heiser ) 42e8f5c617SMarkus Heiser 43e8f5c617SMarkus Heiserclass CObject(Base_CObject): 44e8f5c617SMarkus Heiser 45e8f5c617SMarkus Heiser """ 46e8f5c617SMarkus Heiser Description of a C language object. 47e8f5c617SMarkus Heiser """ 48*2c645cd7SMarkus Heiser option_spec = { 49*2c645cd7SMarkus Heiser "name" : directives.unchanged 50*2c645cd7SMarkus Heiser } 51*2c645cd7SMarkus Heiser 52*2c645cd7SMarkus Heiser def handle_signature(self, sig, signode): 53*2c645cd7SMarkus Heiser """Transform a C signature into RST nodes.""" 54*2c645cd7SMarkus Heiser fullname = super(CObject, self).handle_signature(sig, signode) 55*2c645cd7SMarkus Heiser if "name" in self.options: 56*2c645cd7SMarkus Heiser if self.objtype == 'function': 57*2c645cd7SMarkus Heiser fullname = self.options["name"] 58*2c645cd7SMarkus Heiser else: 59*2c645cd7SMarkus Heiser # FIXME: handle :name: value of other declaration types? 60*2c645cd7SMarkus Heiser pass 61*2c645cd7SMarkus Heiser return fullname 62*2c645cd7SMarkus Heiser 63e8f5c617SMarkus Heiser 64e8f5c617SMarkus Heiserclass CDomain(Base_CDomain): 65e8f5c617SMarkus Heiser 66e8f5c617SMarkus Heiser """C language domain.""" 67e8f5c617SMarkus Heiser name = 'c' 68e8f5c617SMarkus Heiser label = 'C' 69e8f5c617SMarkus Heiser directives = { 70e8f5c617SMarkus Heiser 'function': CObject, 71e8f5c617SMarkus Heiser 'member': CObject, 72e8f5c617SMarkus Heiser 'macro': CObject, 73e8f5c617SMarkus Heiser 'type': CObject, 74e8f5c617SMarkus Heiser 'var': CObject, 75e8f5c617SMarkus Heiser } 76