xref: /linux/Documentation/sphinx/cdomain.py (revision 2c645cd7c4a0d4b35da1e43ec3a5b55a64038157)
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