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)