diff --git a/src/sphinxnotes/any/domain.py b/src/sphinxnotes/any/domain.py index 1fde855..99d1947 100644 --- a/src/sphinxnotes/any/domain.py +++ b/src/sphinxnotes/any/domain.py @@ -14,20 +14,19 @@ from docutils.nodes import Element, literal, Text from sphinx.addnodes import pending_xref -from sphinx.domains import Domain, ObjType +from sphinx.domains import Domain, ObjType, Index from sphinx.util import logging from sphinx.util.nodes import make_refnode from .schema import Schema, Object from .directives import AnyDirective from .roles import AnyRole -from .indices import AnyIndex +from .indices import AnyIndex, AnyTypeIndex if TYPE_CHECKING: from sphinx.application import Sphinx from sphinx.builders import Builder from sphinx.environment import BuildEnvironment - from sphinx.util.typing import RoleFunction logger = logging.getLogger(__name__) @@ -41,14 +40,10 @@ class AnyDomain(Domain): name:str = 'any' #: Domain label: longer, more descriptive (used in messages) label = 'Any' - #: Type (usually directive) name -> ObjType instance - object_types:dict[str,ObjType]= {} - #: Directive name -> directive class - directives:dict[str,type[AnyDirective]] = {} - #: Role name -> role callable - roles:dict[str,RoleFunction] = {} #: A list of Index subclasses - indices:list[type[AnyIndex]] = [] + indices: list[type[Index]] = [AnyTypeIndex] + + # TODO: move to data? #: AnyDomain specific: type -> index class _indices_for_reftype:dict[str,type[AnyIndex]] = {} #: AnyDomain specific: type -> Schema instance diff --git a/src/sphinxnotes/any/indices.py b/src/sphinxnotes/any/indices.py index cbbe110..1ba26c7 100644 --- a/src/sphinxnotes/any/indices.py +++ b/src/sphinxnotes/any/indices.py @@ -81,3 +81,23 @@ def generate(self, docnames:Iterable[str]|None = None sorted_content = sorted(content.items()) return sorted_content, False + + +class AnyTypeIndex(Index): + name = 'type' + localname = 'Any Type Reference Index' + shortname = 'reference' + + def generate(self, docnames:Iterable[str]|None = None + ) -> tuple[list[tuple[str,list[IndexEntry]]], bool]: + """Override parent method.""" + content = {} # type: dict[str, list[IndexEntry]] + objtypes = sorted(self.domain.object_types.keys()) + for objtype in objtypes: + entries = content.setdefault(objtype, []) + entries.append(IndexEntry(objtype, 0, 'any-'+objtype, '', '', '', '')) + + # sort by first letter + sorted_content = sorted(content.items()) + + return sorted_content, False