chiark / gitweb /
documentation/doxygen: defines *can* appear twice, too.
authorVladimír Vondruš <mosra@centrum.cz>
Sun, 7 Jul 2019 16:27:25 +0000 (18:27 +0200)
committerVladimír Vondruš <mosra@centrum.cz>
Sun, 7 Jul 2019 16:28:45 +0000 (18:28 +0200)
In a group and in file docs. So accomodate for that.

documentation/doxygen.py
documentation/templates/doxygen/entry-define.html

index e2d96796e2b6e115b43019ae2f9c650855f2bcdc..38b4142257d137e494d2a8b81e1ca52410bf742e 100755 (executable)
@@ -2285,11 +2285,7 @@ def parse_define(state: State, element: ET.Element):
     assert element.tag == 'memberdef' and element.attrib['kind'] == 'define'
 
     define = Empty()
-    # defines are always only defined in files, never duplicated to namespaces,
-    # so we don't need to have define.base_url. Can't use extract_id_hash()
-    # here because current_definition_url_base might be stale. See a test in
-    # compound_namespace_members_in_file_scope_define_base_url.
-    state.current_definition_url_base, _, define.id, define.include, define.has_details = parse_id_and_include(state, element)
+    state.current_definition_url_base, define.base_url, define.id, define.include, define.has_details = parse_id_and_include(state, element)
     define.name = element.find('name').text
     define.brief = parse_desc(state, element.find('briefdescription'))
     define.description, params, define.return_value, search_keywords, define.is_deprecated = parse_define_desc(state, element)
@@ -2310,13 +2306,14 @@ def parse_define(state: State, element: ET.Element):
     # Some param description got unused
     if params: logging.warning("{}: define parameter description doesn't match parameter names: {}".format(state.current, repr(params)))
 
-    if define.description or define.return_value:
+    if define.base_url == state.current_compound_url and (define.description or define.return_value):
         define.has_details = True # has_details might already be True from above
     if define.brief or define.has_details:
-        if not state.doxyfile['M_SEARCH_DISABLED']:
+        # Avoid duplicates in search
+        if define.base_url == state.current_compound_url and not state.doxyfile['M_SEARCH_DISABLED']:
             result = Empty()
             result.flags = ResultFlag.DEFINE|(ResultFlag.DEPRECATED if define.is_deprecated else ResultFlag(0))
-            result.url = state.current_compound_url + '#' + define.id
+            result.url = define.base_url + '#' + define.id
             result.prefix = []
             result.name = define.name
             result.keywords = search_keywords
index ffd7a5942bec7424be64d4c24f3e02edb5e2356a..415fab9398a7f644a4510e46a4c62a456e30635f 100644 (file)
@@ -1,5 +1,5 @@
             <dt>
               {% set j = joiner(',\n              ') %}
-              <span class="m-doc-wrap-bumper">#define <a href="#{{ define.id }}" {% if define.has_details %}class="m-doc"{% else %}class="m-doc-self" name="{{ define.id }}"{% endif %}>{{ define.name }}</a>{% if define.params != None %}(</span><span class="m-doc-wrap">{% for param in define.params %}{{ j() }}{{ param[0] }}{% endfor %}){% endif %}{% if define.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}</span>
+              <span class="m-doc-wrap-bumper">#define <a href="{% if define.base_url != compound.url %}{{ define.base_url }}{% endif %}#{{ define.id }}" {% if define.has_details or define.base_url != compound.url %}class="m-doc"{% else %}class="m-doc-self" name="{{ define.id }}"{% endif %}>{{ define.name }}</a>{% if define.params != None %}(</span><span class="m-doc-wrap">{% for param in define.params %}{{ j() }}{{ param[0] }}{% endfor %}){% endif %}{% if define.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}</span>
             </dt>
             <dd>{{ define.brief }}</dd>