These put the filename into a different tag, and don't use anchors.
# Linking to namespaces, structs and classes
if child.attrib['kind'] in ['class', 'struct', 'namespace']:
name = child.find('name').text
- link = path + child.findtext('filename') # <filename> can be empty (cppreference tag file)
+ # The cppreference tag file has <filename> empty
+ link = path + child.findtext('filename')
symbol_mapping[name] = (None, link, css_classes)
for member in child.findall('member'):
if not 'kind' in member.attrib: continue
+ # In case of the cppreference tag file, <compound>
+ # <filename> is empty, and <anchorfile> inside <member>
+ # is used instead. Doxygen fills both, so use
+ # <anchorfile> to cover both cases.
+ link = path + member.find('anchorfile').text
+
# Typedefs, constants, variables
if member.attrib['kind'] in ['typedef', 'enumvalue', 'variable']:
- symbol_mapping[name + '::' + member.find('name').text] = (None, link + '#' + member.findtext('anchor'), css_classes)
+ symbol_mapping[name + '::' + member.find('name').text] = (None, link + ('#' + member.findtext('anchor') if member.findtext('anchor') else ''), css_classes)
# Functions
if member.attrib['kind'] == 'function':
# <filename> can be empty (cppreference tag file)
- symbol_mapping[name + '::' + member.find('name').text + "()"] = (None, link + '#' + member.findtext('anchor'), css_classes)
+ symbol_mapping[name + '::' + member.find('name').text + "()"] = (None, link + ('#' + member.findtext('anchor') if member.findtext('anchor') else ''), css_classes)
# Enums with values
if member.attrib['kind'] == 'enumeration':
<li><a href="https://doc.magnum.graphics/corrade/namespaceCorrade_1_1Utility_1_1Path.html?q=hello#search">Link to class with query and hash after</a></li>
<li>Flat link: <a class="m-flat" href="https://doc.magnum.graphics/corrade/plugin-management.html">Plugin management</a></li>
</ul>
+<p>STL tagfile, which uses slightly different semantic:</p>
+<ul>
+<li>Function: <a href="http://en.cppreference.com/w/cpp/string/byte/memchr">std::memchr()</a></li>
+<li>Variable: <a href="http://en.cppreference.com/w/cpp/numeric/math/div">std::div_t::quot</a></li>
+</ul>
<p>These should produce warnings:</p>
<ul>
<li>Link to nonexistent name will be rendered as code: <code>nonExistent()</code></li>
- :dox:`Link to class with query and hash after <Utility::Path?q=hello#search>`
- Flat link: :dox-flat:`plugin-management`
+STL tagfile, which uses slightly different semantic:
+
+- Function: :dox:`std::memchr()`
+- Variable: :dox:`std::div_t::quot`
+
These should produce warnings:
- Link to nonexistent name will be rendered as code: :dox:`nonExistent()`
<li><a class="m-flat m-text m-strong" href="https://doc.magnum.graphics/corrade/namespaceCorrade_1_1Utility_1_1Path.html?q=hello#search">Link to class with query and hash after</a></li>
<li>Flat link: <a class="m-flat m-text m-strong" href="https://doc.magnum.graphics/corrade/plugin-management.html">Plugin management</a></li>
</ul>
+<p>STL tagfile, which uses slightly different semantic:</p>
+<ul>
+<li>Function: <a class="m-flat m-text" href="http://en.cppreference.com/w/cpp/string/byte/memchr">std::memchr()</a></li>
+<li>Variable: <a class="m-flat m-text" href="http://en.cppreference.com/w/cpp/numeric/math/div">std::div_t::quot</a></li>
+</ul>
<p>These should produce warnings:</p>
<ul>
<li>Link to nonexistent name will be rendered as code: <code>nonExistent()</code></li>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<!-- To avoid bloat, the following is just a cherry-picked subset of
+ stl.tag from cppreference.com, with everything needed by:
+ - plugins/m/test/dox/page.rst -->
+<tagfile>
+ <compound kind="namespace">
+ <name>std</name>
+ <filename></filename>
+ <member kind="function">
+ <type>T</type>
+ <name>memchr</name>
+ <anchorfile>cpp/string/byte/memchr</anchorfile>
+ <anchor></anchor>
+ <arglist>(T... args)</arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>std::div_t</name>
+ <filename>cpp/numeric/math/div</filename>
+ <member kind="variable">
+ <type>T</type>
+ <name>quot</name>
+ <anchorfile>cpp/numeric/math/div</anchorfile>
+ <anchor></anchor>
+ <arglist></arglist>
+ </member>
+ </compound>
+</tagfile>
self.run_pelican({
'PLUGINS': ['m.htmlsanity', 'm.dox'],
'M_DOX_TAGFILES': [
- ('../doc/documentation/corrade.tag', 'https://doc.magnum.graphics/corrade/', ['Corrade::'])]
+ ('../doc/documentation/corrade.tag', 'https://doc.magnum.graphics/corrade/', ['Corrade::']),
+ ('m/test/dox/stl.tag', 'http://en.cppreference.com/w/', [])]
})
self.assertEqual(*self.actual_expected_contents('page.html'))
self.run_pelican({
'PLUGINS': ['m.htmlsanity', 'm.dox'],
'M_DOX_TAGFILES': [
- ('../doc/documentation/corrade.tag', 'https://doc.magnum.graphics/corrade/', ['Corrade::'], ['m-flat', 'm-text', 'm-strong'])]
+ ('../doc/documentation/corrade.tag', 'https://doc.magnum.graphics/corrade/', ['Corrade::'], ['m-flat', 'm-text', 'm-strong']),
+ ('m/test/dox/stl.tag', 'http://en.cppreference.com/w/', [], ['m-flat', 'm-text'])]
})
self.assertEqual(*self.actual_expected_contents('page.html', 'page_css_classes.html'))