.../tools/doxygen_xml2qbk/doxygen_elements.hpp | 2 +- .../tools/doxygen_xml2qbk/doxygen_xml_parser.hpp | 43 +++++++++++++++++++--- .../tools/doxygen_xml2qbk/quickbook_output.hpp | 29 +++++++++++++-- 3 files changed, 64 insertions(+), 10 deletions(-) diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp index 04d50dc..43fc98b 100644 --- a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp +++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp @@ -164,7 +164,7 @@ struct class_or_struct : public element std::vector functions; std::vector typedefs; - std::vector variables; + std::vector variables; std::vector base_classes; }; diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp index 0a98f42..119a573 100644 --- a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp +++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp @@ -691,13 +691,44 @@ static void parse(rapidxml::xml_node<>* node, configuration const& config, docum } else if (kind == "variable") { - if (boost::equals(get_attribute(node, "static"), "yes") - && boost::equals(get_attribute(node, "mutable"), "no") - && boost::equals(get_attribute(node, "prot"), "public")) + if (boost::equals(get_attribute(node, "prot"), "public")) { - std::string name = parse_named_node(node->first_node(), "name"); - doc.cos.variables.push_back(base_element(name)); - doc.cos.variables.back().id = id; + parameter p; + p.id = id; + for(rapidxml::xml_node<>* var_node = node->first_node(); var_node; var_node=var_node->next_sibling()) + { + if(boost::equals(var_node->name(), "name")) + { + p.name = var_node->value(); + } + else if(boost::equals(var_node->name(), "type")) + { + get_contents(var_node->first_node(), p.fulltype); + p.type = p.fulltype; + //boost::replace_all(p.type, " const", ""); + //boost::trim(p.type); + //boost::replace_all(p.type, "&", ""); + //boost::replace_all(p.type, "*", ""); + boost::trim(p.type); + + // If alt output is used retrieve type with QBK links + if ( configuration::alt == config.output_style ) + { + p.fulltype_without_links = p.fulltype; + p.fulltype.clear(); + parse_para(var_node->first_node(), config, p.fulltype, p.skip); + } + } + else if(boost::equals(var_node->name(), "briefdescription")) + { + parse_para(var_node->first_node(), config, p.brief_description, p.skip); + } + else if(p.brief_description.empty() && boost::equals(var_node->name(), "detaileddescription")) + { + parse_para(var_node->first_node(), config, p.brief_description, p.skip); + } + } + doc.cos.variables.push_back(p); } } diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp index 34295b7..0cb6f24 100644 --- a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp +++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp @@ -544,9 +544,32 @@ void quickbook_output(class_or_struct const& cos, configuration const& config, s out << std::endl; } - out << "{" << std::endl - << " // ..." << std::endl - << "};" << std::endl + out << "{" << std::endl; + if (! cos.variables.empty()) + { + size_t maxlength = 0; + BOOST_FOREACH(parameter const& p, cos.variables) + { + if (! p.skip) + { + size_t length = 6 + p.fulltype.size() + p.name.size(); + if (length > maxlength) maxlength = length; + } + } + BOOST_FOREACH(parameter const& p, cos.variables) + { + if (! p.skip) + { + size_t length = 4 + p.fulltype.size() + p.name.size(); + out << " " << p.fulltype << " " << p.name << ";"; + while(length++ < maxlength) out << " "; + out << "// " << p.brief_description << std::endl; + } + } + } + else + out << " // ..." << std::endl; + out << "};" << std::endl << "``" << std::endl << std::endl; quickbook_markup(cos.qbk_markup, markup_after, markup_synopsis, out);