Makes the output finally bearable.
Note that namespace, directory and page lists are always fully expanded as
these are not expected to be excessively large.
+.. block-success:: Hiding extra options from Doxygen
+
+ Doxygen complains on unknown options, so it's possible to add them
+ prefixed with ``##!``. Line continuations are supported too, using ``##!``
+ ensures that the options also survive Doxyfile upgrades using
+ ``doxygen -u`` (which is not the case when the options would be specified
+ directly):
+
+ .. code:: ini
+
+ ##! M_LINKS_NAVBAR1 = pages \
+ ##! modules
+
`Theme selection`_
------------------
logging.debug("Parsing configuration from {}".format(doxyfile))
comment_re = re.compile(r"""^\s*(#.*)?$""")
- variable_re = re.compile(r"""^\s*(?P<key>[A-Z0-9_@]+)\s*=\s*(?P<quote>['"]?)(?P<value>.*)(?P=quote)\s*(?P<backslash>\\?)$""")
- variable_continuation_re = re.compile(r"""^\s*(?P<key>[A-Z_]+)\s*\+=\s*(?P<quote>['"]?)(?P<value>.*)(?P=quote)\s*(?P<backslash>\\?)$""")
- continuation_re = re.compile(r"""^\s*(?P<quote>['"]?)(?P<value>.*)(?P=quote)\s*(?P<backslash>\\?)$""")
+ variable_re = re.compile(r"""^\s*(##!\s*)?(?P<key>[A-Z0-9_@]+)\s*=\s*(?P<quote>['"]?)(?P<value>.*)(?P=quote)\s*(?P<backslash>\\?)$""")
+ variable_continuation_re = re.compile(r"""^\s*(##!\s*)?(?P<key>[A-Z_]+)\s*\+=\s*(?P<quote>['"]?)(?P<value>.*)(?P=quote)\s*(?P<backslash>\\?)$""")
+ continuation_re = re.compile(r"""^\s*(##!\s*)?(?P<quote>['"]?)(?P<value>.*)(?P=quote)\s*(?P<backslash>\\?)$""")
default_config = {
'PROJECT_NAME': ['My Project'],
for line in f:
line = line.strip()
- # Ignore comments and empty lines. Comment also stops line
- # continuation
- if comment_re.match(line):
- continued_line = None
- continue
-
- # Line continuation from before, append the line contents to it
+ # Line continuation from before, append the line contents to it.
+ # Needs to be before variable so variable-looking continuations
+ # are not parsed as variables.
if continued_line:
var = continuation_re.match(line)
value, backslash = parse_value(var)
# only because coverage.py can't handle continue
continue # pragma: no cover
+ # Ignore comments and empty lines. Comment also stops line
+ # continuation. Has to be last because variables can be inside
+ # comments.
+ if comment_re.match(line):
+ continued_line = None
+ continue
+
logging.warning("{}: unmatchable line {}".format(doxyfile, line)) # pragma: no cover
# Some values are set to empty in the default-generated Doxyfile but they
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
CASE_SENSE_NAMES = NO
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_FILE_TREE_EXPAND_LEVELS = 2
-M_CLASS_TREE_EXPAND_LEVELS = 5
-M_EXPAND_INNER_TYPES = YES
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_SEARCH_DISABLED = YES
+##! M_FILE_TREE_EXPAND_LEVELS = 2
+##! M_CLASS_TREE_EXPAND_LEVELS = 5
+##! M_EXPAND_INNER_TYPES = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_SEARCH_DISABLED = YES
# Keeping navbar enabled so we can test for highlighted items
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 = modules
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 = modules
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
XML_PROGRAMLISTING = NO
XML_NAMESPACE_MEMBERS_IN_FILE_SCOPE = YES
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
# Enable to get rid of the MAGNUM_EXPORT macro in the output
# MACRO_EXPANSION = YES
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
# So the ==== is treated as brief. Ugh.
JAVADOC_AUTOBRIEF = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
# So the comment on top is treated as a brief
JAVADOC_AUTOBRIEF = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
# So the two lines on top are treated as brief. Wtf.
JAVADOC_AUTOBRIEF = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_MATH_CACHE_FILE =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_MATH_CACHE_FILE =
+##! M_SEARCH_DISABLED = YES
ALIASES = \
"m_div{1}=@xmlonly<mcss:div xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:class=\"\1\">@endxmlonly" \
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
-M_MATH_CACHE_FILE =
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
+##! M_MATH_CACHE_FILE =
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
-M_MATH_CACHE_FILE = xml/math.cache
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
+##! M_MATH_CACHE_FILE = xml/math.cache
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
# Escaping
M_PAGE_HEADER = 'this is "quotes" \'apostrophes\''
M_PAGE_FINE_PRINT = "this is \"quotes\""
+
+# Commented with a hashbang
+##! M_LINKS_NAVBAR1 = pages \
+##! modules
+
+# Commented with a hashbang and no space
+##!M_LINKS_NAVBAR2 = files \
+##!annotated
--- /dev/null
+Doxyfile-upgrade
+Doxyfile-upgrade.bak
--- /dev/null
+# This variable is unknown to Doxygen and so it doesn't survive an upgrade
+UNKNOWN_VARIABLE = 1
+
+# COMMENTED_OUT_VARIABLE is commented-out, so it also doesn't survive
+
+# This one will survive, but is not recognized by m.css
+## HASHED_COMMENTED_VARIABLE = 2
+
+# This one is recognized by m.css and will survive, both lines
+##! HASHED_BANG_COMMENTED_VARIABLE = 3 \
+##! HASHED_BANG_COMMENTED_VARIABLE_CONT
+
+# This one should also survive
+##!HASHED_BANG_COMMENTED_VARIABLE_NOSPACE = 4
+
+# This is known to Doxygen. It puts heavy spacing there though.
+INPUT = 5
+
+# This is at the end of the file (doesn't precede any known variable), but also
+# should survive
+##! HASHED_BANG_COMMENTED_VARIABLE_END = 6
"m_footernavigation=@xmlonly<mcss:footernavigation xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" />@endxmlonly" \
"m_examplenavigation{2}=@xmlonly<mcss:examplenavigation xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:page=\"\1\" mcss:prefix=\"\2\" />@endxmlonly"
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
PROJECT_NAME = "A project"
PROJECT_BRIEF = "is cool"
-M_THEME_COLOR = 00ffff
-M_FAVICON = favicon-light.png
-M_PAGE_HEADER = "<p><a href=\"{filename}\">A self link</a>.</p>"
-M_PAGE_FINE_PRINT = "<p><a href=\"http://doxygen.org\">Doxygen</a> version {doxygen_version}.</p>"
-M_LINKS_NAVBAR1 = "files pages namespaces" \
- "annotated namespaces pages"
-M_LINKS_NAVBAR2 = "pages pages annotated"
-M_SEARCH_EXTERNAL_URL = "https://google.com/search?q=site:mcss.mosra.cz+{}"
-M_SEARCH_HELP = "Some <em>help</em>."
+##! M_THEME_COLOR = 00ffff
+##! M_FAVICON = favicon-light.png
+##! M_PAGE_HEADER = "<p><a href=\"{filename}\">A self link</a>.</p>"
+##! M_PAGE_FINE_PRINT = "<p><a href=\"http://doxygen.org\">Doxygen</a> version {doxygen_version}.</p>"
+##! M_LINKS_NAVBAR1 = "files pages namespaces" \
+##! "annotated namespaces pages"
+##! M_LINKS_NAVBAR2 = "pages pages annotated"
+##! M_SEARCH_EXTERNAL_URL = "https://google.com/search?q=site:mcss.mosra.cz+{}"
+##! M_SEARCH_HELP = "Some <em>help</em>."
XML_OUTPUT =
-M_LINKS_NAVBAR1 = pages \
- namespaces \
- annotated \
- files
-M_LINKS_NAVBAR2 =
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_SEARCH_DISABLED = YES
+##! M_LINKS_NAVBAR1 = pages \
+##! namespaces \
+##! annotated \
+##! files
+##! M_LINKS_NAVBAR2 =
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_SEARCH_DISABLED = YES
XML_OUTPUT =
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DOWNLOAD_BINARY = YES
-M_SEARCH_HELP = "Halp."
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DOWNLOAD_BINARY = YES
+##! M_SEARCH_HELP = "Halp."
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
ALIASES = \
"m_footernavigation=@xmlonly<mcss:footernavigation xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" />@endxmlonly"
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 = "page-in-navbar pages page-b" \
- "page-b"
-M_LINKS_NAVBAR2 = "page-b" \
- "page-in-navbar page-b files"
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 = "page-in-navbar pages page-b" \
+##! "page-b"
+##! M_LINKS_NAVBAR2 = "page-b" \
+##! "page-in-navbar page-b files"
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DISABLED = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
"m_keyword{3}=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:keyword=\"\1\" mcss:title=\"\2\" mcss:suffix-length=\"\3\" />@endxmlonly" \
"m_enum_values_as_keywords=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:enum-values-as-keywords=\"true\" />@endxmlonly"
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DOWNLOAD_BINARY = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DOWNLOAD_BINARY = YES
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
-M_PAGE_FINE_PRINT =
-M_THEME_COLOR =
-M_FAVICON =
-M_LINKS_NAVBAR1 =
-M_LINKS_NAVBAR2 =
-M_SEARCH_DOWNLOAD_BINARY = YES
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DOWNLOAD_BINARY = YES
# DEALINGS IN THE SOFTWARE.
#
+import os
+import shutil
+import subprocess
import unittest
from dox2html5 import parse_doxyfile, State
+from . import BaseTestCase
+
class Doxyfile(unittest.TestCase):
def __init__(self, *args, **kwargs):
unittest.TestCase.__init__(self, *args, **kwargs)
'M_EXPAND_INNER_TYPES': False,
'M_FAVICON': 'favicon-dark.png',
'M_FILE_TREE_EXPAND_LEVELS': 1,
- 'M_LINKS_NAVBAR1': ['pages', 'namespaces'],
- 'M_LINKS_NAVBAR2': ['annotated', 'files'],
+ 'M_LINKS_NAVBAR1': ['pages', 'modules'],
+ 'M_LINKS_NAVBAR2': ['files', 'annotated'], # different order
'M_MATH_CACHE_FILE': 'm.math.cache',
'M_PAGE_FINE_PRINT': 'this is "quotes"',
'M_PAGE_HEADER': 'this is "quotes" \'apostrophes\'',
state = State()
with self.assertRaises(NotImplementedError):
parse_doxyfile(state, 'test/doxyfile/Doxyfile-subdirs')
+
+class Upgrade(BaseTestCase):
+ def __init__(self, *args, **kwargs):
+ super().__init__(__file__, 'upgrade_custom_variables', *args, **kwargs)
+
+ def test(self):
+ # Copy the Doxyfile to a new location because it gets overwritten
+ shutil.copyfile(os.path.join(self.path, 'Doxyfile'),
+ os.path.join(self.path, 'Doxyfile-upgrade'))
+
+ subprocess.run(['doxygen', '-u', 'Doxyfile-upgrade'], cwd=self.path)
+ with open(os.path.join(self.path, 'Doxyfile-upgrade'), 'r') as f:
+ contents = f.read()
+
+ self.assertFalse('UNKNOWN_VARIABLE' in contents)
+ self.assertFalse('COMMENTED_OUT_VARIABLE' in contents)
+ self.assertTrue('## HASHED_COMMENTED_VARIABLE = 2' in contents)
+ self.assertTrue('##! HASHED_BANG_COMMENTED_VARIABLE = 3 \\' in contents)
+ self.assertTrue('##! HASHED_BANG_COMMENTED_VARIABLE_CONT' in contents)
+ self.assertTrue('##!HASHED_BANG_COMMENTED_VARIABLE_NOSPACE = 4' in contents)
+ self.assertTrue('INPUT = 5' in contents)
+ self.assertTrue('##! HASHED_BANG_COMMENTED_VARIABLE_END = 6' in contents)