1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
"""
This script regenerates the gnuradio.blocks sphinx source code.
"""
from gnuradio import analog
import sys
import os
doxyxml_location = os.path.abspath("../../../doxygen")
xml_location = os.path.abspath("../../../../build/docs/doxygen/xml/")
sys.path.append(doxyxml_location)
from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, DoxyGroup
from doxyxml import DoxyOther, base
class Block(object):
"""
Checks if doxyxml produced objects correspond to a new style
gnuradio block.
"""
@classmethod
def includes(cls, item):
if not isinstance(item, DoxyClass):
return False
# Check for a parsing error.
if item.error():
return False
is_a_block = item.has_member('make', DoxyFunction) and item.has_member('sptr', DoxyOther)
return is_a_block
class Group(object):
"""
Checks if doxyxml produced objects correspond to a group.
"""
@classmethod
def includes(cls, item):
if not isinstance(item, DoxyGroup):
return False
# Check for a parsing error.
if item.error():
return False
return True
def main():
di = DoxyIndex(xml_location)
blocks = di.in_category(Block)
analog_blocks = []
for block in blocks:
if block.name().startswith("gr::analog::"):
analog_blocks.append(block)
all_grouped_blocks = []
groups = di.in_category(Group)
groupinfo = []
for group in groups:
contains_analog_blocks = False
block_list = []
members = group.members()
for member in members:
if member.name().startswith("gr::analog"):
all_grouped_blocks.append(member)
if not contains_analog_blocks:
contains_analog_blocks = True
groupinfo.append((group.name(), group.title, block_list))
block_list.append(member)
for block in analog_blocks:
if block not in all_grouped_blocks:
print("Didn't find block {0}".format(block.name()))
blockindex = ["""gnuradio.analog
===============
.. automodule:: gnuradio.analog"""]
for groupname, grouptitle, blocks in groupinfo:
blockindex.append("")
blockindex.append(grouptitle)
blockindex.append('-'*len(grouptitle))
blockindex.append("""
.. autosummary::
:nosignatures:
""")
for block in blocks:
blockindex.append(" gnuradio.analog.{0}".format(
block.name()[len("gr::analog::"):]))
grouppage = []
title = "gnuradio.analog: {0}".format(grouptitle)
grouppage.append(title)
grouppage.append('='*len(title))
grouppage.append('')
for block in blocks:
shortname = block.name()[len("gr::analog::"):]
grouppage.append(".. autoblock:: gnuradio.analog.{0}".format(shortname))
text = '\n'.join(grouppage)
f = open("{0}.rst".format(groupname), 'w')
f.write(text)
f.close()
text = "\n".join(blockindex)
f = open("index.rst", 'w')
f.write(text)
f.close()
if __name__ == '__main__':
main()
|