Ticket #8825: doxygen_xml2qbk.patch

File doxygen_xml2qbk.patch, 5.5 KB (added by Niall Douglas, 9 years ago)

Patch adding the functionality described above.

  • libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp

     .../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 b struct class_or_struct : public element  
    164164    std::vector<function> functions;
    165165
    166166    std::vector<base_element> typedefs;
    167     std::vector<base_element> variables;
     167    std::vector<parameter> variables;
    168168
    169169    std::vector<base_class> base_classes;
    170170};
  • libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp

    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 b static void parse(rapidxml::xml_node<>* node, configuration const& config, docum  
    691691            }
    692692            else if (kind == "variable")
    693693            {
    694                 if (boost::equals(get_attribute(node, "static"), "yes")
    695                     && boost::equals(get_attribute(node, "mutable"), "no")
    696                     && boost::equals(get_attribute(node, "prot"), "public"))
     694                if (boost::equals(get_attribute(node, "prot"), "public"))
    697695                {
    698                     std::string name = parse_named_node(node->first_node(), "name");
    699                     doc.cos.variables.push_back(base_element(name));
    700                     doc.cos.variables.back().id = id;
     696                    parameter p;
     697                    p.id = id;
     698                    for(rapidxml::xml_node<>* var_node = node->first_node(); var_node; var_node=var_node->next_sibling())
     699                    {
     700                        if(boost::equals(var_node->name(), "name"))
     701                        {
     702                            p.name = var_node->value();
     703                        }
     704                        else if(boost::equals(var_node->name(), "type"))
     705                        {
     706                            get_contents(var_node->first_node(), p.fulltype);
     707                            p.type = p.fulltype;
     708                            //boost::replace_all(p.type, " const", "");
     709                            //boost::trim(p.type);
     710                            //boost::replace_all(p.type, "&", "");
     711                            //boost::replace_all(p.type, "*", "");
     712                            boost::trim(p.type);
     713
     714                            // If alt output is used retrieve type with QBK links
     715                            if ( configuration::alt == config.output_style )
     716                            {
     717                                p.fulltype_without_links = p.fulltype;
     718                                p.fulltype.clear();
     719                                parse_para(var_node->first_node(), config, p.fulltype, p.skip);
     720                            }
     721                        }
     722                        else if(boost::equals(var_node->name(), "briefdescription"))
     723                        {
     724                            parse_para(var_node->first_node(), config, p.brief_description, p.skip);
     725                        }
     726                        else if(p.brief_description.empty() && boost::equals(var_node->name(), "detaileddescription"))
     727                        {
     728                            parse_para(var_node->first_node(), config, p.brief_description, p.skip);
     729                        }
     730                    }
     731                    doc.cos.variables.push_back(p);
    701732                }
    702733            }
    703734
  • libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp

    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 b void quickbook_output(class_or_struct const& cos, configuration const& config, s  
    544544        out << std::endl;
    545545    }
    546546
    547     out << "{" << std::endl
    548         << "  // ..." << std::endl
    549         << "};" << std::endl
     547    out << "{" << std::endl;
     548    if (! cos.variables.empty())
     549    {
     550        size_t maxlength = 0;
     551        BOOST_FOREACH(parameter const& p, cos.variables)
     552        {
     553            if (! p.skip)
     554            {
     555                size_t length = 6 + p.fulltype.size() + p.name.size();
     556                if (length > maxlength) maxlength = length;
     557            }
     558        }
     559        BOOST_FOREACH(parameter const& p, cos.variables)
     560        {
     561            if (! p.skip)
     562            {
     563                size_t length = 4 + p.fulltype.size() + p.name.size();
     564                out << "  " << p.fulltype << " " << p.name << ";";
     565                while(length++ < maxlength) out << " ";
     566                out << "// " << p.brief_description << std::endl;
     567            }
     568        }
     569    }
     570    else
     571        out << "  // ..." << std::endl;
     572    out << "};" << std::endl
    550573        << "``" << std::endl << std::endl;
    551574    quickbook_markup(cos.qbk_markup, markup_after, markup_synopsis, out);
    552575