|
@@ -1,102 +0,0 @@
|
|
|
-from sphinx import addnodes
|
|
|
-from sphinx.domains import Domain, ObjType
|
|
|
-from sphinx.locale import l_, _
|
|
|
-from sphinx.directives import ObjectDescription
|
|
|
-from sphinx.domains.std import ws_re
|
|
|
-
|
|
|
-
|
|
|
-class BorgObject(ObjectDescription):
|
|
|
- indextemplate = l_('%s')
|
|
|
- parse_node = None # type: Callable[[GenericObject, BuildEnvironment, unicode, addnodes.desc_signature], unicode] # NOQA
|
|
|
-
|
|
|
- def handle_signature(self, sig, signode):
|
|
|
- # type: (unicode, addnodes.desc_signature) -> unicode
|
|
|
- pass
|
|
|
-
|
|
|
- def add_target_and_index(self, name, sig, signode):
|
|
|
- # type: (str, str, addnodes.desc_signature) -> None
|
|
|
- # ^ ignore this one, don't insert any markup.
|
|
|
- # v- the human text v- the target name
|
|
|
- # "borg key change-passphrase" -> "borg-key-change-passphrase"
|
|
|
- del name # ignored
|
|
|
- targetname = sig.replace(' ', '-')
|
|
|
- if self.indextemplate:
|
|
|
- colon = self.indextemplate.find(':')
|
|
|
- if colon != -1:
|
|
|
- indextype = self.indextemplate[:colon].strip()
|
|
|
- indexentry = self.indextemplate[colon + 1:].strip() % (sig,)
|
|
|
- else:
|
|
|
- indextype = 'single'
|
|
|
- indexentry = self.indextemplate % (sig,)
|
|
|
- self.indexnode['entries'].append((indextype, indexentry, targetname, '', None))
|
|
|
- self.env.domaindata['borg']['objects'][targetname] = self.env.docname, self.objtype, sig
|
|
|
-
|
|
|
- def run(self):
|
|
|
- super().run()
|
|
|
- return [self.indexnode]
|
|
|
-
|
|
|
-
|
|
|
-class BorgCommand(BorgObject):
|
|
|
- """
|
|
|
- Inserts an index entry and an anchor for a borg command.
|
|
|
-
|
|
|
- For example, the following snippet creates an index entry about the "borg foo-and-bar"
|
|
|
- command as well as a "borg-foo-and-bar" anchor (id).
|
|
|
-
|
|
|
- .. borg:command:: borg foo-and-bar
|
|
|
- """
|
|
|
-
|
|
|
- indextemplate = l_('%s (command)')
|
|
|
-
|
|
|
-
|
|
|
-class BorgEnvVar(BorgObject):
|
|
|
- """
|
|
|
- Inserts an index entry and an anchor for an environment variable.
|
|
|
- (Currently not used)
|
|
|
- """
|
|
|
-
|
|
|
- indextemplate = l_('%s (environment variable)')
|
|
|
-
|
|
|
-
|
|
|
-class BorgDomain(Domain):
|
|
|
- """Land of the Borg."""
|
|
|
- name = 'borg'
|
|
|
- label = 'Borg'
|
|
|
- object_types = {
|
|
|
- 'command': ObjType(l_('command')),
|
|
|
- 'env_var': ObjType(l_('env_var')),
|
|
|
- }
|
|
|
- directives = {
|
|
|
- 'command': BorgCommand,
|
|
|
- 'env_var': BorgEnvVar,
|
|
|
- }
|
|
|
- roles = {}
|
|
|
- initial_data = {
|
|
|
- 'objects': {}, # fullname -> docname, objtype
|
|
|
- }
|
|
|
-
|
|
|
- def clear_doc(self, docname):
|
|
|
- # required for incremental builds
|
|
|
- try:
|
|
|
- del self.data['objects'][docname]
|
|
|
- except KeyError:
|
|
|
- pass
|
|
|
-
|
|
|
- def merge_domaindata(self, docnames, otherdata):
|
|
|
- # needed due to parallel_read_safe
|
|
|
- for fullname, (docname, objtype, sig) in otherdata['objects'].items():
|
|
|
- if docname in docnames:
|
|
|
- self.data['objects'][fullname] = (docname, objtype, sig)
|
|
|
-
|
|
|
- def get_objects(self):
|
|
|
- for refname, (docname, objtype, sig) in list(self.data['objects'].items()):
|
|
|
- yield sig, sig, objtype, docname, refname, 1
|
|
|
-
|
|
|
-
|
|
|
-def setup(app):
|
|
|
- app.add_domain(BorgDomain)
|
|
|
- return {
|
|
|
- 'version': 1,
|
|
|
- 'parallel_read_safe': True,
|
|
|
- 'parallel_write_safe': True,
|
|
|
- }
|