xref: /aosp_15_r20/external/mesa3d/docs/_exts/formatting.py (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1# formatting.py
2# Sphinx extension providing formatting for Gallium-specific data
3# (c) Corbin Simpson 2010
4# Public domain to the extent permitted; contact author for special licensing
5
6import docutils.nodes
7import sphinx.addnodes
8
9from sphinx.util.nodes import split_explicit_title
10from docutils import nodes, utils
11
12def parse_opcode(env, sig, signode):
13    opcode, desc = sig.split("-", 1)
14    opcode = opcode.strip().upper()
15    desc = " (%s)" % desc.strip()
16    signode += sphinx.addnodes.desc_name(opcode, opcode)
17    signode += sphinx.addnodes.desc_annotation(desc, desc)
18    return opcode
19
20
21def ext_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
22    text = utils.unescape(text)
23    has_explicit_title, title, ext = split_explicit_title(text)
24
25    parts = ext.split('_', 2)
26    if parts[0] == 'VK':
27        full_url = f'https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/{ext}.html'
28    elif parts[0] == 'GL':
29        full_url = f'https://registry.khronos.org/OpenGL/extensions/{parts[1]}/{parts[1]}_{parts[2]}.txt'
30    else:
31        raise Exception(f'Unexpected API: {parts[0]}')
32
33    pnode = nodes.reference(title, title, internal=False, refuri=full_url)
34    return [pnode], []
35
36def vkfeat_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
37    text = utils.unescape(text)
38    has_explicit_title, title, ext = split_explicit_title(text)
39
40    full_url = f'https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-{ext}'
41
42    pnode = nodes.reference(title, title, internal=False, refuri=full_url)
43    return [pnode], []
44
45def setup(app):
46    app.add_object_type("opcode", "opcode", "%s (TGSI opcode)",
47        parse_opcode)
48    app.add_role('ext', ext_role)
49    app.add_role('vk-feat', vkfeat_role)
50