[PATCH 1/1] doc: fix doxygen-link.py by skipping invalid entries in libnl.dict
Thomas Haller
thaller at redhat.com
Wed Jun 25 02:54:58 PDT 2014
Newer versions of doxygen treat the documentation
slightly different so that they create the following
entires in libnl.dict:
\=api/group__attr.html#ga769cc7bd882aab17c3740dd83329d7e6
»·······»·······NLA_PUT=api/group__attr.html#ga769cc7bd882aab17c3740dd83329d7e6
NLA_PUT=api/group__attr.html#ga769cc7bd882aab17c3740dd83329d7e6
Especially, replacing r'\' breaks the generated documentation.
Extend doxygen-link.py to strip whitespaces from the name and
skip over r'\'.
Also, when replacing the words in the output file, match using word
boundaries r'\b'.
Also, don't print an additional newline after each processed line.
Signed-off-by: Thomas Haller <thaller at redhat.com>
---
doc/doxygen-link.py | 39 +++++++++++++++++++++++++++++++--------
1 file changed, 31 insertions(+), 8 deletions(-)
diff --git a/doc/doxygen-link.py b/doc/doxygen-link.py
index a1596d6..33627dc 100755
--- a/doc/doxygen-link.py
+++ b/doc/doxygen-link.py
@@ -1,20 +1,43 @@
#!/usr/bin/env python
+from __future__ import print_function
import fileinput
import re
import sys
-links = {}
-for line in open(sys.argv[1], 'r'):
- m = re.match('^([^=]+)=([^\n]+)$', line);
- if m:
- link = "<a href=\"" + m.group(2) + "\" class=\"dg\">" + m.group(1) + "</a>"
- links[m.group(1)] = link
+rc_script = re.compile(r'\s*(.*\S)?\s*')
+
+def parse_dict(filename):
+ links = {}
+ for line in open(filename, 'r'):
+ m = re.match('^([^=]+)=([^\n]+)$', line);
+ if not m:
+ continue
+ name = m.group(1)
+ value = m.group(2)
+
+ # strip leading and trailing whitespace
+ m = rc_script.match(name)
+ if m:
+ name = m.group(1)
+
+ # skip special names
+ if name == '':
+ continue
+ if name == '\\':
+ continue
+
+ links[name] = "<a href=\"" + value + "\" class=\"dg\">" + name + "</a>"
+ return links
+
+links = parse_dict(sys.argv[1])
def translate(match):
return links[match.group(0)]
-rc = re.compile('|'.join(map(re.escape, sorted(links, reverse=True))))
+# match for all names, with word boundaries \b
+rc = re.compile(r'\b' + r'\b|\b'.join(map(re.escape, sorted(links, reverse=True))) + r'\b')
+
for line in open(sys.argv[2], 'r'):
- print(rc.sub(translate, line))
+ print(rc.sub(translate, line), end='')
--
1.9.3
More information about the libnl
mailing list