boostbook/test/doxygen/autodoc.gold
Andrey Semashev 719af2337f Fix handling of multiple exception descriptions, support free form description.
When there are multiple \throws entries in a function documentation, the second
and further exception names were omitted from output and a combined description
was associated with the first exception. Fix this by producing separate
paragraphs, one per exception.

Additionally, support free form exception description when the exception type
is specified as "~". In this case, the exception name is not used, and the
entry description is used to initialize the paragraph in the output.

Updated test to verify these changes.
2024-07-06 17:39:23 +03:00

127 lines
16 KiB
XML

<?xml version="1.0" standalone="yes"?>
<library-reference id="example_reference"><title>Example Reference</title><header id="doxygen.example_reference.example_8hpp" name="boost/example.hpp">
<namespace name="example">
<class id="doxygen.example_reference.classexample_1_1example" name="example"><purpose>Documentation for class example. </purpose><description><para>Detailed documentation</para><para><programlisting language="c++">void class_code_sample();
</programlisting> </para></description><class id="doxygen.example_reference.classexample_1_1example_1_1inner__class" name="inner_class"><data-member id="doxygen.example_reference.classexample_1_1example_1_1inner__class_1ac614c06aa452469dc84b7bdd12170aa0" name="x"><type>int</type></data-member>
</class><enum id="doxygen.example_reference.classexample_1_1example_1a0b6c6b5aff0fb772025b1a6884b20f8a" name="class_enum"><enumvalue id="doxygen.example_reference.classexample_1_1example_1a0b6c6b5aff0fb772025b1a6884b20f8aa7a5cd5e0c560f3500f5d9331476ac849" name="enumerator"/></enum>
<typedef id="doxygen.example_reference.classexample_1_1example_1ad63b87a546d00766ecd1575c3a7ecea7" name="documented_type1"><description><para>This type has documentation. </para></description><type>int</type></typedef>
<typedef id="doxygen.example_reference.classexample_1_1example_1a82838c6c77fbcd8ccaa427ed8dea13d4" name="documented_type2"><purpose>This type has documentation. </purpose><type>long</type></typedef>
<typedef id="doxygen.example_reference.classexample_1_1example_1aacd4626361b31f0e40dfb6284abda4ee" name="documented_type3"><description><para>This type has documentation. </para></description><type>long double</type></typedef>
<typedef id="doxygen.example_reference.classexample_1_1example_1a51a56cbe77a112be3fd45b60f80d87f8" name="undocumented_type1"><type>short</type></typedef>
<typedef id="doxygen.example_reference.classexample_1_1example_1a041b00063109f55f4c25483dfbb2d210" name="undocumented_type2"><type>double</type></typedef>
<data-member id="doxygen.example_reference.classexample_1_1example_1a42e10df81788834c5dffc9d918d1429d" name="integer"><type>int</type></data-member>
<data-member id="doxygen.example_reference.classexample_1_1example_1a14cfa0dd95638f07dca4bd1ee0cab0b2" name="mutable_integer" specifiers="mutable"><type>int</type></data-member>
<data-member id="doxygen.example_reference.classexample_1_1example_1a3ac926fba2823481c69f2c8a82b0de70" name="const_integer"><type>const int</type></data-member>
<data-member id="doxygen.example_reference.classexample_1_1example_1aa18fb135936bc5fc37bc778e0c247e48" name="static_integer" specifiers="static"><type>int</type></data-member>
<data-member id="doxygen.example_reference.classexample_1_1example_1a292e39fe25fd2adec252987fb7f6887d" name="static_const_integer" specifiers="static"><type>const int</type></data-member>
<method-group name="public member functions">
<constructor id="doxygen.example_reference.classexample_1_1example_1a19b27b70d9c7459d13f12dff227252a6" cv="= default"><parameter name=""><paramtype><classname>example</classname> const &amp;</paramtype></parameter></constructor>
<copy-assignment id="doxygen.example_reference.classexample_1_1example_1a052088e28fe7735bf0764133ba40b8b0" cv="= delete"><type><classname>example</classname> &amp;</type><parameter name=""><paramtype><classname>example</classname> const &amp;</paramtype></parameter></copy-assignment>
<method id="doxygen.example_reference.classexample_1_1example_1ab2bdbdf135a702f660e50c26ca9378da" name="virtual_method" specifiers="virtual"><type>int</type></method>
<method id="doxygen.example_reference.classexample_1_1example_1a87f3722f5689c3a2e1692d817fe31fb0" name="virtual_abstract_method" cv="= 0" specifiers="virtual"><type>int</type></method>
<method id="doxygen.example_reference.classexample_1_1example_1af246a7a937361f2df6d8cd2e1f9cc97c" name="virtual_const_method" cv="const" specifiers="virtual"><type>int</type></method>
<method id="doxygen.example_reference.classexample_1_1example_1a4c9dda64892a30b49e8b36598f829e5f" name="method_with_default_value"><type>int</type><parameter name=""><paramtype>int</paramtype><default>default_value</default></parameter></method>
<method id="doxygen.example_reference.classexample_1_1example_1a00ee7615aa7f639fa100654e18c2ec7e" name="method_with_fp"><type>int</type><parameter name="fp"><paramtype>int(*)()</paramtype></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
<method id="doxygen.example_reference.classexample_1_1example_1a21a7e932cbac009a2d0953f8bc1b63bb" name="method_with_string_default1"><type>int</type><parameter name=""><paramtype>char *</paramtype><default>")"</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
<method id="doxygen.example_reference.classexample_1_1example_1acb5d54e553e4b4f9be4f022cf739c16d" name="method_with_string_default2"><type>int</type><parameter name=""><paramtype>char *</paramtype><default>"("</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
<method id="doxygen.example_reference.classexample_1_1example_1aeb0740767eb13951bcbd6be9482afa6e" name="method_with_char_default1"><type>int</type><parameter name=""><paramtype>char</paramtype><default>'('</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
<method id="doxygen.example_reference.classexample_1_1example_1a2ccc637ca77e489be094f0081ccc1013" name="method_with_char_default2"><type>int</type><parameter name=""><paramtype>char</paramtype><default>')'</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
<method id="doxygen.example_reference.classexample_1_1example_1acc49314f2ac3126967bed8a2dbad744c" name="volatile_method_with_fp" cv="volatile"><type>int</type><parameter name="fp"><paramtype>int(*)()</paramtype></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
<method id="doxygen.example_reference.classexample_1_1example_1a685217502ec2e7465f379c7e86af7b3e" name="volatile_method_with_string_default1" cv="volatile"><type>int</type><parameter name=""><paramtype>char *</paramtype><default>")"</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
<method id="doxygen.example_reference.classexample_1_1example_1ab8c7fe51d0ca272d46c7e78408c410b9" name="volatile_method_with_string_default2" cv="volatile"><type>int</type><parameter name=""><paramtype>char *</paramtype><default>"("</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
<method id="doxygen.example_reference.classexample_1_1example_1a1198ef188dd17b326a593ae0ee92e840" name="volatile_method_with_char_default1" cv="volatile"><type>int</type><parameter name=""><paramtype>char</paramtype><default>'('</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
<method id="doxygen.example_reference.classexample_1_1example_1a44fd2d43a6c4bf5433c756c304a5874c" name="volatile_method_with_char_default2" cv="volatile"><type>int</type><parameter name=""><paramtype>char</paramtype><default>')'</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
<method id="doxygen.example_reference.classexample_1_1example_1af85b7abc9f26301b923d6f9374f7526f" name="const_method" cv="const"><type>void</type></method>
<method id="doxygen.example_reference.classexample_1_1example_1a2f14e986068ccac584d44d3d3b3db866" name="volatile_method" cv="volatile"><type>void</type></method>
<method id="doxygen.example_reference.classexample_1_1example_1a022431600a333e3fbb7ec43d5b80728e" name="trad_noexcept" cv="noexcept"><type>void</type></method>
<method id="doxygen.example_reference.classexample_1_1example_1add98ba3be9dfc459e23bc839ecdb5eb7" name="trad_noexcept_if" cv="noexcept(a==b &amp;&amp;(c||d))"><type>void</type></method>
<method id="doxygen.example_reference.classexample_1_1example_1a5bdf6e79fa4e2df7c1dcad5e7cf170df" name="boost_noexcept" cv="noexcept"><type>void</type></method>
<method id="doxygen.example_reference.classexample_1_1example_1a8c045ee60b4befef03dc7cfe3e2d5d94" name="boost_noexcept_if" cv="noexcept(condition)"><type>void</type></method>
<method id="doxygen.example_reference.classexample_1_1example_1ad51b091c3b30246985bfa005f4b2461b" name="trad_constexpr" cv="constexpr"><type>void</type></method>
<method id="doxygen.example_reference.classexample_1_1example_1a8de98caff0ca92f1bf80f5eb3259f36e" name="boost_constexpr" cv="constexpr"><type>void</type></method>
<method id="doxygen.example_reference.classexample_1_1example_1a36cb47f31e1c4d16a26c5adef3afe1b8" name="boost_constexpr_or_const" cv="constexpr"><type>void</type></method>
<method id="doxygen.example_reference.classexample_1_1example_1aa838b0aa12e0d7dc9f35343998a5c3c3" name="constexpr_noexcept" cv="constexpr noexcept"><type>void</type></method>
<method id="doxygen.example_reference.classexample_1_1example_1a8926190cefda780e05916bdfa8f909a9" name="conversion-operator" specifiers="explicit"><type>int</type></method>
</method-group>
<method-group name="public static functions">
<method id="doxygen.example_reference.classexample_1_1example_1adf9547724924727d26d79a3ceb3c58e9" name="static_method" specifiers="static"><type>int</type></method>
<method id="doxygen.example_reference.classexample_1_1example_1a0affbcc5d886ecc4655fdce3c319e878" name="static_constexpr" cv="constexpr" specifiers="static"><type>int</type></method>
</method-group>
</class><struct id="doxygen.example_reference.structexample_1_1example__template" name="example_template"><template>
<template-type-parameter name="TypeParameter"><purpose><para>A template parameter </para></purpose></template-type-parameter>
<template-nontype-parameter name="NonTypeParameter"><type>int</type><purpose><para>This is a non-type template parameter </para></purpose></template-nontype-parameter>
<template-type-parameter name="TypeParameterWithDefault"><default>int</default><purpose><para>This is a template parameter with a default argument </para></purpose></template-type-parameter>
</template><description><para>Test some doxygen markup</para><para><warning><para>This is just an example.</para>
</warning>
Embedded docbook list:</para><para>
<orderedlist><listitem><simpara>1</simpara></listitem><listitem><simpara>2</simpara></listitem></orderedlist>
</para><para><emphasis>Special</emphasis> <emphasis role="bold">Bold</emphasis> <computeroutput>Typewriter</computeroutput> <emphasis>Italics</emphasis> <emphasis>emphasis</emphasis> <computeroutput>parameter</computeroutput> </para><para><itemizedlist>
<listitem><para>Arg1 first argument. </para>
</listitem>
<listitem><para>Arg2 second argument.</para>
</listitem>
</itemizedlist>
<itemizedlist>
<listitem><para>First list item. </para>
</listitem>
<listitem><para>Second list item</para>
</listitem>
</itemizedlist>
Line 1<sbr/>
Line 2</para><para><programlisting language="c++">void foo() {}
void foo2() {}
</programlisting></para><para><programlisting language="c++">void bar() {}
void bar2() {}
</programlisting></para><para>Alternative way of writing code, has a complicated workaround because doxygen treats the empty line as a paragraph separator:</para><programlisting>
int bar();
int bar2();
</programlisting><para>Unfortunately the workaround will merge consecutive blocks, like this:</para><programlisting>
int foo();
int foo2();
</programlisting><para>
</para></description></struct><struct id="doxygen.example_reference.structexample_1_1specialization__test" name="specialization_test"><template>
<template-type-parameter name="T"/>
</template></struct><struct-specialization id="doxygen.example_reference.structexample_1_1specialization__test_3_01T_01_5_01_4" name="specialization_test"><template>
<template-type-parameter name="T"/>
</template><specialization><template-arg>T *</template-arg></specialization><method-group name="public member functions">
<constructor id="doxygen.example_reference.structexample_1_1specialization__test_3_01T_01_5_01_4_1a39ac19324a989c7fb4210083437e60a0"><description><para>A constructor. </para></description></constructor>
<destructor id="doxygen.example_reference.structexample_1_1specialization__test_3_01T_01_5_01_4_1a7a18694691d4201521e17196f96c4c91"><description><para>A destructor. </para></description></destructor>
<copy-assignment id="doxygen.example_reference.structexample_1_1specialization__test_3_01T_01_5_01_4_1a4869d58ece948f30e7f42cce63f75b33"><type><emphasis>unspecified</emphasis></type><parameter name=""><paramtype>const <classname>specialization_test</classname> &amp;</paramtype></parameter><description><para>An assignment operator. </para></description></copy-assignment>
</method-group>
</struct-specialization><enum id="doxygen.example_reference.example_8hpp_1a0a8881f7d06080025be5a0f336ceca0d" name="namespace_enum"><enumvalue id="doxygen.example_reference.example_8hpp_1a0a8881f7d06080025be5a0f336ceca0da385e078f4946b3beaafca21a140e53d1" name="enumerator"/></enum>
<data-member id="doxygen.example_reference.example_8hpp_1a009e76bb0702b779cbc37aae1bee5884" name="namespace_integer"><type>int</type></data-member>
<data-member id="doxygen.example_reference.example_8hpp_1af51ac3ecea36f0610717f9e49b492e62" name="namespace_static_integer" specifiers="static"><type>int</type></data-member>
<data-member id="doxygen.example_reference.example_8hpp_1a072a0f39ed85f7ac668d3c32d3cfb336" name="namespace_const_integer"><type>const int</type></data-member>
<data-member id="doxygen.example_reference.example_8hpp_1a67757b75f7d21f55889f6ec0a1f809b0" name="namespace_static_const_integer" specifiers="static"><type>const int</type></data-member>
<function id="doxygen.example_reference.example_8hpp_1a3df0e5dec78e47ca7e53ce82612e1d29" name="free_function"><type>void</type><parameter name="x"><paramtype>int</paramtype><description><para>Parameter description.</para></description></parameter><description><para>
<programlisting language="c++">void function_code_sample();
</programlisting> </para></description></function>
<function id="doxygen.example_reference.example_8hpp_1addcdeb7a8901ec383539fabdc69b1ae1" name="namespace_func"><type>int</type><parameter name="i"><paramtype>int</paramtype><description><para>A function parameter </para></description></parameter><parameter name="j"><paramtype>int</paramtype><description><para>Another </para></description></parameter><description><para>
This is a test function. <link linkend="doxygen.example_reference.classexample_1_1example">Link to class</link> <link linkend="doxygen.example_reference.structexample_1_1example__template">Link to class template</link> <note><para>This is a note.</para>
</note>
<formalpara><title>See Also:</title><para><link linkend="doxygen.example_reference.classexample_1_1example">example::example</link> and <link linkend="doxygen.example_reference.structexample_1_1example__template">example_template</link> </para>
</formalpara>
</para></description><requires><para>i &gt; j</para>
</requires><returns><para>The answer </para>
</returns><throws><simpara><classname>std::runtime_error</classname> Some error description </simpara>
<simpara><classname>std::bad_alloc</classname> Memory allocation error </simpara>
<simpara>Free form description of exception throwing </simpara>
</throws></function>
<function id="doxygen.example_reference.example_8hpp_1ae06fcc1d7c044252611b2ebb2b665e53" name="namespace_func_template"><type>void</type><template>
<template-type-parameter name="TypeParameter"><purpose><para>A template parameter </para></purpose></template-type-parameter>
<template-nontype-parameter name="NonTypeParameter"><type>int</type><purpose><para>This is a non-type template parameter </para></purpose></template-nontype-parameter>
</template><description><para>Testing a function template.
</para></description></function>
</namespace>
<macro id="doxygen.example_reference.example_8hpp_1a27aeb9b516a16c5ab8016104b8f613d1" name="EXAMPLE" kind="functionlike"><macro-parameter name="m"/><purpose>Documentation for macro example. </purpose></macro>
</header>
</library-reference>