Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r85807 - in trunk/tools/quickbook: doc src
From: dnljms_at_[hidden]
Date: 2013-09-20 15:52:38


Author: danieljames
Date: 2013-09-20 15:52:38 EDT (Fri, 20 Sep 2013)
New Revision: 85807
URL: http://svn.boost.org/trac/boost/changeset/85807

Log:
Encode the filename macro.

Also tweak the utils string functions.

Text files modified:
   trunk/tools/quickbook/doc/change_log.qbk | 1 +
   trunk/tools/quickbook/src/actions.cpp | 6 ++----
   trunk/tools/quickbook/src/state.cpp | 9 ++++++++-
   trunk/tools/quickbook/src/state.hpp | 2 ++
   trunk/tools/quickbook/src/utils.cpp | 29 +++++++++++++++++++++++++++--
   trunk/tools/quickbook/src/utils.hpp | 5 +++--
   6 files changed, 43 insertions(+), 9 deletions(-)

Modified: trunk/tools/quickbook/doc/change_log.qbk
==============================================================================
--- trunk/tools/quickbook/doc/change_log.qbk Fri Sep 20 15:03:54 2013 (r85806)
+++ trunk/tools/quickbook/doc/change_log.qbk 2013-09-20 15:52:38 EDT (Fri, 20 Sep 2013) (r85807)
@@ -307,6 +307,7 @@
 * Make escaping templates with a punctuation identifier illegal.
   Escaping templates with an alphanumeric identifier is still fine.
 * Fix detection of code blocks at the start of a file.
+* XML encode the contents of the `__FILENAME__` macro.
 * 1.7 changes:
   * Make it an error to use an element in the wrong context.
   * Error if the body of a phrase element doesn't parse.

Modified: trunk/tools/quickbook/src/actions.cpp
==============================================================================
--- trunk/tools/quickbook/src/actions.cpp Fri Sep 20 15:03:54 2013 (r85806)
+++ trunk/tools/quickbook/src/actions.cpp 2013-09-20 15:52:38 EDT (Fri, 20 Sep 2013) (r85807)
@@ -1962,8 +1962,7 @@
             state.imported = (load_type == block_tags::import);
 
             // update the __FILENAME__ macro
- *boost::spirit::classic::find(state.macro, "__FILENAME__")
- = detail::path_to_generic(state.filename_relative);
+ state.update_filename_macro();
         
             // parse the file
             quickbook::parse_file(state, include_doc_id, true);
@@ -1973,8 +1972,7 @@
         }
 
         // restore the __FILENAME__ macro
- *boost::spirit::classic::find(state.macro, "__FILENAME__")
- = detail::path_to_generic(state.filename_relative);
+ state.update_filename_macro();
     }
 
     void load_source_file(quickbook::state& state,

Modified: trunk/tools/quickbook/src/state.cpp
==============================================================================
--- trunk/tools/quickbook/src/state.cpp Fri Sep 20 15:03:54 2013 (r85806)
+++ trunk/tools/quickbook/src/state.cpp 2013-09-20 15:52:38 EDT (Fri, 20 Sep 2013) (r85807)
@@ -13,6 +13,7 @@
 #include "quickbook.hpp"
 #include "grammar.hpp"
 #include "input_path.hpp"
+#include "utils.hpp"
 
 #if (defined(BOOST_MSVC) && (BOOST_MSVC <= 1310))
 #pragma warning(disable:4355)
@@ -63,8 +64,9 @@
         macro.add
             ("__DATE__", std::string(quickbook_get_date))
             ("__TIME__", std::string(quickbook_get_time))
- ("__FILENAME__", detail::path_to_generic(filename_relative))
+ ("__FILENAME__", std::string())
         ;
+ update_filename_macro();
 
         boost::scoped_ptr<quickbook_grammar> g(
             new quickbook_grammar(*this));
@@ -74,6 +76,11 @@
     quickbook_grammar& state::grammar() const {
         return *grammar_;
     }
+
+ void state::update_filename_macro() {
+ *boost::spirit::classic::find(macro, "__FILENAME__")
+ = detail::encode_string(detail::path_to_generic(filename_relative));
+ }
     
     void state::push_output() {
         out.push();

Modified: trunk/tools/quickbook/src/state.hpp
==============================================================================
--- trunk/tools/quickbook/src/state.hpp Fri Sep 20 15:03:54 2013 (r85806)
+++ trunk/tools/quickbook/src/state.hpp 2013-09-20 15:52:38 EDT (Fri, 20 Sep 2013) (r85807)
@@ -84,6 +84,8 @@
     // actions
     ///////////////////////////////////////////////////////////////////////////
 
+ void update_filename_macro();
+
         void push_output();
         void pop_output();
 

Modified: trunk/tools/quickbook/src/utils.cpp
==============================================================================
--- trunk/tools/quickbook/src/utils.cpp Fri Sep 20 15:03:54 2013 (r85806)
+++ trunk/tools/quickbook/src/utils.cpp 2013-09-20 15:52:38 EDT (Fri, 20 Sep 2013) (r85807)
@@ -15,6 +15,27 @@
 
 namespace quickbook { namespace detail
 {
+ std::string encode_string(boost::string_ref str)
+ {
+ std::string result;
+ result.reserve(str.size());
+
+ for (boost::string_ref::const_iterator it = str.begin();
+ it != str.end(); ++it)
+ {
+ switch (*it)
+ {
+ case '<': result += "&lt;"; break;
+ case '>': result += "&gt;"; break;
+ case '&': result += "&amp;"; break;
+ case '"': result += "&quot;"; break;
+ default: result += *it; break;
+ }
+ }
+
+ return result;
+ }
+
     void print_char(char ch, std::ostream& out)
     {
         switch (ch)
@@ -29,7 +50,7 @@
         }
     }
 
- void print_string(boost::string_ref const& str, std::ostream& out)
+ void print_string(boost::string_ref str, std::ostream& out)
     {
         for (boost::string_ref::const_iterator cur = str.begin();
             cur != str.end(); ++cur)
@@ -45,8 +66,11 @@
         return static_cast<char>(std::tolower(static_cast<unsigned char>(ch)));
     }
 
- std::string escape_uri(std::string uri)
+ std::string escape_uri(std::string uri_param)
     {
+ std::string uri;
+ uri.swap(uri_param);
+
         for (std::string::size_type n = 0; n < uri.size(); ++n)
         {
             static char const mark[] = "-_.!~*'()?\\/";
@@ -60,6 +84,7 @@
                 n += 2;
             }
         }
+
         return uri;
     }
 }}

Modified: trunk/tools/quickbook/src/utils.hpp
==============================================================================
--- trunk/tools/quickbook/src/utils.hpp Fri Sep 20 15:03:54 2013 (r85806)
+++ trunk/tools/quickbook/src/utils.hpp 2013-09-20 15:52:38 EDT (Fri, 20 Sep 2013) (r85807)
@@ -17,8 +17,9 @@
 #include <boost/utility/string_ref.hpp>
 
 namespace quickbook { namespace detail {
+ std::string encode_string(boost::string_ref);
     void print_char(char ch, std::ostream& out);
- void print_string(boost::string_ref const& str, std::ostream& out);
+ void print_string(boost::string_ref str, std::ostream& out);
     char filter_identifier_char(char ch);
 
     template <typename Range>
@@ -34,7 +35,7 @@
     }
 
     std::string escape_uri(std::string uri);
- inline std::string escape_uri(boost::string_ref const& uri) {
+ inline std::string escape_uri(boost::string_ref uri) {
         return escape_uri(std::string(uri.begin(), uri.end()));
     }
 


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk