$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r54910 - in branches/release: . tools/boostbook/test/doxygen/boost tools/boostbook/xsl/doxygen tools/quickbook tools/quickbook/detail tools/quickbook/doc tools/quickbook/test
From: daniel_james_at_[hidden]
Date: 2009-07-12 12:09:06
Author: danieljames
Date: 2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
New Revision: 54910
URL: http://svn.boost.org/trac/boost/changeset/54910
Log:
Merge changes to documentation tools. Fixes #1202, #3242.
Merged revisions 54812-54818 via svnmerge from 
https://svn.boost.org/svn/boost/trunk
........
  r54812 | danieljames | 2009-07-08 22:40:14 +0100 (Wed, 08 Jul 2009) | 1 line
  
  Add a couple of tests for quickbook 1.4 behaviour to try to preserve it.
........
  r54813 | danieljames | 2009-07-08 22:40:24 +0100 (Wed, 08 Jul 2009) | 1 line
  
  Move all the syntax highlighting code into a single class.
........
  r54814 | danieljames | 2009-07-08 22:40:33 +0100 (Wed, 08 Jul 2009) | 1 line
  
  Move the code actions a bit later in actions.hpp so they can use 'plain_char_action'.
........
  r54815 | danieljames | 2009-07-08 22:40:46 +0100 (Wed, 08 Jul 2009) | 1 line
  
  Teletype source mode. Refs #1202.
........
  r54816 | danieljames | 2009-07-08 22:41:00 +0100 (Wed, 08 Jul 2009) | 14 lines
  
  Make sure that a template expansion ends with a ']'.
  
  {{{
  [template foo 1]
  [fool]
  }}}
  
  was generating `1[fool]` - the template would be expanded but then when it
  didn't match the `]` it would fail and just get copied to the output. This
  change checks for `]` before expanding the template. So it now generates
  `[fool]` which is an improvement.
  
  I'm not including a version switch as I see this as a plain bug fix - I can't
  imagine this change ever being anything but beneficial.
........
  r54817 | danieljames | 2009-07-08 22:41:10 +0100 (Wed, 08 Jul 2009) | 1 line
  
  I got a bit confused by this comment, so try to make it clearer.
........
  r54818 | danieljames | 2009-07-08 22:53:15 +0100 (Wed, 08 Jul 2009) | 3 lines
  
  Support INTERNAL ONLY enums in doxygen/boostbook documenation. Refs #3242.
  
  Patch by Mathias Gaunard.
........
Added:
   branches/release/tools/quickbook/test/code-block-teletype.gold
      - copied unchanged from r54818, /trunk/tools/quickbook/test/code-block-teletype.gold
   branches/release/tools/quickbook/test/code-block-teletype.quickbook
      - copied unchanged from r54818, /trunk/tools/quickbook/test/code-block-teletype.quickbook
   branches/release/tools/quickbook/test/templates_1_4.gold
      - copied unchanged from r54818, /trunk/tools/quickbook/test/templates_1_4.gold
   branches/release/tools/quickbook/test/templates_1_4.quickbook
      - copied unchanged from r54818, /trunk/tools/quickbook/test/templates_1_4.quickbook
Properties modified: 
   branches/release/   (props changed)
Text files modified: 
   branches/release/tools/boostbook/test/doxygen/boost/example.hpp    |     3                                         
   branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl |    37 +++++--                                 
   branches/release/tools/quickbook/detail/actions.cpp                |    55 +++++++-----                            
   branches/release/tools/quickbook/detail/actions.hpp                |   178 +++++++++++++++++++++------------------ 
   branches/release/tools/quickbook/detail/actions_class.cpp          |     7                                         
   branches/release/tools/quickbook/detail/actions_class.hpp          |     1                                         
   branches/release/tools/quickbook/detail/template_stack.hpp         |    12 +                                       
   branches/release/tools/quickbook/doc/quickbook.qbk                 |     1                                         
   branches/release/tools/quickbook/doc_info.hpp                      |     1                                         
   branches/release/tools/quickbook/phrase.hpp                        |     2                                         
   branches/release/tools/quickbook/syntax_highlight.hpp              |    79 +++++++++++++++++                       
   branches/release/tools/quickbook/test/Jamfile.v2                   |     2                                         
   branches/release/tools/quickbook/test/templates.gold               |     3                                         
   branches/release/tools/quickbook/test/templates.quickbook          |     6 +                                       
   14 files changed, 262 insertions(+), 125 deletions(-)
Modified: branches/release/tools/boostbook/test/doxygen/boost/example.hpp
==============================================================================
--- branches/release/tools/boostbook/test/doxygen/boost/example.hpp	(original)
+++ branches/release/tools/boostbook/test/doxygen/boost/example.hpp	2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
@@ -22,6 +22,9 @@
         static const int static_const_integer;
 
         enum class_enum { enumerator };
+        
+        /// INTERNAL ONLY
+        enum internal_enum { internal_enumerator };
     protected:
         int protected_integer;
         static int protected_static_integer;
Modified: branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl	(original)
+++ branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl	2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
@@ -292,21 +292,32 @@
   </xsl:template>
 
   <xsl:template match="enumvalue">
-    <enumvalue>
-      <xsl:attribute name="name">
-        <xsl:value-of select="name"/>
-      </xsl:attribute>
+    <xsl:choose>
+      <!-- If the string INTERNAL ONLY is in the description, don't
+           emit this entity. This hack is necessary because Doxygen doesn't
+           tell us what is \internal and what isn't. -->
+      <xsl:when test="contains(detaileddescription/para, 'INTERNAL ONLY')"/>
+      <xsl:when test="contains(briefdescription/para, 'INTERNAL ONLY')"/>
+      <xsl:when test="contains(inbodydescription/para, 'INTERNAL ONLY')"/>
+      <xsl:otherwise>
+  
+        <enumvalue>
+          <xsl:attribute name="name">
+            <xsl:value-of select="name"/>
+          </xsl:attribute>
 
-      <xsl:if test="initializer">
-        <default>
-          <xsl:apply-templates select="initializer" mode="passthrough"/>
-        </default>
-      </xsl:if>
+          <xsl:if test="initializer">
+            <default>
+              <xsl:apply-templates select="initializer" mode="passthrough"/>
+            </default>
+          </xsl:if>
 
-      <xsl:apply-templates select="briefdescription" mode="passthrough"/>
-      <xsl:apply-templates select="detaileddescription" mode="passthrough"/>
-      <xsl:apply-templates select="inbodydescription" mode="passthrough"/>
-    </enumvalue>
+          <xsl:apply-templates select="briefdescription" mode="passthrough"/>
+          <xsl:apply-templates select="detaileddescription" mode="passthrough"/>
+          <xsl:apply-templates select="inbodydescription" mode="passthrough"/>
+        </enumvalue>
+      </xsl:otherwise>
+    </xsl:choose>
   </xsl:template>
 
   <xsl:template name="doxygen.include.header.rec">
Modified: branches/release/tools/quickbook/detail/actions.cpp
==============================================================================
--- branches/release/tools/quickbook/detail/actions.cpp	(original)
+++ branches/release/tools/quickbook/detail/actions.cpp	2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
@@ -308,12 +308,35 @@
         out << escape_actions.phrase.str();
         escape_actions.phrase.pop(); // restore the stream
     }
+    
+    std::string syntax_highlight::operator()(iterator first, iterator last) const
+    {
+        // print the code with syntax coloring
+        if (source_mode == "c++")
+        {
+            parse(first, last, cpp_p);
+        }
+        else if (source_mode == "python")
+        {
+            parse(first, last, python_p);
+        }
+        else if (source_mode == "teletype")
+        {
+            parse(first, last, teletype_p);
+        }
+        else
+        {
+            BOOST_ASSERT(0);
+        }
+
+        std::string str;
+        temp.swap(str);
+        
+        return str;
+    }
 
     void code_action::operator()(iterator first, iterator last) const
     {
-        std::string save;
-        phrase.swap(save);
-
         // preprocess the code section to remove the initial indentation
         std::string program(first, last);
         detail::unindent(program);
@@ -324,18 +347,12 @@
         iterator last_(program.end(), program.end());
         first_.set_position(first.get_position());
 
+        std::string save;
+        phrase.swap(save);
+
         // print the code with syntax coloring
-        if (source_mode == "c++")
-        {
-            parse(first_, last_, cpp_p);
-        }
-        else if (source_mode == "python")
-        {
-            parse(first_, last_, python_p);
-        }
+        std::string str = syntax_p(first_, last_);
 
-        std::string str;
-        temp.swap(str);
         phrase.swap(save);
 
         //
@@ -353,16 +370,8 @@
         out.swap(save);
 
         // print the code with syntax coloring
-        if (source_mode == "c++")
-        {
-            parse(first, last, cpp_p);
-        }
-        else if (source_mode == "python")
-        {
-            parse(first, last, python_p);
-        }
-        std::string str;
-        temp.swap(str);
+        std::string str = syntax_p(first, last);
+
         out.swap(save);
 
         out << "<code>";
Modified: branches/release/tools/quickbook/detail/actions.hpp
==============================================================================
--- branches/release/tools/quickbook/detail/actions.hpp	(original)
+++ branches/release/tools/quickbook/detail/actions.hpp	2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
@@ -345,88 +345,6 @@
         std::string& save;
     };
 
-    typedef cpp_highlight<
-        span
-      , space
-      , string_symbols
-      , do_macro_action
-      , pre_escape_back
-      , post_escape_back
-      , actions
-      , unexpected_char
-      , collector>
-    cpp_p_type;
-
-    typedef python_highlight<
-        span
-      , space
-      , string_symbols
-      , do_macro_action
-      , pre_escape_back
-      , post_escape_back
-      , actions
-      , unexpected_char
-      , collector>
-    python_p_type;
-
-    struct code_action
-    {
-        // Does the actual syntax highlighing of code
-
-        code_action(
-            collector& out
-          , collector& phrase
-          , collector& temp
-          , std::string const& source_mode
-          , string_symbols const& macro
-          , actions& escape_actions)
-        : out(out)
-        , phrase(phrase)
-        , temp(temp)
-        , source_mode(source_mode)
-        , cpp_p(temp, macro, do_macro_action(temp), escape_actions)
-        , python_p(temp, macro, do_macro_action(temp), escape_actions)
-        {
-        }
-
-        void operator()(iterator first, iterator last) const;
-
-        collector& out;
-        collector& phrase;
-        collector& temp;
-        std::string const& source_mode;
-
-        cpp_p_type cpp_p;
-        python_p_type python_p;
-    };
-
-    struct inline_code_action
-    {
-        // Does the actual syntax highlighing of code inlined in text
-
-        inline_code_action(
-            collector& out
-          , collector& temp
-          , std::string const& source_mode
-          , string_symbols const& macro
-          , actions& escape_actions)
-        : out(out)
-        , source_mode(source_mode)
-        , temp(temp)
-        , cpp_p(temp, macro, do_macro_action(temp), escape_actions)
-        , python_p(temp, macro, do_macro_action(temp), escape_actions)
-        {}
-
-        void operator()(iterator first, iterator last) const;
-
-        collector& out;
-        std::string const& source_mode;
-        collector& temp;
-
-        cpp_p_type cpp_p;
-        python_p_type python_p;
-    };
-
     struct raw_char_action
     {
         // Prints a single raw (unprocessed) char.
@@ -490,6 +408,102 @@
         std::string str;
     };
 
+    typedef cpp_highlight<
+        span
+      , space
+      , string_symbols
+      , do_macro_action
+      , pre_escape_back
+      , post_escape_back
+      , actions
+      , unexpected_char
+      , collector>
+    cpp_p_type;
+
+    typedef python_highlight<
+        span
+      , space
+      , string_symbols
+      , do_macro_action
+      , pre_escape_back
+      , post_escape_back
+      , actions
+      , unexpected_char
+      , collector>
+    python_p_type;
+    
+    typedef teletype_highlight<
+        plain_char_action
+      , string_symbols
+      , do_macro_action
+      , pre_escape_back
+      , post_escape_back
+      , actions
+      , collector>
+    teletype_p_type;
+    
+    struct syntax_highlight
+    {
+        syntax_highlight(
+            collector& temp
+          , std::string const& source_mode
+          , string_symbols const& macro
+          , actions& escape_actions)
+        : temp(temp)
+        , source_mode(source_mode)
+        , cpp_p(temp, macro, do_macro_action(temp), escape_actions)
+        , python_p(temp, macro, do_macro_action(temp), escape_actions)
+        , teletype_p(temp, macro, do_macro_action(temp), escape_actions)
+        {
+        }
+
+        std::string operator()(iterator first, iterator last) const;
+
+        collector& temp;
+        std::string const& source_mode;
+        cpp_p_type cpp_p;
+        python_p_type python_p;
+        teletype_p_type teletype_p;
+    };
+
+    struct code_action
+    {
+        // Does the actual syntax highlighing of code
+
+        code_action(
+            collector& out
+          , collector& phrase
+          , syntax_highlight& syntax_p)
+        : out(out)
+        , phrase(phrase)
+        , syntax_p(syntax_p)
+        {
+        }
+
+        void operator()(iterator first, iterator last) const;
+
+        collector& out;
+        collector& phrase;
+        syntax_highlight& syntax_p;
+    };
+
+    struct inline_code_action
+    {
+        // Does the actual syntax highlighing of code inlined in text
+
+        inline_code_action(
+            collector& out
+          , syntax_highlight& syntax_p)
+        : out(out)
+        , syntax_p(syntax_p)
+        {}
+
+        void operator()(iterator first, iterator last) const;
+
+        collector& out;
+        syntax_highlight& syntax_p;
+    };
+
     struct start_varlistitem_action
     {
         start_varlistitem_action(collector& phrase)
Modified: branches/release/tools/quickbook/detail/actions_class.cpp
==============================================================================
--- branches/release/tools/quickbook/detail/actions_class.cpp	(original)
+++ branches/release/tools/quickbook/detail/actions_class.cpp	2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
@@ -69,9 +69,10 @@
         , extract_doc_license(doc_license, phrase)
         , extract_doc_purpose(doc_purpose, phrase)
 
-        , code(out, phrase, temp, source_mode, macro, *this)
-        , code_block(phrase, phrase, temp, source_mode, macro, *this)
-        , inline_code(phrase, temp, source_mode, macro, *this)
+        , syntax_p(temp, source_mode, macro, *this)
+        , code(out, phrase, syntax_p)
+        , code_block(phrase, phrase, syntax_p)
+        , inline_code(phrase, syntax_p)
         , paragraph(out, phrase, paragraph_pre, paragraph_post)
         , inside_paragraph(temp_para, phrase, paragraph_pre, paragraph_post)
         , h(out, phrase, doc_id, section_id, qualified_section_id, section_level)
Modified: branches/release/tools/quickbook/detail/actions_class.hpp
==============================================================================
--- branches/release/tools/quickbook/detail/actions_class.hpp	(original)
+++ branches/release/tools/quickbook/detail/actions_class.hpp	2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
@@ -103,6 +103,7 @@
         phrase_to_string_action extract_doc_license;
         phrase_to_string_action extract_doc_purpose;
 
+        syntax_highlight        syntax_p;
         code_action             code;
         code_action             code_block;
         inline_code_action      inline_code;
Modified: branches/release/tools/quickbook/detail/template_stack.hpp
==============================================================================
--- branches/release/tools/quickbook/detail/template_stack.hpp	(original)
+++ branches/release/tools/quickbook/detail/template_stack.hpp	2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
@@ -21,14 +21,18 @@
 
 namespace quickbook
 {
-    //  template symbols are stored as follows:
+    //  template symbols with N arguments are stored as follows:
     //
-    //      template name
-    //      template param name[0]
-    //      template param name[1]
+    //  vector<std::string>
+    //        0: template name
+    //        1: template param name[0]
+    //        2: template param name[1]
     //      ...
     //      template param name[N]
     //      template body
+    //        N: template param name[N-1]
+    //      N+1: template body
+    //  file position
 
     typedef boost::tuple<
             std::vector<std::string>
Modified: branches/release/tools/quickbook/doc/quickbook.qbk
==============================================================================
--- branches/release/tools/quickbook/doc/quickbook.qbk	(original)
+++ branches/release/tools/quickbook/doc/quickbook.qbk	2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
@@ -436,6 +436,7 @@
     [[Mode]                 [Source Mode Markup]]
     [[C++]                  [[^\[c++\]]]]
     [[Python]               [[^\[python\]]]]
+    [[Plain Text]           [[^\[teletype\]]]]
 ]
 
 [note The source mode strings are lowercase.]
Modified: branches/release/tools/quickbook/doc_info.hpp
==============================================================================
--- branches/release/tools/quickbook/doc_info.hpp	(original)
+++ branches/release/tools/quickbook/doc_info.hpp	2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
@@ -153,6 +153,7 @@
                     >>  (
                            str_p("c++") 
                         |  "python"
+                        |  "teletype"
                         )                           [assign_a(actions.source_mode)]
                     ;
 
Modified: branches/release/tools/quickbook/phrase.hpp
==============================================================================
--- branches/release/tools/quickbook/phrase.hpp	(original)
+++ branches/release/tools/quickbook/phrase.hpp	2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
@@ -145,6 +145,7 @@
                         >> !(hard_space
                             >> template_args)
                     ) )
+                    >> eps_p(']')
                     ;
 
                 brackets =
@@ -403,6 +404,7 @@
                     (
                         str_p("c++")
                     |   "python"
+                    |   "teletype"
                     )                                   [assign_a(actions.source_mode)]
                     ;
 
Modified: branches/release/tools/quickbook/syntax_highlight.hpp
==============================================================================
--- branches/release/tools/quickbook/syntax_highlight.hpp	(original)
+++ branches/release/tools/quickbook/syntax_highlight.hpp	2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
@@ -323,6 +323,85 @@
         DoMacro do_macro;
         EscapeActions& escape_actions;
     };
+
+    // Grammar for plain text (no actual highlighting)
+    template <
+        typename CharProcess
+      , typename Macro
+      , typename DoMacro
+      , typename PreEscape
+      , typename PostEscape
+      , typename EscapeActions
+      , typename Out>
+    struct teletype_highlight
+    : public grammar<teletype_highlight<CharProcess, Macro, DoMacro, PreEscape, PostEscape, EscapeActions, Out> >
+    {
+        teletype_highlight(Out& out, Macro const& macro, DoMacro do_macro, EscapeActions& escape_actions)
+        : out(out), macro(macro), do_macro(do_macro), escape_actions(escape_actions) {}
+
+        template <typename Scanner>
+        struct definition
+        {
+            definition(teletype_highlight const& self)
+                : common(self.escape_actions, unused)
+                , unused(false)
+            {
+                program
+                    =
+                    *(  macro
+                    |   escape          
+                    |   repeat_p(1)[anychar_p]          [CharProcess(self.out)]
+                    )
+                    ;
+
+                macro = 
+                    eps_p(self.macro                    // must not be followed by
+                        >> (eps_p - (alpha_p | '_')))   // alpha or underscore
+                    >> self.macro                       [self.do_macro]
+                    ;
+
+                qbk_phrase =
+                   *(   common
+                    |   (anychar_p - str_p("``"))   [self.escape_actions.plain_char]
+                    )
+                    ;
+
+                escape =
+                    str_p("``")         [PreEscape(self.escape_actions, save)]
+                    >>
+                    (
+                        (
+                            (
+                                (+(anychar_p - "``") >> eps_p("``"))
+                                & qbk_phrase
+                            )
+                            >>  str_p("``")
+                        )
+                        |
+                        (
+                            eps_p       [self.escape_actions.error]
+                            >> *anychar_p
+                        )
+                    )                   [PostEscape(self.out, self.escape_actions, save)]
+                    ;
+            }
+
+            rule<Scanner> program, macro, qbk_phrase, escape;
+
+            phrase_grammar<EscapeActions> common;
+            std::string save;
+            bool unused;
+
+            rule<Scanner> const&
+            start() const { return program; }
+        };
+
+        Out& out;
+        Macro const& macro;
+        DoMacro do_macro;
+        EscapeActions& escape_actions;
+    };
+
 }
 
 #endif // BOOST_SPIRIT_QUICKBOOK_SYNTAX_HIGHLIGHT_HPP
Modified: branches/release/tools/quickbook/test/Jamfile.v2
==============================================================================
--- branches/release/tools/quickbook/test/Jamfile.v2	(original)
+++ branches/release/tools/quickbook/test/Jamfile.v2	2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
@@ -15,11 +15,13 @@
     [ quickbook-test code-block-1 ]
     [ quickbook-test code-block-2 ]
     [ quickbook-test code-block-3 ]
+    [ quickbook-test code-block-teletype ]
     [ quickbook-test code-snippet ]
     [ quickbook-test preformatted ]
     [ quickbook-test link-side-by-side ]
     [ quickbook-test escape ]
     [ quickbook-test templates ]
+    [ quickbook-test templates_1_4 ]
     [ quickbook-test xinclude ]
     [ quickbook-test import ]
     [ quickbook-fail-test fail-include ]
Modified: branches/release/tools/quickbook/test/templates.gold
==============================================================================
--- branches/release/tools/quickbook/test/templates.gold	(original)
+++ branches/release/tools/quickbook/test/templates.gold	2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
@@ -67,5 +67,8 @@
     <para>
       .0 00
     </para>
+    <para>
+      [fool]
+    </para>
   </section>
 </article>
Modified: branches/release/tools/quickbook/test/templates.quickbook
==============================================================================
--- branches/release/tools/quickbook/test/templates.quickbook	(original)
+++ branches/release/tools/quickbook/test/templates.quickbook	2009-07-12 12:09:04 EDT (Sun, 12 Jul 2009)
@@ -100,4 +100,10 @@
 [template test[x] [join1 [join2 0 [x]]...0]]
 [test 0]
 
+[/-------------------------------- Mismatched template ]
+
+[template foo 1]
+[fool]
+
 [endsect]
+