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)