$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r75539 - in branches/quickbook-dev/tools/quickbook: src test/include
From: dnljms_at_[hidden]
Date: 2011-11-17 16:07:17
Author: danieljames
Date: 2011-11-17 16:07:16 EST (Thu, 17 Nov 2011)
New Revision: 75539
URL: http://svn.boost.org/trac/boost/changeset/75539
Log:
Quickbook: Prevent 'endsect' from ending an include id.
Text files modified: 
   branches/quickbook-dev/tools/quickbook/src/id_manager.cpp                          |    44 ++++++++++++++++++++++++++++++++++++--- 
   branches/quickbook-dev/tools/quickbook/test/include/include_id_unbalanced-1_6.gold |    13 +++++------                             
   2 files changed, 46 insertions(+), 11 deletions(-)
Modified: branches/quickbook-dev/tools/quickbook/src/id_manager.cpp
==============================================================================
--- branches/quickbook-dev/tools/quickbook/src/id_manager.cpp	(original)
+++ branches/quickbook-dev/tools/quickbook/src/id_manager.cpp	2011-11-17 16:07:16 EST (Thu, 17 Nov 2011)
@@ -164,9 +164,9 @@
                 std::string const& id,
                 id_category category);
         void end_section();
-
-        // Used to change section for the duration of a file.
-        // (or until 'endsect').
+        boost::intrusive_ptr<section_info> end_section(
+            boost::intrusive_ptr<file_info> const& file,
+            boost::intrusive_ptr<section_info> const& section);
 
         void switch_section(boost::intrusive_ptr<section_info> const&);
         void restore_section();
@@ -605,9 +605,45 @@
     void id_state::end_section()
     {
         current_file->document->current_section =
-            current_file->document->current_section->parent;
+            end_section(current_file, current_file->document->current_section);
+
+    }
+
+    boost::intrusive_ptr<section_info> id_state::end_section(
+            boost::intrusive_ptr<file_info> const& file,
+            boost::intrusive_ptr<section_info> const& section)
+    {
+        if (file->switched_section == section) {
+            if (!file->document_root) {
+                file->original_section = end_section(
+                    file->parent, file->original_section);
+            }
+            else {
+                file->original_section =
+                    file->original_section->parent;
+            }
+
+            boost::intrusive_ptr<section_info> alt_section =
+                new section_info(
+                    file->original_section->parent,
+                    file->original_section->compatibility_version,
+                    file->switched_section->placeholder_1_6->id);
+
+            alt_section->placeholder_1_6 =
+                file->switched_section->placeholder_1_6;
+
+            file->switched_section = alt_section;
+            return alt_section;
+        }
+        else {
+            if (!file->switched_section && !file->document_root)
+                return end_section(current_file->parent, section);
+            else
+                return section->parent;
+        }
     }
 
+
     //
     // Xml subset parser used for finding id values.
     //
Modified: branches/quickbook-dev/tools/quickbook/test/include/include_id_unbalanced-1_6.gold
==============================================================================
--- branches/quickbook-dev/tools/quickbook/test/include/include_id_unbalanced-1_6.gold	(original)
+++ branches/quickbook-dev/tools/quickbook/test/include/include_id_unbalanced-1_6.gold	2011-11-17 16:07:16 EST (Thu, 17 Nov 2011)
@@ -43,18 +43,17 @@
         <phrase id="include2.inc2_1"/><link linkend="include2.inc2_1">Heading 1</link>
       </bridgehead>
     </section>
-    <bridgehead renderas="sect3" id="unbalanced.sect1.h1">
-      <phrase id="unbalanced.sect1.inc2_2"/><link linkend="unbalanced.sect1.inc2_2">Heading
-      2</link>
+    <bridgehead renderas="sect3" id="include2.h1">
+      <phrase id="include2.inc2_2"/><link linkend="include2.inc2_2">Heading 2</link>
     </bridgehead>
     <bridgehead renderas="sect3" id="include2a.h0">
       <phrase id="include2a.inc2a_1"/><link linkend="include2a.inc2a_1">Heading 1</link>
     </bridgehead>
   </section>
-  <bridgehead renderas="sect2" id="unbalanced.h0">
-    <phrase id="unbalanced.inc2a_2"/><link linkend="unbalanced.inc2a_2">Heading 2</link>
+  <bridgehead renderas="sect2" id="include2a.h1">
+    <phrase id="include2a.inc2a_2"/><link linkend="include2a.inc2a_2">Heading 2</link>
   </bridgehead>
-  <bridgehead renderas="sect2" id="unbalanced.h1">
-    <phrase id="unbalanced.inc2_3"/><link linkend="unbalanced.inc2_3">Heading 3</link>
+  <bridgehead renderas="sect2" id="include2.h2">
+    <phrase id="include2.inc2_3"/><link linkend="include2.inc2_3">Heading 3</link>
   </bridgehead>
 </article>