Add support for @deprecated@ and @since version@ comments (still needs some

work)
pull/193/head
Michael R Sweet 19 years ago
parent e2053b33c7
commit 2fc73455b2
  1. 185
      doc/reference.html
  2. 217
      mxmldoc.c
  3. 4
      test/function.cxx

@ -7,6 +7,7 @@
h1, h2, h3, p { font-family: sans-serif; text-align: justify; }
tt, pre a:link, pre a:visited, tt a:link, tt a:visited { font-weight: bold; color: #7f0000; }
pre { font-weight: bold; color: #7f0000; margin-left: 2em; }
span.info { font-weight: bold; padding: 2; color: #ffffff; background: #000000; float: right; }
--></style>
</head>
<body>
@ -24,7 +25,7 @@
<li><a href='#mxml_type_e'><tt>mxml_type_e</tt></a></li>
</ul>
<!-- NEW PAGE -->
<h3><a name='mxml_type_e'>mxml_type_e</a></h3>
<h3><span class='info'>NO</span><a name='mxml_type_e'>mxml_type_e</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>The XML node type.</p>
@ -32,13 +33,13 @@
<p class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>MXML_CUSTOM</tt></td><td>Custom data</td></tr>
<tr><td><tt>MXML_ELEMENT</tt></td><td>XML element with attributes</td></tr>
<tr><td><tt>MXML_IGNORE</tt></td><td>Ignore/throw away node</td></tr>
<tr><td><tt>MXML_INTEGER</tt></td><td>Integer value</td></tr>
<tr><td><tt>MXML_OPAQUE</tt></td><td>Opaque string</td></tr>
<tr><td><tt>MXML_REAL</tt></td><td>Real value</td></tr>
<tr><td><tt>MXML_TEXT</tt></td><td>Text fragment</td></tr>
<tr><td><span class='info'>NO</span><tt>MXML_CUSTOM</tt></td><td>Custom data</td></tr>
<tr><td><span class='info'>NO</span><tt>MXML_ELEMENT</tt></td><td>XML element with attributes</td></tr>
<tr><td><span class='info'>NO</span><tt>MXML_IGNORE</tt></td><td>Ignore/throw away node</td></tr>
<tr><td><span class='info'>NO</span><tt>MXML_INTEGER</tt></td><td>Integer value</td></tr>
<tr><td><span class='info'>NO</span><tt>MXML_OPAQUE</tt></td><td>Opaque string</td></tr>
<tr><td><span class='info'>NO</span><tt>MXML_REAL</tt></td><td>Real value</td></tr>
<tr><td><span class='info'>NO</span><tt>MXML_TEXT</tt></td><td>Text fragment</td></tr>
</tbody></table></p>
<!-- NEW PAGE -->
<h2><a name='_functions'>Functions</a></h2>
@ -87,7 +88,7 @@
<li><a href='#mxmlWalkPrev'><tt>mxmlWalkPrev()</tt></a></li>
</ul>
<!-- NEW PAGE -->
<h3><a name='mxmlAdd'>mxmlAdd()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlAdd'>mxmlAdd()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Add a node to a tree.
@ -119,7 +120,7 @@ mxmlAdd(
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3><a name='mxmlDelete'>mxmlDelete()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlDelete'>mxmlDelete()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Delete a node and all of its children.
@ -141,7 +142,7 @@ mxmlDelete(
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3><a name='mxmlElementGetAttr'>mxmlElementGetAttr()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlElementGetAttr'>mxmlElementGetAttr()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Get an attribute.
@ -165,7 +166,7 @@ mxmlElementGetAttr(
<h4>Returns</h4>
<p>Attribute value or NULL</p>
<!-- NEW PAGE -->
<h3><a name='mxmlElementSetAttr'>mxmlElementSetAttr()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlElementSetAttr'>mxmlElementSetAttr()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Set an attribute.
@ -193,7 +194,7 @@ mxmlElementSetAttr(
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3><a name='mxmlEntityAddCallback'>mxmlEntityAddCallback()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlEntityAddCallback'>mxmlEntityAddCallback()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Add a callback to convert entities to Unicode.</p>
@ -207,7 +208,7 @@ mxmlEntityAddCallback(void);
<h4>Returns</h4>
<p>0 on success, -1 on failure</p>
<!-- NEW PAGE -->
<h3><a name='mxmlEntityGetName'>mxmlEntityGetName()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlEntityGetName'>mxmlEntityGetName()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Get the name that corresponds to the character value.
@ -228,7 +229,7 @@ mxmlEntityGetName(
<h4>Returns</h4>
<p>Entity name or NULL</p>
<!-- NEW PAGE -->
<h3><a name='mxmlEntityGetValue'>mxmlEntityGetValue()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlEntityGetValue'>mxmlEntityGetValue()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Get the character corresponding to a named entity.
@ -250,7 +251,7 @@ mxmlEntityGetValue(
<h4>Returns</h4>
<p>Character value or -1 on error</p>
<!-- NEW PAGE -->
<h3><a name='mxmlEntityRemoveCallback'>mxmlEntityRemoveCallback()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlEntityRemoveCallback'>mxmlEntityRemoveCallback()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Remove a callback.</p>
@ -264,7 +265,7 @@ mxmlEntityRemoveCallback(void);
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3><a name='mxmlFindElement'>mxmlFindElement()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlFindElement'>mxmlFindElement()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Find the named element.
@ -302,7 +303,7 @@ mxmlFindElement(
<h4>Returns</h4>
<p>Element node or NULL</p>
<!-- NEW PAGE -->
<h3><a name='mxmlIndexDelete'>mxmlIndexDelete()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlIndexDelete'>mxmlIndexDelete()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Delete an index.</p>
@ -321,7 +322,7 @@ mxmlIndexDelete(
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3><a name='mxmlIndexEnum'>mxmlIndexEnum()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlIndexEnum'>mxmlIndexEnum()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Return the next node in the index.
@ -342,7 +343,7 @@ mxmlIndexEnum(
<h4>Returns</h4>
<p>Next node or NULL if there is none</p>
<!-- NEW PAGE -->
<h3><a name='mxmlIndexFind'>mxmlIndexFind()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlIndexFind'>mxmlIndexFind()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Find the next matching node.
@ -370,7 +371,7 @@ mxmlIndexFind(
<h4>Returns</h4>
<p>Node or NULL if none found</p>
<!-- NEW PAGE -->
<h3><a name='mxmlIndexNew'>mxmlIndexNew()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlIndexNew'>mxmlIndexNew()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Create a new index.
@ -399,7 +400,7 @@ mxmlIndexNew(
<h4>Returns</h4>
<p>New index</p>
<!-- NEW PAGE -->
<h3><a name='mxmlIndexReset'>mxmlIndexReset()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlIndexReset'>mxmlIndexReset()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Reset the enumeration/find pointer in the index and
@ -422,7 +423,7 @@ mxmlIndexReset(
<h4>Returns</h4>
<p>First node or NULL if there is none</p>
<!-- NEW PAGE -->
<h3><a name='mxmlLoadFd'>mxmlLoadFd()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlLoadFd'>mxmlLoadFd()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Load a file descriptor into an XML node tree.
@ -454,7 +455,7 @@ mxmlLoadFd(
<h4>Returns</h4>
<p>First node or NULL if the file could not be read.</p>
<!-- NEW PAGE -->
<h3><a name='mxmlLoadFile'>mxmlLoadFile()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlLoadFile'>mxmlLoadFile()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Load a file into an XML node tree.
@ -486,7 +487,7 @@ mxmlLoadFile(
<h4>Returns</h4>
<p>First node or NULL if the file could not be read.</p>
<!-- NEW PAGE -->
<h3><a name='mxmlLoadString'>mxmlLoadString()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlLoadString'>mxmlLoadString()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Load a string into an XML node tree.
@ -518,7 +519,7 @@ mxmlLoadString(
<h4>Returns</h4>
<p>First node or NULL if the string has errors.</p>
<!-- NEW PAGE -->
<h3><a name='mxmlNewCDATA'>mxmlNewCDATA()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlNewCDATA'>mxmlNewCDATA()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Create a new CDATA node.
@ -544,7 +545,7 @@ mxmlNewCDATA(
<h4>Returns</h4>
<p>New node</p>
<!-- NEW PAGE -->
<h3><a name='mxmlNewCustom'>mxmlNewCustom()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlNewCustom'>mxmlNewCustom()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Create a new custom data node.
@ -570,7 +571,7 @@ mxmlNewCustom(
<h4>Returns</h4>
<p>New node</p>
<!-- NEW PAGE -->
<h3><a name='mxmlNewElement'>mxmlNewElement()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlNewElement'>mxmlNewElement()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Create a new element node.
@ -595,7 +596,7 @@ mxmlNewElement(
<h4>Returns</h4>
<p>New node</p>
<!-- NEW PAGE -->
<h3><a name='mxmlNewInteger'>mxmlNewInteger()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlNewInteger'>mxmlNewInteger()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Create a new integer node.
@ -620,7 +621,7 @@ mxmlNewInteger(
<h4>Returns</h4>
<p>New node</p>
<!-- NEW PAGE -->
<h3><a name='mxmlNewOpaque'>mxmlNewOpaque()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlNewOpaque'>mxmlNewOpaque()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Create a new opaque string.
@ -646,7 +647,7 @@ mxmlNewOpaque(
<h4>Returns</h4>
<p>New node</p>
<!-- NEW PAGE -->
<h3><a name='mxmlNewReal'>mxmlNewReal()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlNewReal'>mxmlNewReal()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Create a new real number node.
@ -671,7 +672,7 @@ mxmlNewReal(
<h4>Returns</h4>
<p>New node</p>
<!-- NEW PAGE -->
<h3><a name='mxmlNewText'>mxmlNewText()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlNewText'>mxmlNewText()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Create a new text fragment node.
@ -700,7 +701,7 @@ mxmlNewText(
<h4>Returns</h4>
<p>New node</p>
<!-- NEW PAGE -->
<h3><a name='mxmlNewTextf'>mxmlNewTextf()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlNewTextf'>mxmlNewTextf()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Create a new formatted text fragment node.
@ -731,7 +732,7 @@ mxmlNewTextf(
<h4>Returns</h4>
<p>New node</p>
<!-- NEW PAGE -->
<h3><a name='mxmlRemove'>mxmlRemove()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlRemove'>mxmlRemove()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Remove a node from its parent.
@ -753,7 +754,7 @@ mxmlRemove(
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3><a name='mxmlSaveAllocString'>mxmlSaveAllocString()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlSaveAllocString'>mxmlSaveAllocString()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Save an XML node tree to an allocated string.
@ -784,7 +785,7 @@ mxmlSaveAllocString(
<h4>Returns</h4>
<p>Allocated string or NULL</p>
<!-- NEW PAGE -->
<h3><a name='mxmlSaveFd'>mxmlSaveFd()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlSaveFd'>mxmlSaveFd()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Save an XML tree to a file descriptor.
@ -811,7 +812,7 @@ mxmlSaveFd(
<h4>Returns</h4>
<p>0 on success, -1 on error.</p>
<!-- NEW PAGE -->
<h3><a name='mxmlSaveFile'>mxmlSaveFile()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlSaveFile'>mxmlSaveFile()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Save an XML tree to a file.
@ -838,7 +839,7 @@ mxmlSaveFile(
<h4>Returns</h4>
<p>0 on success, -1 on error.</p>
<!-- NEW PAGE -->
<h3><a name='mxmlSaveString'>mxmlSaveString()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlSaveString'>mxmlSaveString()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Save an XML node tree to a string.
@ -871,7 +872,7 @@ mxmlSaveString(
<h4>Returns</h4>
<p>Size of string</p>
<!-- NEW PAGE -->
<h3><a name='mxmlSetCDATA'>mxmlSetCDATA()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlSetCDATA'>mxmlSetCDATA()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Set the element name of a CDATA node.
@ -894,7 +895,7 @@ mxmlSetCDATA(
<h4>Returns</h4>
<p>0 on success, -1 on failure</p>
<!-- NEW PAGE -->
<h3><a name='mxmlSetCustom'>mxmlSetCustom()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlSetCustom'>mxmlSetCustom()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Set the data and destructor of a custom data node.
@ -917,7 +918,7 @@ mxmlSetCustom(
<h4>Returns</h4>
<p>0 on success, -1 on failure</p>
<!-- NEW PAGE -->
<h3><a name='mxmlSetCustomHandlers'>mxmlSetCustomHandlers()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlSetCustomHandlers'>mxmlSetCustomHandlers()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Set the handling functions for custom data.
@ -944,7 +945,7 @@ mxmlSetCustomHandlers(
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3><a name='mxmlSetElement'>mxmlSetElement()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlSetElement'>mxmlSetElement()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Set the name of an element node.
@ -967,7 +968,7 @@ mxmlSetElement(
<h4>Returns</h4>
<p>0 on success, -1 on failure</p>
<!-- NEW PAGE -->
<h3><a name='mxmlSetErrorCallback'>mxmlSetErrorCallback()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlSetErrorCallback'>mxmlSetErrorCallback()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Set the error message callback.</p>
@ -981,7 +982,7 @@ mxmlSetErrorCallback(void);
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3><a name='mxmlSetInteger'>mxmlSetInteger()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlSetInteger'>mxmlSetInteger()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Set the value of an integer node.
@ -1004,7 +1005,7 @@ mxmlSetInteger(
<h4>Returns</h4>
<p>0 on success, -1 on failure</p>
<!-- NEW PAGE -->
<h3><a name='mxmlSetOpaque'>mxmlSetOpaque()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlSetOpaque'>mxmlSetOpaque()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Set the value of an opaque node.
@ -1027,7 +1028,7 @@ mxmlSetOpaque(
<h4>Returns</h4>
<p>0 on success, -1 on failure</p>
<!-- NEW PAGE -->
<h3><a name='mxmlSetReal'>mxmlSetReal()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlSetReal'>mxmlSetReal()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Set the value of a real number node.
@ -1050,7 +1051,7 @@ mxmlSetReal(
<h4>Returns</h4>
<p>0 on success, -1 on failure</p>
<!-- NEW PAGE -->
<h3><a name='mxmlSetText'>mxmlSetText()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlSetText'>mxmlSetText()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Set the value of a text node.
@ -1075,7 +1076,7 @@ mxmlSetText(
<h4>Returns</h4>
<p>0 on success, -1 on failure</p>
<!-- NEW PAGE -->
<h3><a name='mxmlSetTextf'>mxmlSetTextf()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlSetTextf'>mxmlSetTextf()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Set the value of a text node to a formatted string.
@ -1102,7 +1103,7 @@ mxmlSetTextf(
<h4>Returns</h4>
<p>0 on success, -1 on failure</p>
<!-- NEW PAGE -->
<h3><a name='mxmlWalkNext'>mxmlWalkNext()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlWalkNext'>mxmlWalkNext()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Walk to the next logical node in the tree.
@ -1129,7 +1130,7 @@ mxmlWalkNext(
<h4>Returns</h4>
<p>Next node or NULL</p>
<!-- NEW PAGE -->
<h3><a name='mxmlWalkPrev'>mxmlWalkPrev()</a></h3>
<h3><span class='info'>NO</span><a name='mxmlWalkPrev'>mxmlWalkPrev()</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Walk to the previous logical node in the tree.
@ -1166,7 +1167,7 @@ mxmlWalkPrev(
<li><a href='#mxml_value_s'><tt>mxml_value_s</tt></a></li>
</ul>
<!-- NEW PAGE -->
<h3><a name='mxml_attr_s'>mxml_attr_s</a></h3>
<h3><span class='info'>NO</span><a name='mxml_attr_s'>mxml_attr_s</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>An XML element attribute value.</p>
@ -1182,11 +1183,11 @@ struct mxml_attr_s
<p class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Attribute name</td></tr>
<tr><td><tt>value</tt></td><td>Attribute value</td></tr>
<tr><td><span class='info'>NO</span><tt>name</tt></td><td>Attribute name</td></tr>
<tr><td><span class='info'>NO</span><tt>value</tt></td><td>Attribute value</td></tr>
</tbody></table></p>
<!-- NEW PAGE -->
<h3><a name='mxml_custom_s'>mxml_custom_s</a></h3>
<h3><span class='info'>NO</span><a name='mxml_custom_s'>mxml_custom_s</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>An XML custom value.</p>
@ -1201,10 +1202,10 @@ struct mxml_custom_s
<p class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>data</tt></td><td>Pointer to (allocated) custom data</td></tr>
<tr><td><span class='info'>NO</span><tt>data</tt></td><td>Pointer to (allocated) custom data</td></tr>
</tbody></table></p>
<!-- NEW PAGE -->
<h3><a name='mxml_index_s'>mxml_index_s</a></h3>
<h3><span class='info'>NO</span><a name='mxml_index_s'>mxml_index_s</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>An XML node index.</p>
@ -1223,14 +1224,14 @@ struct mxml_index_s
<p class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>alloc_nodes</tt></td><td>Allocated nodes in index</td></tr>
<tr><td><tt>attr</tt></td><td>Attribute used for indexing or NULL</td></tr>
<tr><td><tt>cur_node</tt></td><td>Current node</td></tr>
<tr><td><tt>nodes</tt></td><td>Node array</td></tr>
<tr><td><tt>num_nodes</tt></td><td>Number of nodes in index</td></tr>
<tr><td><span class='info'>NO</span><tt>alloc_nodes</tt></td><td>Allocated nodes in index</td></tr>
<tr><td><span class='info'>NO</span><tt>attr</tt></td><td>Attribute used for indexing or NULL</td></tr>
<tr><td><span class='info'>NO</span><tt>cur_node</tt></td><td>Current node</td></tr>
<tr><td><span class='info'>NO</span><tt>nodes</tt></td><td>Node array</td></tr>
<tr><td><span class='info'>NO</span><tt>num_nodes</tt></td><td>Number of nodes in index</td></tr>
</tbody></table></p>
<!-- NEW PAGE -->
<h3><a name='mxml_node_s'>mxml_node_s</a></h3>
<h3><span class='info'>NO</span><a name='mxml_node_s'>mxml_node_s</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>An XML node.</p>
@ -1251,16 +1252,16 @@ struct mxml_node_s
<p class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>child</tt></td><td>First child node</td></tr>
<tr><td><tt>last_child</tt></td><td>Last child node</td></tr>
<tr><td><tt>next</tt></td><td>Next node under same parent</td></tr>
<tr><td><tt>parent</tt></td><td>Parent node</td></tr>
<tr><td><tt>prev</tt></td><td>Previous node under same parent</td></tr>
<tr><td><tt>type</tt></td><td>Node type</td></tr>
<tr><td><tt>value</tt></td><td>Node value</td></tr>
<tr><td><span class='info'>NO</span><tt>child</tt></td><td>First child node</td></tr>
<tr><td><span class='info'>NO</span><tt>last_child</tt></td><td>Last child node</td></tr>
<tr><td><span class='info'>NO</span><tt>next</tt></td><td>Next node under same parent</td></tr>
<tr><td><span class='info'>NO</span><tt>parent</tt></td><td>Parent node</td></tr>
<tr><td><span class='info'>NO</span><tt>prev</tt></td><td>Previous node under same parent</td></tr>
<tr><td><span class='info'>NO</span><tt>type</tt></td><td>Node type</td></tr>
<tr><td><span class='info'>NO</span><tt>value</tt></td><td>Node value</td></tr>
</tbody></table></p>
<!-- NEW PAGE -->
<h3><a name='mxml_text_s'>mxml_text_s</a></h3>
<h3><span class='info'>NO</span><a name='mxml_text_s'>mxml_text_s</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>An XML text value.</p>
@ -1276,11 +1277,11 @@ struct mxml_text_s
<p class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>string</tt></td><td>Fragment string</td></tr>
<tr><td><tt>whitespace</tt></td><td>Leading whitespace?</td></tr>
<tr><td><span class='info'>NO</span><tt>string</tt></td><td>Fragment string</td></tr>
<tr><td><span class='info'>NO</span><tt>whitespace</tt></td><td>Leading whitespace?</td></tr>
</tbody></table></p>
<!-- NEW PAGE -->
<h3><a name='mxml_value_s'>mxml_value_s</a></h3>
<h3><span class='info'>NO</span><a name='mxml_value_s'>mxml_value_s</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>An XML element value.</p>
@ -1297,9 +1298,9 @@ struct mxml_value_s
<p class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>attrs</tt></td><td>Attributes</td></tr>
<tr><td><tt>name</tt></td><td>Name of element</td></tr>
<tr><td><tt>num_attrs</tt></td><td>Number of attributes</td></tr>
<tr><td><span class='info'>NO</span><tt>attrs</tt></td><td>Attributes</td></tr>
<tr><td><span class='info'>NO</span><tt>name</tt></td><td>Name of element</td></tr>
<tr><td><span class='info'>NO</span><tt>num_attrs</tt></td><td>Number of attributes</td></tr>
</tbody></table></p>
<!-- NEW PAGE -->
<h2><a name='_types'>Types</a></h2>
@ -1315,7 +1316,7 @@ struct mxml_value_s
<li><a href='#mxml_value_t'><tt>mxml_value_t</tt></a></li>
</ul>
<!-- NEW PAGE -->
<h3><a name='mxml_attr_t'>mxml_attr_t</a></h3>
<h3><span class='info'>NO</span><a name='mxml_attr_t'>mxml_attr_t</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>An XML element attribute value.</p>
@ -1324,7 +1325,7 @@ struct mxml_value_s
typedef struct <a href='#mxml_attr_s'>mxml_attr_s</a> mxml_attr_t;
</pre>
<!-- NEW PAGE -->
<h3><a name='mxml_custom_load_cb_t'>mxml_custom_load_cb_t</a></h3>
<h3><span class='info'>NO</span><a name='mxml_custom_load_cb_t'>mxml_custom_load_cb_t</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Custom data load callback function</p>
@ -1333,7 +1334,7 @@ typedef struct <a href='#mxml_attr_s'>mxml_attr_s</a> mxml_attr_t;
typedef int (*mxml_custom_load_cb_t)(<a href='#mxml_node_t'>mxml_node_t</a> *, const char *);
</pre>
<!-- NEW PAGE -->
<h3><a name='mxml_custom_save_cb_t'>mxml_custom_save_cb_t</a></h3>
<h3><span class='info'>NO</span><a name='mxml_custom_save_cb_t'>mxml_custom_save_cb_t</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>Custom data save callback function</p>
@ -1342,7 +1343,7 @@ typedef int (*mxml_custom_load_cb_t)(<a href='#mxml_node_t'>mxml_node_t</a> *, c
typedef char * (*mxml_custom_save_cb_t)(<a href='#mxml_node_t'>mxml_node_t</a> *);
</pre>
<!-- NEW PAGE -->
<h3><a name='mxml_custom_t'>mxml_custom_t</a></h3>
<h3><span class='info'>NO</span><a name='mxml_custom_t'>mxml_custom_t</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>An XML custom value.</p>
@ -1351,7 +1352,7 @@ typedef char * (*mxml_custom_save_cb_t)(<a href='#mxml_node_t'>mxml_node_t</a> *
typedef struct <a href='#mxml_custom_s'>mxml_custom_s</a> mxml_custom_t;
</pre>
<!-- NEW PAGE -->
<h3><a name='mxml_element_t'>mxml_element_t</a></h3>
<h3><span class='info'>NO</span><a name='mxml_element_t'>mxml_element_t</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>An XML element value.</p>
@ -1360,7 +1361,7 @@ typedef struct <a href='#mxml_custom_s'>mxml_custom_s</a> mxml_custom_t;
typedef struct <a href='#mxml_value_s'>mxml_value_s</a> mxml_element_t;
</pre>
<!-- NEW PAGE -->
<h3><a name='mxml_index_t'>mxml_index_t</a></h3>
<h3><span class='info'>NO</span><a name='mxml_index_t'>mxml_index_t</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>An XML node index.</p>
@ -1369,7 +1370,7 @@ typedef struct <a href='#mxml_value_s'>mxml_value_s</a> mxml_element_t;
typedef struct <a href='#mxml_index_s'>mxml_index_s</a> mxml_index_t;
</pre>
<!-- NEW PAGE -->
<h3><a name='mxml_node_t'>mxml_node_t</a></h3>
<h3><span class='info'>NO</span><a name='mxml_node_t'>mxml_node_t</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>An XML node.</p>
@ -1378,7 +1379,7 @@ typedef struct <a href='#mxml_index_s'>mxml_index_s</a> mxml_index_t;
typedef struct <a href='#mxml_node_s'>mxml_node_s</a> mxml_node_t;
</pre>
<!-- NEW PAGE -->
<h3><a name='mxml_text_t'>mxml_text_t</a></h3>
<h3><span class='info'>NO</span><a name='mxml_text_t'>mxml_text_t</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>An XML text value.</p>
@ -1387,7 +1388,7 @@ typedef struct <a href='#mxml_node_s'>mxml_node_s</a> mxml_node_t;
typedef struct <a href='#mxml_text_s'>mxml_text_s</a> mxml_text_t;
</pre>
<!-- NEW PAGE -->
<h3><a name='mxml_value_t'>mxml_value_t</a></h3>
<h3><span class='info'>NO</span><a name='mxml_value_t'>mxml_value_t</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>An XML node value.</p>
@ -1401,7 +1402,7 @@ typedef union <a href='#mxml_value_u'>mxml_value_u</a> mxml_value_t;
<li><a href='#mxml_value_u'><tt>mxml_value_u</tt></a></li>
</ul>
<!-- NEW PAGE -->
<h3><a name='mxml_value_u'>mxml_value_u</a></h3>
<h3><span class='info'>NO</span><a name='mxml_value_u'>mxml_value_u</a></h3>
<hr noshade/>
<h4>Description</h4>
<p>An XML node value.</p>
@ -1421,12 +1422,12 @@ union mxml_value_u
<p class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>custom</tt></td><td>Custom data</td></tr>
<tr><td><tt>element</tt></td><td>Element</td></tr>
<tr><td><tt>integer</tt></td><td>Integer number</td></tr>
<tr><td><tt>opaque</tt></td><td>Opaque string</td></tr>
<tr><td><tt>real</tt></td><td>Real number</td></tr>
<tr><td><tt>text</tt></td><td>Text fragment</td></tr>
<tr><td><span class='info'>NO</span><tt>custom</tt></td><td>Custom data</td></tr>
<tr><td><span class='info'>NO</span><tt>element</tt></td><td>Element</td></tr>
<tr><td><span class='info'>NO</span><tt>integer</tt></td><td>Integer number</td></tr>
<tr><td><span class='info'>NO</span><tt>opaque</tt></td><td>Opaque string</td></tr>
<tr><td><span class='info'>NO</span><tt>real</tt></td><td>Real number</td></tr>
<tr><td><span class='info'>NO</span><tt>text</tt></td><td>Text fragment</td></tr>
</tbody></table></p>
</body>
</html>

@ -20,12 +20,14 @@
*
* main() - Main entry for test program.
* add_variable() - Add a variable or argument.
* get_comment_info() - Get info from comment.
* new_documentation() - Create a new documentation tree.
* safe_strcpy() - Copy a string allowing for overlapping strings.
* scan_file() - Scan a source file.
* sort_node() - Insert a node sorted into a tree.
* update_comment() - Update a comment node.
* usage() - Show program usage...
* write_description() - Write the description text.
* write_documentation() - Write HTML documentation.
* write_element() - Write an elements text nodes.
* write_string() - Write a string, quoting XHTML special chars
@ -134,6 +136,7 @@
static mxml_node_t *add_variable(mxml_node_t *parent, const char *name,
mxml_node_t *type);
static char *get_comment_info(mxml_node_t *description);
static mxml_node_t *new_documentation(mxml_node_t **mxmldoc);
static void safe_strcpy(char *dst, const char *src);
static int scan_file(const char *filename, FILE *fp,
@ -142,6 +145,7 @@ static void sort_node(mxml_node_t *tree, mxml_node_t *func);
static void update_comment(mxml_node_t *parent,
mxml_node_t *comment);
static void usage(const char *option);
static void write_description(mxml_node_t *description);
static void write_documentation(const char *title,
const char *intro,
mxml_node_t *doc);
@ -466,6 +470,40 @@ add_variable(mxml_node_t *parent, /* I - Parent node */
}
/*
* 'get_comment_info()' - Get info from comment.
*/
static char * /* O - Info from comment */
get_comment_info(
mxml_node_t *description) /* I - Description node */
{
static char info[1024]; /* Info string */
int infolen; /* Length of info string */
mxml_node_t *current; /* Current text node in description */
if (!description)
return ("<span class='info'>NULL</span>");
for (current = description->child; current; current = current->next)
if (!strcmp(current->value.text.string, "@deprecated@"))
return ("<span class='info'>DEPRECATED</span>");
else if (!strcmp(current->value.text.string, "@since") && current->next)
{
current = current->next;
snprintf(info, sizeof(info), "<span class='info'>%s",
current->value.text.string);
infolen = strlen(info);
strncpy(info + infolen - 1, "</span>", sizeof(info) - infolen);
info[sizeof(info) - 1] = '\0';
return (info);
}
return ("<span class='info'>NO</span>");
}
/*
* 'new_documentation()' - Create a new documentation tree.
*/
@ -1958,6 +1996,41 @@ usage(const char *option) /* I - Unknown option */
}
/*
* 'write_description()' - Write the description text.
*/
static void
write_description(
mxml_node_t *description) /* I - Description node */
{
mxml_node_t *current; /* Current text node in description */
if (!description)
return;
for (current = description->child; current; current = current->next)
if (!strcmp(current->value.text.string, "@deprecated@"))
continue;
else if (!strcmp(current->value.text.string, "@since") && current->next)
{
do
{
current = current->next;
}
while (current && !strchr(current->value.text.string, '@'));
}
else
{
if (current->value.text.whitespace)
putchar(' ');
write_string(current->value.text.string);
}
}
/*
* 'write_documentation()' - Write HTML documentation.
*/
@ -2004,6 +2077,7 @@ write_documentation(
"\th1, h2, h3, p { font-family: sans-serif; text-align: justify; }\n"
"\ttt, pre a:link, pre a:visited, tt a:link, tt a:visited { font-weight: bold; color: #7f0000; }\n"
"\tpre { font-weight: bold; color: #7f0000; margin-left: 2em; }\n"
"\tspan.info { font-weight: bold; padding: 2; color: #ffffff; background: #000000; float: right; }\n"
"\t--></style>\n"
"</head>\n"
"<body>\n", title);
@ -2074,18 +2148,18 @@ write_documentation(
scut = mxmlFindElement(scut, doc, "class", NULL, NULL,
MXML_NO_DESCEND))
{
cname = mxmlElementGetAttr(scut, "name");
printf("<!-- NEW PAGE -->\n"
"<h3><a name='%s'>%s</a></h3>\n"
"<hr noshade/>\n", cname, cname);
cname = mxmlElementGetAttr(scut, "name");
description = mxmlFindElement(scut, scut, "description", NULL,
NULL, MXML_DESCEND_FIRST);
printf("<!-- NEW PAGE -->\n"
"<h3>%s<a name='%s'>%s</a></h3>\n"
"<hr noshade/>\n", get_comment_info(description), cname, cname);
if (description)
{
fputs("<h4>Description</h4>\n"
"<p>", stdout);
write_element(NULL, description);
write_description(description);
puts("</p>");
}
@ -2190,10 +2264,13 @@ write_documentation(
arg = mxmlFindElement(arg, scut, "variable", NULL, NULL,
MXML_NO_DESCEND))
{
printf("<tr><td><tt>%s</tt></td><td>", mxmlElementGetAttr(arg, "name"));
description = mxmlFindElement(arg, arg, "description", NULL,
NULL, MXML_DESCEND_FIRST);
write_element(NULL, mxmlFindElement(arg, arg, "description", NULL,
NULL, MXML_DESCEND_FIRST));
printf("<tr><td>%s<tt>%s</tt></td><td>", get_comment_info(description),
mxmlElementGetAttr(arg, "name"));
write_description(description);
puts("</td></tr>");
}
@ -2204,15 +2281,14 @@ write_documentation(
function = mxmlFindElement(function, scut, "function", NULL, NULL,
MXML_NO_DESCEND))
{
name = mxmlElementGetAttr(function, "name");
printf("<tr><td><tt><a name='%s.%s'>%s()</a></tt></td><td>",
cname, name, name);
name = mxmlElementGetAttr(function, "name");
description = mxmlFindElement(function, function, "description", NULL,
NULL, MXML_DESCEND_FIRST);
if (description)
write_element(NULL, description);
printf("<tr><td>%s<tt><a name='%s.%s'>%s()</a></tt></td><td>",
get_comment_info(description), cname, name, name);
write_description(description);
arg = mxmlFindElement(function, function, "returnvalue", NULL,
NULL, MXML_DESCEND_FIRST);
@ -2259,18 +2335,18 @@ write_documentation(
scut = mxmlFindElement(scut, doc, "enumeration", NULL, NULL,
MXML_NO_DESCEND))
{
name = mxmlElementGetAttr(scut, "name");
printf("<!-- NEW PAGE -->\n"
"<h3><a name='%s'>%s</a></h3>\n"
"<hr noshade/>\n", name, name);
name = mxmlElementGetAttr(scut, "name");
description = mxmlFindElement(scut, scut, "description", NULL,
NULL, MXML_DESCEND_FIRST);
printf("<!-- NEW PAGE -->\n"
"<h3>%s<a name='%s'>%s</a></h3>\n"
"<hr noshade/>\n", get_comment_info(description), name, name);
if (description)
{
fputs("<h4>Description</h4>\n"
"<p>", stdout);
write_element(NULL, description);
write_description(description);
puts("</p>");
}
@ -2285,10 +2361,12 @@ write_documentation(
arg = mxmlFindElement(arg, scut, "constant", NULL, NULL,
MXML_NO_DESCEND))
{
printf("<tr><td><tt>%s</tt></td><td>", mxmlElementGetAttr(arg, "name"));
description = mxmlFindElement(arg, arg, "description", NULL,
NULL, MXML_DESCEND_FIRST);
printf("<tr><td>%s<tt>%s</tt></td><td>", get_comment_info(description),
mxmlElementGetAttr(arg, "name"));
write_element(doc, mxmlFindElement(arg, arg, "description", NULL,
NULL, MXML_DESCEND_FIRST));
write_description(description);
puts("</td></tr>");
}
@ -2325,18 +2403,18 @@ write_documentation(
function = mxmlFindElement(function, doc, "function", NULL, NULL,
MXML_NO_DESCEND))
{
name = mxmlElementGetAttr(function, "name");
printf("<!-- NEW PAGE -->\n"
"<h3><a name='%s'>%s()</a></h3>\n"
"<hr noshade/>\n", name, name);
name = mxmlElementGetAttr(function, "name");
description = mxmlFindElement(function, function, "description", NULL,
NULL, MXML_DESCEND_FIRST);
printf("<!-- NEW PAGE -->\n"
"<h3>%s<a name='%s'>%s()</a></h3>\n"
"<hr noshade/>\n", get_comment_info(description), name, name);
if (description)
{
fputs("<h4>Description</h4>\n"
"<p>", stdout);
write_element(NULL, description);
write_description(description);
puts("</p>");
}
@ -2451,18 +2529,18 @@ write_documentation(
scut = mxmlFindElement(scut, doc, "struct", NULL, NULL,
MXML_NO_DESCEND))
{
cname = mxmlElementGetAttr(scut, "name");
printf("<!-- NEW PAGE -->\n"
"<h3><a name='%s'>%s</a></h3>\n"
"<hr noshade/>\n", cname, cname);
cname = mxmlElementGetAttr(scut, "name");
description = mxmlFindElement(scut, scut, "description", NULL,
NULL, MXML_DESCEND_FIRST);
printf("<!-- NEW PAGE -->\n"
"<h3>%s<a name='%s'>%s</a></h3>\n"
"<hr noshade/>\n", get_comment_info(description), cname, cname);
if (description)
{
fputs("<h4>Description</h4>\n"
"<p>", stdout);
write_element(NULL, description);
write_description(description);
puts("</p>");
}
@ -2546,10 +2624,12 @@ write_documentation(
arg = mxmlFindElement(arg, scut, "variable", NULL, NULL,
MXML_NO_DESCEND))
{
printf("<tr><td><tt>%s</tt></td><td>", mxmlElementGetAttr(arg, "name"));
description = mxmlFindElement(arg, arg, "description", NULL,
NULL, MXML_DESCEND_FIRST);
printf("<tr><td>%s<tt>%s</tt></td><td>", get_comment_info(description),
mxmlElementGetAttr(arg, "name"));
write_element(NULL, mxmlFindElement(arg, arg, "description", NULL,
NULL, MXML_DESCEND_FIRST));
write_description(description);
puts("</td></tr>");
}
@ -2560,15 +2640,14 @@ write_documentation(
function = mxmlFindElement(function, scut, "function", NULL, NULL,
MXML_NO_DESCEND))
{
name = mxmlElementGetAttr(function, "name");
printf("<tr><td><tt><a name='%s.%s'>%s()</a></tt></td><td>",
cname, name, name);
name = mxmlElementGetAttr(function, "name");
description = mxmlFindElement(function, function, "description", NULL,
NULL, MXML_DESCEND_FIRST);
if (description)
write_element(NULL, description);
printf("<tr><td>%s<tt><a name='%s.%s'>%s()</a></tt></td><td>",
get_comment_info(description), cname, name, name);
write_description(description);
arg = mxmlFindElement(function, function, "returnvalue", NULL,
NULL, MXML_DESCEND_FIRST);
@ -2615,18 +2694,18 @@ write_documentation(
scut = mxmlFindElement(scut, doc, "typedef", NULL, NULL,
MXML_NO_DESCEND))
{
name = mxmlElementGetAttr(scut, "name");
printf("<!-- NEW PAGE -->\n"
"<h3><a name='%s'>%s</a></h3>\n"
"<hr noshade/>\n", name, name);
name = mxmlElementGetAttr(scut, "name");
description = mxmlFindElement(scut, scut, "description", NULL,
NULL, MXML_DESCEND_FIRST);
printf("<!-- NEW PAGE -->\n"
"<h3>%s<a name='%s'>%s</a></h3>\n"
"<hr noshade/>\n", get_comment_info(description), name, name);
if (description)
{
fputs("<h4>Description</h4>\n"
"<p>", stdout);
write_element(NULL, description);
write_description(description);
puts("</p>");
}
@ -2737,18 +2816,18 @@ write_documentation(
scut = mxmlFindElement(scut, doc, "union", NULL, NULL,
MXML_NO_DESCEND))
{
name = mxmlElementGetAttr(scut, "name");
printf("<!-- NEW PAGE -->\n"
"<h3><a name='%s'>%s</a></h3>\n"
"<hr noshade/>\n", name, name);
name = mxmlElementGetAttr(scut, "name");
description = mxmlFindElement(scut, scut, "description", NULL,
NULL, MXML_DESCEND_FIRST);
printf("<!-- NEW PAGE -->\n"
"<h3>%s<a name='%s'>%s</a></h3>\n"
"<hr noshade/>\n", get_comment_info(description), name, name);
if (description)
{
fputs("<h4>Description</h4>\n"
"<p>", stdout);
write_element(NULL, description);
write_description(description);
puts("</p>");
}
@ -2779,10 +2858,12 @@ write_documentation(
arg = mxmlFindElement(arg, scut, "variable", NULL, NULL,
MXML_NO_DESCEND))
{
printf("<tr><td><tt>%s</tt></td><td>", mxmlElementGetAttr(arg, "name"));
description = mxmlFindElement(arg, arg, "description", NULL,
NULL, MXML_DESCEND_FIRST);
printf("<tr><td>%s<tt>%s</tt></td><td>", get_comment_info(description),
mxmlElementGetAttr(arg, "name"));
write_element(NULL, mxmlFindElement(arg, arg, "description", NULL,
NULL, MXML_DESCEND_FIRST));
write_description(description);
puts("</td></tr>");
}
@ -2819,18 +2900,18 @@ write_documentation(
arg = mxmlFindElement(arg, doc, "variable", NULL, NULL,
MXML_NO_DESCEND))
{
name = mxmlElementGetAttr(arg, "name");
printf("<!-- NEW PAGE -->\n"
"<h3><a name='%s'>%s</a></h3>\n"
"<hr noshade/>", name, name);
name = mxmlElementGetAttr(arg, "name");
description = mxmlFindElement(arg, arg, "description", NULL,
NULL, MXML_DESCEND_FIRST);
printf("<!-- NEW PAGE -->\n"
"<h3>%s<a name='%s'>%s</a></h3>\n"
"<hr noshade/>", get_comment_info(description), name, name);
if (description)
{
fputs("<h4>Description</h4>\n"
"<p>", stdout);
write_element(NULL, description);
write_description(description);
puts("</p>");
}

@ -1,5 +1,7 @@
/*
* 'foo_void_function()' - Do foo with bar.
*
* @deprecated@
*/
void
@ -20,6 +22,8 @@ foo_void_function(int one, /* I - Integer */
/*
* 'foo_float_function()' - Do foo with bar.
*
* @since 1.2@
*/
float /* O - Real number */

Loading…
Cancel
Save