docs: Adding `cell` role to Sphinx. Signed-off-by: Tim 'mithro' Ansell <me@mith.ro>
diff --git a/docs/conf.py b/docs/conf.py index 08ba291..94febbb 100644 --- a/docs/conf.py +++ b/docs/conf.py
@@ -320,8 +320,8 @@ import re from docutils.parsers.rst import directives, roles, nodes - LIB_REGEX = re.compile('sky130_(?P<lib_src>[^_\s]*)_(?P<lib_type>[^_\s]*)(_(?P<lib_name>[^_\s]*))?') +CELL_REGEX = re.compile('sky130_(?P<lib_src>[^_\s]*)_(?P<lib_type>[^_\s]*)(_(?P<lib_name>[^_\s]*))?__(?P<cell_name>[^\s]*)') def lib_role(name, rawtext, text, lineno, inliner, options={}, content=[]): """Library name which gets colorized.""" @@ -355,6 +355,41 @@ return r, [] +def cell_role(name, rawtext, text, lineno, inliner, options={}, content=[]): + """Cell name which gets colorized.""" + m = CELL_REGEX.match(text) + if not m: + msg = inliner.reporter.error("Malformed cell name of "+repr(text), line=lineno) + prb = inliner.problematic(rawtext, rawtext, msg) + return [prb], [msg] + app = inliner.document.settings.env.app + + #lib_process_role = roles.role('lib_src', inliner.language, lineno, inliner.reporter) + #lib_src_role = roles.role('lib_src', inliner.language, lineno, inliner.reporter) + #lib_type_role = roles.role('lib_src', inliner.language, lineno, inliner.reporter) + #lib_name_role = roles.role('lib_src', inliner.language, lineno, inliner.reporter) + lib_process = 'sky130' + lib_src = m.group('lib_src') + lib_type = m.group('lib_type') + lib_name = m.group('lib_name') + cell_name = m.group('cell_name') + + r = [ + nodes.inline(lib_process, lib_process, classes=['lib-process']), + nodes.inline('_', '_', options=options), + nodes.inline(lib_src, lib_src, classes=['lib-src']), + nodes.inline('_', '_', options=options), + nodes.inline(lib_type, lib_type, classes=['lib-type']), + ] + if lib_name: + r.append(nodes.inline('_', '_', options=options)) + r.append(nodes.inline(lib_name, lib_name, classes=['lib-name'])) + r.append(nodes.inline('__', '__', options=options)) + r.append(nodes.inline(cell_name, cell_name, classes=['cell-name'])) + + return r, [] + + def add_role(app, new_role_name): options = { 'class': directives.class_option(new_role_name), @@ -374,4 +409,7 @@ add_role(app, 'drc_tag') add_role(app, 'drc_flag') add_role(app, 'layer') + app.add_role('lib', lib_role) + app.add_role('cell', cell_role) + app.add_role('model', cell_role)