mirror of
https://github.com/zeek/zeek.git
synced 2025-10-05 08:08:19 +00:00
Teach Broxygen :bro:see: role for referencing any identifier in Bro domain.
This commit is contained in:
parent
ec33453d2d
commit
5227eb73c8
3 changed files with 40 additions and 11 deletions
|
@ -19,6 +19,11 @@ from docutils.parsers.rst import directives
|
||||||
from docutils.parsers.rst.roles import set_classes
|
from docutils.parsers.rst.roles import set_classes
|
||||||
|
|
||||||
class BroGeneric(ObjectDescription):
|
class BroGeneric(ObjectDescription):
|
||||||
|
def update_type_map(self, idname):
|
||||||
|
if 'idtypes' not in self.env.domaindata['bro']:
|
||||||
|
self.env.domaindata['bro']['idtypes'] = {}
|
||||||
|
self.env.domaindata['bro']['idtypes'][idname] = self.objtype
|
||||||
|
|
||||||
def add_target_and_index(self, name, sig, signode):
|
def add_target_and_index(self, name, sig, signode):
|
||||||
targetname = self.objtype + '-' + name
|
targetname = self.objtype + '-' + name
|
||||||
if targetname not in self.state.document.ids:
|
if targetname not in self.state.document.ids:
|
||||||
|
@ -29,9 +34,6 @@ class BroGeneric(ObjectDescription):
|
||||||
|
|
||||||
objects = self.env.domaindata['bro']['objects']
|
objects = self.env.domaindata['bro']['objects']
|
||||||
key = (self.objtype, name)
|
key = (self.objtype, name)
|
||||||
# this is commented out mostly just to avoid having a special directive
|
|
||||||
# for events in order to avoid the duplicate warnings in that case
|
|
||||||
"""
|
|
||||||
if key in objects:
|
if key in objects:
|
||||||
self.env.warn(self.env.docname,
|
self.env.warn(self.env.docname,
|
||||||
'duplicate description of %s %s, ' %
|
'duplicate description of %s %s, ' %
|
||||||
|
@ -39,8 +41,9 @@ class BroGeneric(ObjectDescription):
|
||||||
'other instance in ' +
|
'other instance in ' +
|
||||||
self.env.doc2path(objects[key]),
|
self.env.doc2path(objects[key]),
|
||||||
self.lineno)
|
self.lineno)
|
||||||
"""
|
|
||||||
objects[key] = self.env.docname
|
objects[key] = self.env.docname
|
||||||
|
self.update_type_map(name)
|
||||||
|
|
||||||
indextext = self.get_index_text(self.objtype, name)
|
indextext = self.get_index_text(self.objtype, name)
|
||||||
if indextext:
|
if indextext:
|
||||||
self.indexnode['entries'].append(('single', indextext,
|
self.indexnode['entries'].append(('single', indextext,
|
||||||
|
@ -65,6 +68,8 @@ class BroNamespace(BroGeneric):
|
||||||
objects = self.env.domaindata['bro']['objects']
|
objects = self.env.domaindata['bro']['objects']
|
||||||
key = (self.objtype, name)
|
key = (self.objtype, name)
|
||||||
objects[key] = self.env.docname
|
objects[key] = self.env.docname
|
||||||
|
self.update_type_map(name)
|
||||||
|
|
||||||
indextext = self.get_index_text(self.objtype, name)
|
indextext = self.get_index_text(self.objtype, name)
|
||||||
self.indexnode['entries'].append(('single', indextext,
|
self.indexnode['entries'].append(('single', indextext,
|
||||||
targetname, targetname))
|
targetname, targetname))
|
||||||
|
@ -91,6 +96,8 @@ class BroEnum(BroGeneric):
|
||||||
objects = self.env.domaindata['bro']['objects']
|
objects = self.env.domaindata['bro']['objects']
|
||||||
key = (self.objtype, name)
|
key = (self.objtype, name)
|
||||||
objects[key] = self.env.docname
|
objects[key] = self.env.docname
|
||||||
|
self.update_type_map(name)
|
||||||
|
|
||||||
indextext = self.get_index_text(self.objtype, name)
|
indextext = self.get_index_text(self.objtype, name)
|
||||||
#self.indexnode['entries'].append(('single', indextext,
|
#self.indexnode['entries'].append(('single', indextext,
|
||||||
# targetname, targetname))
|
# targetname, targetname))
|
||||||
|
@ -140,6 +147,7 @@ class BroDomain(Domain):
|
||||||
'id': XRefRole(),
|
'id': XRefRole(),
|
||||||
'enum': XRefRole(),
|
'enum': XRefRole(),
|
||||||
'attr': XRefRole(),
|
'attr': XRefRole(),
|
||||||
|
'see': XRefRole(),
|
||||||
}
|
}
|
||||||
|
|
||||||
initial_data = {
|
initial_data = {
|
||||||
|
@ -154,6 +162,17 @@ class BroDomain(Domain):
|
||||||
def resolve_xref(self, env, fromdocname, builder, typ, target, node,
|
def resolve_xref(self, env, fromdocname, builder, typ, target, node,
|
||||||
contnode):
|
contnode):
|
||||||
objects = self.data['objects']
|
objects = self.data['objects']
|
||||||
|
if typ == "see":
|
||||||
|
if target not in self.data['idtypes']:
|
||||||
|
self.env.warn(fromdocname,
|
||||||
|
'unknown target for ":bro:see:`%s`' % (target))
|
||||||
|
return []
|
||||||
|
objtype = self.data['idtypes'][target]
|
||||||
|
return make_refnode(builder, fromdocname,
|
||||||
|
objects[objtype, target],
|
||||||
|
objtype + '-' + target,
|
||||||
|
contnode, target + ' ' + objtype)
|
||||||
|
else:
|
||||||
objtypes = self.objtypes_for_role(typ)
|
objtypes = self.objtypes_for_role(typ)
|
||||||
for objtype in objtypes:
|
for objtype in objtypes:
|
||||||
if (objtype, target) in objects:
|
if (objtype, target) in objects:
|
||||||
|
|
|
@ -5,6 +5,11 @@
|
||||||
##! (reST) document's summary section.
|
##! (reST) document's summary section.
|
||||||
##!
|
##!
|
||||||
##! .. tip:: You can embed directives and roles within ``##``-stylized comments.
|
##! .. tip:: You can embed directives and roles within ``##``-stylized comments.
|
||||||
|
##!
|
||||||
|
##! There's also a custom role to reference any identifier node in
|
||||||
|
##! the Bro Sphinx domain that's good for "see alsos", e.g.
|
||||||
|
##! "see also :bro:see:`Example::a_var`, :bro:see:`Example::ONE`, and
|
||||||
|
##! :bro:see:`SSH::Info`"
|
||||||
|
|
||||||
# Comments that use a single pound sign (#) are not significant to
|
# Comments that use a single pound sign (#) are not significant to
|
||||||
# a script's auto-generated documentation, but ones that use a
|
# a script's auto-generated documentation, but ones that use a
|
||||||
|
|
|
@ -15,6 +15,11 @@ these comments are transferred directly into the auto-generated
|
||||||
|
|
||||||
.. tip:: You can embed directives and roles within ``##``-stylized comments.
|
.. tip:: You can embed directives and roles within ``##``-stylized comments.
|
||||||
|
|
||||||
|
There's also a custom role to reference any identifier node in
|
||||||
|
the Bro Sphinx domain that's good for "see alsos", e.g.
|
||||||
|
"see also :bro:see:`Example::a_var`, :bro:see:`Example::ONE`, and
|
||||||
|
:bro:see:`SSH::Info`"
|
||||||
|
|
||||||
:Imports: :doc:`policy/frameworks/software/vulnerable </scripts/policy/frameworks/software/vulnerable>`
|
:Imports: :doc:`policy/frameworks/software/vulnerable </scripts/policy/frameworks/software/vulnerable>`
|
||||||
|
|
||||||
Summary
|
Summary
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue