doc: Re-add summaries of what children each menu item has
Slightly different to the original version of this, but same goal.
This commit is contained in:
parent
8721173109
commit
9add51bc6d
2 changed files with 46 additions and 17 deletions
|
@ -84,7 +84,7 @@ config MQTT_TASK_CORE_SELECTION_ENABLED
|
||||||
help
|
help
|
||||||
This will enable core selection
|
This will enable core selection
|
||||||
|
|
||||||
choice
|
choice MQTT_TASK_CORE_SELECTION
|
||||||
depends on MQTT_TASK_CORE_SELECTION_ENABLED
|
depends on MQTT_TASK_CORE_SELECTION_ENABLED
|
||||||
prompt "Core to use ?"
|
prompt "Core to use ?"
|
||||||
config MQTT_USE_CORE_0
|
config MQTT_USE_CORE_0
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import kconfiglib
|
import kconfiglib
|
||||||
|
|
||||||
# Indentation to be used in the generated file
|
# Indentation to be used in the generated file
|
||||||
|
@ -40,6 +41,11 @@ def write_docs(config, filename):
|
||||||
with open(filename, "w") as f:
|
with open(filename, "w") as f:
|
||||||
config.walk_menu(lambda node: write_menu_item(f, node))
|
config.walk_menu(lambda node: write_menu_item(f, node))
|
||||||
|
|
||||||
|
def node_is_menu(node):
|
||||||
|
try:
|
||||||
|
return node.item == kconfiglib.MENU or node.is_menuconfig
|
||||||
|
except AttributeError:
|
||||||
|
return False # not all MenuNodes have is_menuconfig for some reason
|
||||||
|
|
||||||
def get_breadcrumbs(node):
|
def get_breadcrumbs(node):
|
||||||
# this is a bit wasteful as it recalculates each time, but still...
|
# this is a bit wasteful as it recalculates each time, but still...
|
||||||
|
@ -51,6 +57,16 @@ def get_breadcrumbs(node):
|
||||||
node = node.parent
|
node = node.parent
|
||||||
return " > ".join(result)
|
return " > ".join(result)
|
||||||
|
|
||||||
|
def get_link_anchor(node):
|
||||||
|
try:
|
||||||
|
return "CONFIG_%s" % node.item.name
|
||||||
|
except AttributeError:
|
||||||
|
assert(node_is_menu(node)) # only menus should have no item.name
|
||||||
|
|
||||||
|
result = "%s-%s" % (get_breadcrumbs(node), node.prompt[0])
|
||||||
|
result = re.sub(r"[^a-zA-z0-9]+", "-", result).lower()
|
||||||
|
return result
|
||||||
|
|
||||||
def get_heading_level(node):
|
def get_heading_level(node):
|
||||||
# bit wasteful also
|
# bit wasteful also
|
||||||
result = INITIAL_HEADING_LEVEL
|
result = INITIAL_HEADING_LEVEL
|
||||||
|
@ -71,38 +87,37 @@ def format_rest_text(text, indent):
|
||||||
text += '\n'
|
text += '\n'
|
||||||
return text
|
return text
|
||||||
|
|
||||||
def write_menu_item(f, node):
|
def node_should_write(node):
|
||||||
if not node.prompt:
|
if not node.prompt:
|
||||||
return # Don't do anything for invisible menu items
|
return False # Don't do anything for invisible menu items
|
||||||
|
|
||||||
if isinstance(node.parent.item, kconfiglib.Choice):
|
if isinstance(node.parent.item, kconfiglib.Choice):
|
||||||
return # Skip choice nodes, they are handled as part of the parent (see below)
|
return False # Skip choice nodes, they are handled as part of the parent (see below)
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def write_menu_item(f, node):
|
||||||
|
if not node_should_write(node):
|
||||||
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
name = node.item.name
|
name = node.item.name
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
name = None
|
name = None
|
||||||
|
|
||||||
try:
|
is_menu = node_is_menu(node)
|
||||||
is_menu = node.item == kconfiglib.MENU or node.is_menuconfig
|
|
||||||
except AttributeError:
|
|
||||||
is_menu = False # not all MenuNodes have is_menuconfig for some reason
|
|
||||||
|
|
||||||
## Heading
|
## Heading
|
||||||
if name:
|
if name:
|
||||||
title = name
|
title = name
|
||||||
# add link target so we can use :ref:`CONFIG_FOO`
|
|
||||||
f.write('.. _CONFIG_%s:\n\n' % name)
|
|
||||||
else:
|
else:
|
||||||
|
# if no symbol name, use the prompt as the heading
|
||||||
title = node.prompt[0]
|
title = node.prompt[0]
|
||||||
|
|
||||||
# if no symbol name, use the prompt as the heading
|
f.write(".. _%s:\n\n" % get_link_anchor(node))
|
||||||
if True or is_menu:
|
f.write('%s\n' % title)
|
||||||
f.write('%s\n' % title)
|
f.write(HEADING_SYMBOLS[get_heading_level(node)] * len(title))
|
||||||
f.write(HEADING_SYMBOLS[get_heading_level(node)] * len(title))
|
f.write('\n\n')
|
||||||
f.write('\n\n')
|
|
||||||
else:
|
|
||||||
f.write('**%s**\n\n\n' % title)
|
|
||||||
|
|
||||||
if name:
|
if name:
|
||||||
f.write('%s%s\n\n' % (INDENT, node.prompt[0]))
|
f.write('%s%s\n\n' % (INDENT, node.prompt[0]))
|
||||||
|
@ -131,6 +146,20 @@ def write_menu_item(f, node):
|
||||||
|
|
||||||
f.write('\n\n')
|
f.write('\n\n')
|
||||||
|
|
||||||
|
if is_menu:
|
||||||
|
# enumerate links to child items
|
||||||
|
first = True
|
||||||
|
child = node.list
|
||||||
|
while child:
|
||||||
|
try:
|
||||||
|
if node_should_write(child):
|
||||||
|
if first:
|
||||||
|
first = False
|
||||||
|
f.write('- :ref:`%s`\n' % get_link_anchor(child))
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
child = child.next
|
||||||
|
f.write('\n')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("Run this via 'confgen.py --output doc FILENAME'")
|
print("Run this via 'confgen.py --output doc FILENAME'")
|
||||||
|
|
Loading…
Reference in a new issue