This repository provides User Manual for setting up a Docker environment tailored for testing DGTD code.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

73 lines
2.8 KiB

from breathe.finder import ItemFinder
from breathe.finder import index as indexfinder
from breathe.finder import compound as compoundfinder
from breathe.parser import DoxygenParserFactory
from breathe.project import ProjectInfo
from breathe.renderer.filter import Filter
from sphinx.application import Sphinx
from typing import Dict, Type
class _CreateCompoundTypeSubFinder:
def __init__(self, app: Sphinx, parser_factory: DoxygenParserFactory):
self.app = app
self.parser_factory = parser_factory
def __call__(self, project_info: ProjectInfo, *args):
compound_parser = self.parser_factory.create_compound_parser(project_info)
return indexfinder.CompoundTypeSubItemFinder(self.app, compound_parser, project_info, *args)
class DoxygenItemFinderFactory:
def __init__(self, finders: Dict[str, Type[ItemFinder]], project_info: ProjectInfo):
self.finders = finders
self.project_info = project_info
def create_finder(self, data_object) -> ItemFinder:
return self.finders[data_object.node_type](self.project_info, data_object, self)
class _FakeParentNode:
node_type = "fakeparent"
class Finder:
def __init__(self, root, item_finder_factory: DoxygenItemFinderFactory) -> None:
self._root = root
self.item_finder_factory = item_finder_factory
def filter_(self, filter_: Filter, matches) -> None:
"""Adds all nodes which match the filter into the matches list"""
item_finder = self.item_finder_factory.create_finder(self._root)
item_finder.filter_([_FakeParentNode()], filter_, matches)
def root(self):
return self._root
class FinderFactory:
def __init__(self, app: Sphinx, parser_factory: DoxygenParserFactory):
self.app = app
self.parser_factory = parser_factory
self.parser = parser_factory.create_index_parser()
def create_finder(self, project_info: ProjectInfo) -> Finder:
root = self.parser.parse(project_info)
return self.create_finder_from_root(root, project_info)
def create_finder_from_root(self, root, project_info: ProjectInfo) -> Finder:
finders: Dict[str, Type[ItemFinder]] = {
"doxygen": indexfinder.DoxygenTypeSubItemFinder,
"compound": _CreateCompoundTypeSubFinder(self.app, self.parser_factory), # type: ignore
"member": indexfinder.MemberTypeSubItemFinder,
"doxygendef": compoundfinder.DoxygenTypeSubItemFinder,
"compounddef": compoundfinder.CompoundDefTypeSubItemFinder,
"sectiondef": compoundfinder.SectionDefTypeSubItemFinder,
"memberdef": compoundfinder.MemberDefTypeSubItemFinder,
"ref": compoundfinder.RefTypeSubItemFinder,
}
item_finder_factory = DoxygenItemFinderFactory(finders, project_info)
return Finder(root, item_finder_factory)