Index: tools/quickbook/detail/actions.cpp =================================================================== --- tools/quickbook/detail/actions.cpp (revision 39765) +++ tools/quickbook/detail/actions.cpp (working copy) @@ -1077,6 +1077,21 @@ << " \n"; } + void xml_copyright::operator()(std::pair, std::string> const& copyright) const + { + out << "\n" << " \n"; + + for_each( + copyright.first.begin() + , copyright.first.end() + , xml_year(out)); + + out << " " << copyright.second << "\n" + << " \n" + << "\n" + ; + } + void xml_year::operator()(std::string const &year) const { out << " " << year << "\n"; @@ -1151,19 +1166,12 @@ out << " \n"; } - if (!actions.doc_copyright_holder.empty()) + if (!actions.doc_copyrights.empty()) { - out << "\n" << " \n"; - for_each( - actions.doc_copyright_years.begin() - , actions.doc_copyright_years.end() - , xml_year(out)); - - out << " " << actions.doc_copyright_holder << "\n" - << " \n" - << "\n" - ; + actions.doc_copyrights.begin() + , actions.doc_copyrights.end() + , xml_copyright(out)); } if (qbk_version_n < 103) Index: tools/quickbook/detail/actions.hpp =================================================================== --- tools/quickbook/detail/actions.hpp (revision 39765) +++ tools/quickbook/detail/actions.hpp (working copy) @@ -742,6 +742,18 @@ collector& out; }; + struct xml_copyright + { + // Handles xml copyright + + xml_copyright(collector& out) + : out(out) {} + + void operator()(std::pair, std::string> const ©right) const; + + collector& out; + }; + void pre(collector& out, quickbook::actions& actions, bool ignore_docinfo = false); void post(collector& out, quickbook::actions& actions, bool ignore_docinfo = false); Index: tools/quickbook/detail/actions_class.cpp =================================================================== --- tools/quickbook/detail/actions_class.cpp (revision 39765) +++ tools/quickbook/detail/actions_class.cpp (working copy) @@ -24,8 +24,7 @@ , doc_version() , doc_id() , doc_dirname() - , doc_copyright_years() - , doc_copyright_holder() + , doc_copyrights() , doc_purpose() , doc_category() , doc_authors() Index: tools/quickbook/detail/actions_class.hpp =================================================================== --- tools/quickbook/detail/actions_class.hpp (revision 39765) +++ tools/quickbook/detail/actions_class.hpp (working copy) @@ -28,6 +28,7 @@ typedef std::vector string_list; typedef std::vector > author_list; + typedef std::vector > copyright_list; typedef std::pair mark_type; static int const max_template_depth = 100; @@ -37,8 +38,7 @@ std::string doc_version; std::string doc_id; std::string doc_dirname; - string_list doc_copyright_years; - std::string doc_copyright_holder; + copyright_list doc_copyrights; std::string doc_purpose; std::string doc_category; author_list doc_authors; Index: tools/quickbook/doc_info.hpp =================================================================== --- tools/quickbook/doc_info.hpp (revision 39765) +++ tools/quickbook/doc_info.hpp (working copy) @@ -66,7 +66,7 @@ doc_version | doc_id | doc_dirname - | doc_copyright + | doc_copyright [push_back_a(actions.doc_copyrights, copyright)] | doc_purpose [actions.extract_doc_purpose] | doc_category | doc_authors @@ -103,12 +103,12 @@ ; doc_copyright = - "copyright" >> hard_space - >> +( repeat_p(4)[digit_p] [push_back_a(actions.doc_copyright_years)] + "copyright" >> hard_space [clear_a(copyright.first)] + >> +( repeat_p(4)[digit_p] [push_back_a(copyright.first)] >> space ) >> space - >> (*(anychar_p - ']')) [assign_a(actions.doc_copyright_holder)] + >> (*(anychar_p - ']')) [assign_a(copyright.second)] ; doc_purpose = @@ -178,6 +178,7 @@ bool unused; std::pair name; + std::pair, std::string> copyright; rule doc_info, doc_title, doc_version, doc_id, doc_dirname, doc_copyright, doc_purpose,doc_category, doc_authors, doc_author, comment, space, hard_space, doc_license,