$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r84146 - in trunk/tools/quickbook: doc src
From: dnljms_at_[hidden]
Date: 2013-05-05 09:44:59
Author: danieljames
Date: 2013-05-05 09:44:59 EDT (Sun, 05 May 2013)
New Revision: 84146
URL: http://svn.boost.org/trac/boost/changeset/84146
Log:
Make escaping dependent file names optional.
Text files modified: 
   trunk/tools/quickbook/doc/change_log.qbk         |     2 +                                       
   trunk/tools/quickbook/src/dependency_tracker.cpp |    41 ++++++++++++++++++------------          
   trunk/tools/quickbook/src/dependency_tracker.hpp |     9 +++++-                                  
   trunk/tools/quickbook/src/quickbook.cpp          |    53 ++++++++++++++++++++++++++++++++++++--- 
   4 files changed, 83 insertions(+), 22 deletions(-)
Modified: trunk/tools/quickbook/doc/change_log.qbk
==============================================================================
--- trunk/tools/quickbook/doc/change_log.qbk	(original)
+++ trunk/tools/quickbook/doc/change_log.qbk	2013-05-05 09:44:59 EDT (Sun, 05 May 2013)
@@ -281,6 +281,8 @@
   convert indentation to spaces.
 * Support the token pasting operator (`##`) in C++ code blocks
   ([@https://svn.boost.org/trac/boost/ticket/8510 #8510]).
+* Hidden options for formatting of `--output-deps`. Not really for public use
+* yet.
 * 1.6 changes:
   * Better template argument parsing, so that it understands things
     like escaped markup.
Modified: trunk/tools/quickbook/src/dependency_tracker.cpp
==============================================================================
--- trunk/tools/quickbook/src/dependency_tracker.cpp	(original)
+++ trunk/tools/quickbook/src/dependency_tracker.cpp	2013-05-05 09:44:59 EDT (Sun, 05 May 2013)
@@ -63,16 +63,15 @@
         "\\f",   "\\r",   "\\016", "\\017"
     };
 
-    static std::string escaped_path(fs::path const& path)
+    static std::string escaped_path(std::string const& generic)
     {
-        std::string generic = detail::path_to_generic(path);
         std::string result;
         result.reserve(generic.size());
 
         BOOST_FOREACH(char c, generic)
         {
-            if (c < 16) {
-                result += control_escapes[c];
+            if (c >= 0 && c < 16) {
+                result += control_escapes[(unsigned int) c];
             }
             else if (c == '\\') {
                 result += "\\\\";
@@ -88,28 +87,38 @@
         return result;
     }
 
+    static std::string get_path(fs::path const& path,
+            dependency_tracker::flags f)
+    {
+        std::string generic = detail::path_to_generic(path);
+
+        if (f & dependency_tracker::escaped) {
+            generic = escaped_path(generic);
+        }
+
+        return generic;
+    }
+
     bool dependency_tracker::add_dependency(fs::path const& f) {
         bool found = fs::exists(fs::status(f));
         dependencies[normalize_path(f)] |= found;
         return found;
     }
 
-    void dependency_tracker::write_dependencies(std::ostream& out)
+    void dependency_tracker::write_dependencies(std::ostream& out,
+            flags f)
     {
         BOOST_FOREACH(dependency_list::value_type const& d, dependencies)
         {
-            if (d.second) {
-                out << escaped_path(d.first) << std::endl;
+            if (f & checked) {
+                out << (d.second ? "+ " : "- ")
+                    << get_path(d.first, f) << std::endl;
+            }
+            else {
+                if (d.second) {
+                    out << get_path(d.first, f) << std::endl;
+                }
             }
-        }
-    }
-
-    void dependency_tracker::write_checked_locations(std::ostream& out)
-    {
-        BOOST_FOREACH(dependency_list::value_type const& d, dependencies)
-        {
-            out << (d.second ? "+ " : "- ")
-                << escaped_path(d.first) << std::endl;
         }
     }
 }
Modified: trunk/tools/quickbook/src/dependency_tracker.hpp
==============================================================================
--- trunk/tools/quickbook/src/dependency_tracker.hpp	(original)
+++ trunk/tools/quickbook/src/dependency_tracker.hpp	2013-05-05 09:44:59 EDT (Sun, 05 May 2013)
@@ -25,12 +25,17 @@
 
     public:
 
+        enum flags {
+            default_ = 0,
+            checked = 1,
+            escaped = 2
+        };
+
         // Call this before loading any file so that it will be included in the
         // list of dependencies. Returns true if file exists.
         bool add_dependency(fs::path const&);
 
-        void write_dependencies(std::ostream&);
-        void write_checked_locations(std::ostream&);
+        void write_dependencies(std::ostream&, flags = default_);
     };
 }
 
Modified: trunk/tools/quickbook/src/quickbook.cpp
==============================================================================
--- trunk/tools/quickbook/src/quickbook.cpp	(original)
+++ trunk/tools/quickbook/src/quickbook.cpp	2013-05-05 09:44:59 EDT (Sun, 05 May 2013)
@@ -24,6 +24,8 @@
 #include <boost/ref.hpp>
 #include <boost/version.hpp>
 #include <boost/foreach.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <boost/algorithm/string/classification.hpp>
 
 #include <stdexcept>
 #include <vector>
@@ -116,13 +118,15 @@
         parse_document_options() :
             indent(-1),
             linewidth(-1),
-            pretty_print(true)
+            pretty_print(true),
+            deps_out_flags(quickbook::dependency_tracker::default_)
         {}
 
         int indent;
         int linewidth;
         bool pretty_print;
         fs::path deps_out;
+        quickbook::dependency_tracker::flags deps_out_flags;
         fs::path locations_out;
         fs::path xinclude_base;
     };
@@ -159,13 +163,15 @@
             if (!options_.deps_out.empty())
             {
                 fs::ofstream out(options_.deps_out);
-                state.dependencies.write_dependencies(out);
+                state.dependencies.write_dependencies(out,
+                        options_.deps_out_flags);
             }
 
             if (!options_.locations_out.empty())
             {
                 fs::ofstream out(options_.locations_out);
-                state.dependencies.write_checked_locations(out);
+                state.dependencies.write_dependencies(out,
+                        dependency_tracker::checked);
             }
         }
         catch (load_error& e) {
@@ -291,10 +297,15 @@
             ("xinclude-base", PO_VALUE<input_string>(),
                 "Generate xincludes as if generating for this target "
                 "directory.")
+            ("output-deps-format", PO_VALUE<input_string>(),
+             "Comma separated list of formatting options for output-deps, "
+             "options are: escaped, checked")
             ("output-checked-locations", PO_VALUE<input_string>(),
              "Writes a file listing all the file locations that were "
              "checked, starting with '+' if they were found, or '-' "
-             "if they weren't.")
+             "if they weren't.\n"
+             "This is deprecated, use 'output-deps-format=checked' to "
+             "write the deps file in this format.")
         ;
 
         all.add(desc).add(hidden);
@@ -437,6 +448,40 @@
                 default_output = false;
             }
 
+            if (vm.count("output-deps-format"))
+            {
+                std::string format_flags =
+                    quickbook::detail::input_to_utf8(
+                        vm["output-deps-format"].as<input_string>());
+
+                std::vector<std::string> flag_names;
+                boost::algorithm::split(flag_names, format_flags,
+                        boost::algorithm::is_any_of(", "),
+                        boost::algorithm::token_compress_on);
+
+                unsigned flags = 0;
+
+                BOOST_FOREACH(std::string const& flag, flag_names) {
+                    if (flag == "checked") {
+                        flags |= quickbook::dependency_tracker::checked;
+                    }
+                    else if (flag == "escaped") {
+                        flags |= quickbook::dependency_tracker::escaped;
+                    }
+                    else if (!flag.empty()) {
+                        quickbook::detail::outerr()
+                            << "Unknown dependency format flag: "
+                            << flag
+                            <<std::endl;
+
+                        ++error_count;
+                    }
+                }
+
+                parse_document_options.deps_out_flags =
+                    quickbook::dependency_tracker::flags(flags);
+            }
+
             if (vm.count("output-checked-locations"))
             {
                 parse_document_options.locations_out =