Ticket #1313: quickbook-copyrights.patch

File quickbook-copyrights.patch, 5.5 KB (added by Daniel James, 15 years ago)

Support multiple copyright lines in quickbook document info block.

  • tools/quickbook/detail/actions.cpp

     
    10771077            << "      </author>\n";
    10781078    }
    10791079
     1080    void xml_copyright::operator()(std::pair<std::vector<std::string>, std::string> const& copyright) const
     1081    {
     1082        out << "\n" << "    <copyright>\n";
     1083
     1084        for_each(
     1085            copyright.first.begin()
     1086          , copyright.first.end()
     1087          , xml_year(out));
     1088
     1089        out << "      <holder>" << copyright.second << "</holder>\n"
     1090            << "    </copyright>\n"
     1091            << "\n"
     1092        ;
     1093    }
     1094
    10801095    void xml_year::operator()(std::string const &year) const
    10811096    {
    10821097        out << "      <year>" << year << "</year>\n";
     
    11511166            out << "    </authorgroup>\n";
    11521167        }
    11531168
    1154         if (!actions.doc_copyright_holder.empty())
     1169        if (!actions.doc_copyrights.empty())
    11551170        {
    1156             out << "\n" << "    <copyright>\n";
    1157 
    11581171            for_each(
    1159                 actions.doc_copyright_years.begin()
    1160               , actions.doc_copyright_years.end()
    1161               , xml_year(out));
    1162 
    1163             out << "      <holder>" << actions.doc_copyright_holder << "</holder>\n"
    1164                 << "    </copyright>\n"
    1165                 << "\n"
    1166             ;
     1172                actions.doc_copyrights.begin()
     1173              , actions.doc_copyrights.end()
     1174              , xml_copyright(out));
    11671175        }
    11681176
    11691177        if (qbk_version_n < 103)
  • tools/quickbook/detail/actions.hpp

     
    742742        collector& out;
    743743    };
    744744
     745    struct xml_copyright
     746    {
     747        // Handles xml copyright
     748
     749        xml_copyright(collector& out)
     750            : out(out) {}
     751
     752        void operator()(std::pair<std::vector<std::string>, std::string> const &copyright) const;
     753
     754        collector& out;
     755    };
     756
    745757    void pre(collector& out, quickbook::actions& actions, bool ignore_docinfo = false);
    746758    void post(collector& out, quickbook::actions& actions, bool ignore_docinfo = false);
    747759
  • tools/quickbook/detail/actions_class.cpp

     
    2424        , doc_version()
    2525        , doc_id()
    2626        , doc_dirname()
    27         , doc_copyright_years()
    28         , doc_copyright_holder()
     27        , doc_copyrights()
    2928        , doc_purpose()
    3029        , doc_category()
    3130        , doc_authors()
  • tools/quickbook/detail/actions_class.hpp

     
    2828
    2929        typedef std::vector<std::string> string_list;
    3030        typedef std::vector<std::pair<std::string, std::string> > author_list;
     31        typedef std::vector<std::pair<string_list, std::string> > copyright_list;
    3132        typedef std::pair<char, int> mark_type;
    3233        static int const max_template_depth = 100;
    3334
     
    3738        std::string             doc_version;
    3839        std::string             doc_id;
    3940        std::string             doc_dirname;
    40         string_list             doc_copyright_years;
    41         std::string             doc_copyright_holder;
     41        copyright_list          doc_copyrights;
    4242        std::string             doc_purpose;
    4343        std::string             doc_category;
    4444        author_list             doc_authors;
  • tools/quickbook/doc_info.hpp

     
    6666                              doc_version
    6767                            | doc_id
    6868                            | doc_dirname
    69                             | doc_copyright
     69                            | doc_copyright         [push_back_a(actions.doc_copyrights, copyright)]
    7070                            | doc_purpose           [actions.extract_doc_purpose]
    7171                            | doc_category
    7272                            | doc_authors
     
    103103                    ;
    104104
    105105                doc_copyright =
    106                         "copyright" >> hard_space
    107                     >> +( repeat_p(4)[digit_p]      [push_back_a(actions.doc_copyright_years)]
     106                        "copyright" >> hard_space   [clear_a(copyright.first)]
     107                    >> +( repeat_p(4)[digit_p]      [push_back_a(copyright.first)]
    108108                          >> space
    109109                        )
    110110                    >> space
    111                     >> (*(anychar_p - ']'))         [assign_a(actions.doc_copyright_holder)]
     111                    >> (*(anychar_p - ']'))         [assign_a(copyright.second)]
    112112                    ;
    113113
    114114                doc_purpose =
     
    178178
    179179            bool unused;
    180180            std::pair<std::string, std::string> name;
     181            std::pair<std::vector<std::string>, std::string> copyright;
    181182            rule<Scanner>   doc_info, doc_title, doc_version, doc_id, doc_dirname,
    182183                            doc_copyright, doc_purpose,doc_category, doc_authors,
    183184                            doc_author, comment, space, hard_space, doc_license,