$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r53750 - trunk/boost/graph
From: jewillco_at_[hidden]
Date: 2009-06-08 10:16:06
Author: jewillco
Date: 2009-06-08 10:16:06 EDT (Mon, 08 Jun 2009)
New Revision: 53750
URL: http://svn.boost.org/trac/boost/changeset/53750
Log:
Copied over character escaping code from property_tree since that library is not stable yet
Text files modified: 
   trunk/boost/graph/graphml.hpp |    54 +++++++++++++++++++++++++++++++++++++++ 
   1 files changed, 53 insertions(+), 1 deletions(-)
Modified: trunk/boost/graph/graphml.hpp
==============================================================================
--- trunk/boost/graph/graphml.hpp	(original)
+++ trunk/boost/graph/graphml.hpp	2009-06-08 10:16:06 EDT (Mon, 08 Jun 2009)
@@ -22,13 +22,64 @@
 #include <boost/mpl/vector.hpp>
 #include <boost/mpl/find.hpp>
 #include <boost/mpl/for_each.hpp>
+#if 0 // Change this back later
 #include <boost/property_tree/detail/xml_parser_utils.hpp>
+#endif
 #include <exception>
 #include <sstream>
 
 namespace boost
 {
 
+  // FIXME: Remove this once property_tree is stable
+  namespace graph_detail_from_property_tree {
+
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+    // Naively convert narrow string to another character type
+    template<class Ch>
+    std::basic_string<Ch> widen(const char *text)
+    {
+        std::basic_string<Ch> result;
+        while (*text)
+        {
+            result += Ch(*text);
+            ++text;
+        }
+        return result;
+    }
+
+    template<class Ch>
+    std::basic_string<Ch> encode_char_entities(const std::basic_string<Ch> &s)
+    {
+        typedef typename std::basic_string<Ch> Str;
+        Str r;
+        typename Str::const_iterator end = s.end();
+        for (typename Str::const_iterator it = s.begin(); it != end; ++it)
+        {
+            switch (*it)
+            {
+                case Ch('<'): r += boost::graph_detail_from_property_tree::widen<Ch>("<"); break;
+                case Ch('>'): r += boost::graph_detail_from_property_tree::widen<Ch>(">"); break;
+                case Ch('&'): r += boost::graph_detail_from_property_tree::widen<Ch>("&"); break;
+                case Ch('"'): r += boost::graph_detail_from_property_tree::widen<Ch>("""); break;
+                case Ch('\''): r += boost::graph_detail_from_property_tree::widen<Ch>("'"); break;
+                default: r += *it; break;
+            }
+        }
+        return r;
+    }
+    
+  }
+
 /////////////////////////////////////////////////////////////////////////////
 // Graph reader exceptions
 /////////////////////////////////////////////////////////////////////////////
@@ -228,7 +279,8 @@
     typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
     typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
 
-    using boost::property_tree::xml_parser::encode_char_entities;
+    // using boost::property_tree::xml_parser::encode_char_entities;
+    using boost::graph_detail_from_property_tree::encode_char_entities;
 
     BOOST_STATIC_CONSTANT(bool,
                           graph_is_directed =