diff --git a/ChangeLog b/ChangeLog index 7142efd83..9721bdab7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2014-12-02 Werner Lemberg + + [docmaker] Honour empty lines in `' section element. + + This greatly improves the readability of the `Synopsis' links. + + * src/tools/docmaker/content.py (DocBlock::get_markup_words_all): + Insert string `/empty/' between items. + + * src/tools/docmaker/formatter.py (Formatter::section_dump): Make it + robust against nonexistent keys. + + * src/tools/docmaker/tohtml.py (HtmlFormatter::section_enter): Emit + empty elements for `/empty/'. + 2014-12-02 Werner Lemberg [docmaker] Ensure Python 3 compatibility. diff --git a/src/tools/docmaker/content.py b/src/tools/docmaker/content.py index 76a06a789..728b592a4 100644 --- a/src/tools/docmaker/content.py +++ b/src/tools/docmaker/content.py @@ -610,9 +610,15 @@ class DocBlock: def get_markup_words_all( self, tag_name ): try: m = self.get_markup( tag_name ) - return [word - for items in m.fields[0].items - for word in items.words] + words = m.fields[0].items[0].words + for item in m.fields[0].items[1:]: + # We honour empty lines in an `' section element by + # adding the sentinel `/empty/'. The formatter should then + # convert it to an appropriate representation in the + # `section_enter' function. + words.append( "/empty/" ) + words += item.words + return words except: return [] diff --git a/src/tools/docmaker/formatter.py b/src/tools/docmaker/formatter.py index e8fda8356..b1c88be67 100644 --- a/src/tools/docmaker/formatter.py +++ b/src/tools/docmaker/formatter.py @@ -183,13 +183,17 @@ class Formatter: for name in section.block_names: skip_entry = 0 - block = self.identifiers[name] - # `block_names' can contain field names also, which we filter out - for markup in block.markups: - if markup.tag == 'values': - for field in markup.fields: - if field.name == name: - skip_entry = 1 + try: + block = self.identifiers[name] + # `block_names' can contain field names also, + # which we filter out + for markup in block.markups: + if markup.tag == 'values': + for field in markup.fields: + if field.name == name: + skip_entry = 1 + except: + skip_entry = 1 # this happens e.g. for `/empty/' entries if skip_entry: continue; diff --git a/src/tools/docmaker/tohtml.py b/src/tools/docmaker/tohtml.py index 34379a19e..e05512ab3 100644 --- a/src/tools/docmaker/tohtml.py +++ b/src/tools/docmaker/tohtml.py @@ -582,6 +582,9 @@ class HtmlFormatter( Formatter ): columns = 1 count = len( section.block_names ) + # don't handle last entry if it is empty + if section.block_names[-1] == "/empty/": + count -= 1 rows = ( count + columns - 1 ) // columns for r in range( rows ): @@ -591,8 +594,9 @@ class HtmlFormatter( Formatter ): line = line + '' if i < count: name = section.block_names[i] - line = ( line + '' - + name + '' ) + if name != "/empty/": + line = ( line + '' + + name + '' ) line = line + '' line = line + ""