Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r86725 - in branches/release: . doc doc/src tools tools/boostbook tools/boostbook/test/doxygen tools/boostbook/test/doxygen/boost tools/boostbook/test/more/tests/syntax-highlight tools/boostbook/xsl tools/boostbook/xsl/doxygen
From: dnljms_at_[hidden]
Date: 2013-11-16 15:10:31


Author: danieljames
Date: 2013-11-16 15:10:31 EST (Sat, 16 Nov 2013)
New Revision: 86725
URL: http://svn.boost.org/trac/boost/changeset/86725

Log:
Merge Boostbook.

- Support some colour roles (thanks to Paul Bristow).
- Support assignment return types in doxygen2boostbook. Fixes #9241.
- Fix virtual methods in doxygen2boostbook.
- Add newlines to doxygen2boostbook to make the output a tad more readable.
- Improved last-revision handling.
- Support noexcept and constexpr in doxygen2boostbook.
- Improved boostbook for virtual and explicit methods from doxygen2boostbook.
- Support `language="c++"` attribute for `code` and `programlisting` elements.
- Use that to do syntax highlighting for doxygen2boostbook.

Added:
   branches/release/tools/boostbook/test/more/tests/syntax-highlight/language-attribute.gold
      - copied unchanged from r86510, trunk/tools/boostbook/test/more/tests/syntax-highlight/language-attribute.gold
   branches/release/tools/boostbook/test/more/tests/syntax-highlight/language-attribute.xml
      - copied unchanged from r86510, trunk/tools/boostbook/test/more/tests/syntax-highlight/language-attribute.xml
Properties modified:
   branches/release/ (props changed)
   branches/release/doc/ (props changed)
   branches/release/tools/ (props changed)
   branches/release/tools/boostbook/ (props changed)
Text files modified:
   branches/release/doc/src/boostbook.css | 142 +++++++++++++------
   branches/release/tools/boostbook/test/doxygen/autodoc.gold | 80 ++++++++++
   branches/release/tools/boostbook/test/doxygen/boost/example.hpp | 51 ++++++
   branches/release/tools/boostbook/test/more/tests/syntax-highlight/language-attribute.gold | 13 +
   branches/release/tools/boostbook/test/more/tests/syntax-highlight/language-attribute.xml | 25 +++
   branches/release/tools/boostbook/xsl/annotation.xsl | 8 +
   branches/release/tools/boostbook/xsl/docbook.xsl | 8 +
   branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl | 290 ++++++++++++++++++++++++++-------------
   branches/release/tools/boostbook/xsl/fo.xsl | 94 ++++++++++++
   branches/release/tools/boostbook/xsl/html-base.xsl | 5
   branches/release/tools/boostbook/xsl/html-help.xsl | 100 -------------
   11 files changed, 565 insertions(+), 251 deletions(-)

Modified: branches/release/doc/src/boostbook.css
==============================================================================
--- branches/release/doc/src/boostbook.css Sat Nov 16 14:41:12 2013 (r86724)
+++ branches/release/doc/src/boostbook.css 2013-11-16 15:10:31 EST (Sat, 16 Nov 2013) (r86725)
@@ -1,13 +1,17 @@
+
 /*=============================================================================
- Copyright (c) 2004 Joel de Guzman
- http://spirit.sourceforge.net/
+Copyright (c) 2004 Joel de Guzman
+http://spirit.sourceforge.net/
+
+Copyright 2013 Niall Douglas additions for colors and alignment.
+Copyright 2013 Paul A. Bristow additions for more colors and alignments.
 
- Distributed under the Boost Software License, Version 1.0. (See accompany-
- ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+Distributed under the Boost Software License, Version 1.0. (See accompany-
+ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
 
 /*=============================================================================
- Body defaults
+Body defaults
 =============================================================================*/
 
     body
@@ -17,7 +21,7 @@
     }
 
 /*=============================================================================
- Paragraphs
+Paragraphs
 =============================================================================*/
 
     p
@@ -28,7 +32,7 @@
     }
 
 /*=============================================================================
- Program listings
+Program listings
 =============================================================================*/
 
     /* Code on paragraphs */
@@ -58,11 +62,11 @@
     td .screen
     {
         margin: 0pc 0pc 0pc 0pc;
- padding: 0pc 0pc 0pc 0pc;
+ padding: 0pc 0pc 0pc 0pc;
     }
 
 /*=============================================================================
- Headings
+Headings
 =============================================================================*/
 
     h1, h2, h3, h4, h5, h6
@@ -116,13 +120,13 @@
     h1 tt.computeroutput { font-size: 140% }
     h2 tt.computeroutput { font-size: 140% }
     h3 tt.computeroutput { font-size: 130% }
- h4 tt.computeroutput { font-size: 130% }
+ h4 tt.computeroutput { font-size: 130% }
     h5 tt.computeroutput { font-size: 130% }
     h6 tt.computeroutput { font-size: 130% }
 
 
 /*=============================================================================
- Author
+Author
 =============================================================================*/
 
     h3.author
@@ -131,7 +135,7 @@
     }
 
 /*=============================================================================
- Lists
+Lists
 =============================================================================*/
 
     li
@@ -153,7 +157,7 @@
     }
 
 /*=============================================================================
- Links
+Links
 =============================================================================*/
 
     a
@@ -167,7 +171,7 @@
     }
 
 /*=============================================================================
- Spirit style navigation
+Spirit style navigation
 =============================================================================*/
 
     .spirit-nav
@@ -187,7 +191,7 @@
     }
 
 /*=============================================================================
- Copyright footer
+Copyright footer
 =============================================================================*/
     .copyright-footer
     {
@@ -202,7 +206,7 @@
     }
 
 /*=============================================================================
- Table of contents
+Table of contents
 =============================================================================*/
 
     div.toc
@@ -218,7 +222,7 @@
        float: right;
        padding: 0.5pc;
     }
-
+
     /* Code on toc */
     .toc .computeroutput { font-size: 120% }
 
@@ -227,7 +231,7 @@
     .toc dl dl { margin: 0; }
 
 /*=============================================================================
- Tables
+Tables
 =============================================================================*/
 
     .table-title,
@@ -286,7 +290,7 @@
     }
 
 /*=============================================================================
- Blurbs
+Blurbs
 =============================================================================*/
 
     div.note,
@@ -309,7 +313,7 @@
     }
 
 /*=============================================================================
- Variable Lists
+Variable Lists
 =============================================================================*/
 
     div.variablelist
@@ -354,7 +358,7 @@
     }
 
 /*=============================================================================
- Misc
+Misc
 =============================================================================*/
 
     /* Title of books and articles in bibliographies */
@@ -380,7 +384,7 @@
     }
 
 /*=============================================================================
- Colors
+Colors
 =============================================================================*/
 
     @media screen
@@ -391,16 +395,16 @@
         }
 
     /* Syntax Highlighting */
- .keyword { color: #0000AA; }
- .identifier { color: #000000; }
- .special { color: #707070; }
- .preprocessor { color: #402080; }
- .char { color: teal; }
- .comment { color: #800000; }
- .string { color: teal; }
- .number { color: teal; }
- .white_bkd { background-color: #FFFFFF; }
- .dk_grey_bkd { background-color: #999999; }
+ .keyword { color: #0000AA; }
+ .identifier { color: #000000; }
+ .special { color: #707070; }
+ .preprocessor { color: #402080; }
+ .char { color: teal; }
+ .comment { color: #800000; }
+ .string { color: teal; }
+ .number { color: teal; }
+ .white_bkd { background-color: #FFFFFF; }
+ .dk_grey_bkd { background-color: #999999; }
 
     /* Links */
         a, a .keyword, a .identifier, a .special, a .preprocessor
@@ -572,7 +576,7 @@
     }
 
 /*=============================================================================
- Images
+Images
 =============================================================================*/
 
     span.inlinemediaobject img
@@ -581,36 +585,36 @@
     }
 
 /*==============================================================================
- Super and Subscript: style so that line spacing isn't effected, see
- http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=1&postId=5341
+Super and Subscript: style so that line spacing isn't effected, see
+http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=1&postId=5341
 ==============================================================================*/
 
 sup,
 sub {
- height: 0;
- line-height: 1;
- vertical-align: baseline;
- position: relative;
-
+height: 0;
+line-height: 1;
+vertical-align: baseline;
+position: relative;
+
 }
 
 /* For internet explorer: */
 
 * html sup,
 * html sub {
- vertical-align: bottom;
+vertical-align: bottom;
 }
 
 sup {
- bottom: 1ex;
+bottom: 1ex;
 }
 
 sub {
- top: .5ex;
+top: .5ex;
 }
 
 /*==============================================================================
- Indexes: pretty much the same as the TOC.
+Indexes: pretty much the same as the TOC.
 ==============================================================================*/
 
     .index
@@ -644,3 +648,53 @@
         font-weight: bold;
     }
 
+
+/*==============================================================================
+Alignment and coloring use 'role' feature, available from Quickbook 1.6 up.
+Added from Niall Douglas for role color and alignment.
+http://article.gmane.org/gmane.comp.lib.boost.devel/243318
+*/
+
+/* Add text alignment (see http://www.w3schools.com/cssref/pr_text_text-align.asp) */
+span.aligncenter
+{
+ display: inline-block; width: 100%; text-align: center;
+}
+span.alignright
+{
+ display: inline-block; width: 100%; text-align: right;
+}
+/* alignleft is the default. */
+span.alignleft
+{
+ display: inline-block; width: 100%; text-align: left;
+}
+
+/* alignjustify stretches the word spacing so that each line has equal width
+within a chosen fraction of page width (here arbitrarily 20%).
+*Not* useful inside table items as the column width remains the total string width.
+Nor very useful, except to temporarily restrict the width.
+*/
+span.alignjustify
+{
+ display: inline-block; width: 20%; text-align: justify;
+}
+
+/* Text colors.
+Names at http://www.w3.org/TR/2002/WD-css3-color-20020219/ 4.3. X11 color keywords.
+Quickbook Usage: [role red Some red text]
+
+*/
+span.red { inline-block; color: red; }
+span.green { color: green; }
+span.lime { color: #00FF00; }
+span.blue { color: blue; }
+span.navy { color: navy; }
+span.yellow { color: yellow; }
+span.magenta { color: magenta; }
+span.indigo { color: #4B0082; }
+span.cyan { color: cyan; }
+span.purple { color: purple; }
+span.gold { color: gold; }
+span.silver { color: silver; } /* lighter gray */
+span.gray { color: #808080; } /* light gray */

Modified: branches/release/tools/boostbook/test/doxygen/autodoc.gold
==============================================================================
--- branches/release/tools/boostbook/test/doxygen/autodoc.gold Sat Nov 16 14:41:12 2013 (r86724)
+++ branches/release/tools/boostbook/test/doxygen/autodoc.gold 2013-11-16 15:10:31 EST (Sat, 16 Nov 2013) (r86725)
@@ -1,12 +1,60 @@
 <?xml version="1.0" standalone="yes"?>
-<library-reference id="example_reference"><title>Example Reference</title><header name="boost/example.hpp"><namespace name="example"><class name="example"><purpose>Documentation for class example. </purpose><class name="inner_class"><data-member name="x"><type>int</type></data-member></class><enum name="class_enum"><enumvalue name="enumerator"/></enum><typedef name="documented_type1"><description><para>This type has documentation. </para></description><type>int</type></typedef><typedef name="documented_type2"><purpose>This type has documentation. </purpose><type>long</type></typedef><typedef name="documented_type3"><description><para>This type has documentation. </para></description><type>long double</type></typedef><typedef name="undocumented_type1"><type>short</type></typedef><typedef name="undocumented_type2"><type>double</type></typedef><data-member name="integer"><type>int</type></data-member><data-member name="mutable_integer" specifiers="mutable"><type>int</type></data-member><data-member name="const
_integer"><type>const int</type></data-member><data-member name="static_integer" specifiers="static"><type>int</type></data-member><data-member name="static_const_integer" specifiers="static"><type>const int</type></data-member><method-group name="public member functions"><method name="conversion-operator" cv="" specifiers="explicit"><type>int</type></method></method-group><constructor cv="= default"><parameter name=""><paramtype><classname>example</classname> const &amp;</paramtype></parameter></constructor><copy-assignment cv="= delete"><parameter name=""><paramtype><classname>example</classname> const &amp;</paramtype></parameter></copy-assignment></class><struct name="example_template"><template>
+<library-reference id="example_reference"><title>Example Reference</title><header name="boost/example.hpp">
+<namespace name="example">
+<class name="example"><purpose>Documentation for class example. </purpose><description><para>Detailed documentation</para><para><programlisting language="c++">void class_code_sample();
+</programlisting> </para></description><class name="inner_class"><data-member name="x"><type>int</type></data-member>
+</class><enum name="class_enum"><enumvalue name="enumerator"/></enum>
+<typedef name="documented_type1"><description><para>This type has documentation. </para></description><type>int</type></typedef>
+<typedef name="documented_type2"><purpose>This type has documentation. </purpose><type>long</type></typedef>
+<typedef name="documented_type3"><description><para>This type has documentation. </para></description><type>long double</type></typedef>
+<typedef name="undocumented_type1"><type>short</type></typedef>
+<typedef name="undocumented_type2"><type>double</type></typedef>
+<data-member name="integer"><type>int</type></data-member>
+<data-member name="mutable_integer" specifiers="mutable"><type>int</type></data-member>
+<data-member name="const_integer"><type>const int</type></data-member>
+<data-member name="static_integer" specifiers="static"><type>int</type></data-member>
+<data-member name="static_const_integer" specifiers="static"><type>const int</type></data-member>
+<method-group name="public member functions">
+<method name="virtual_method" specifiers="virtual"><type>int</type></method>
+<method name="virtual_abstract_method" cv="= 0" specifiers="virtual"><type>int</type></method>
+<method name="virtual_const_method" cv="const" specifiers="virtual"><type>int</type></method>
+<method name="method_with_default_value"><type>int</type><parameter name=""><paramtype>int</paramtype><default>default_value</default></parameter></method>
+<method name="method_with_fp"><type>int</type><parameter name="fp"><paramtype>int(*)()</paramtype></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
+<method name="method_with_string_default1"><type>int</type><parameter name=""><paramtype>char *</paramtype><default>")"</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
+<method name="method_with_string_default2"><type>int</type><parameter name=""><paramtype>char *</paramtype><default>"("</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
+<method name="method_with_char_default1"><type>int</type><parameter name=""><paramtype>char</paramtype><default>'('</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
+<method name="method_with_char_default2"><type>int</type><parameter name=""><paramtype>char</paramtype><default>')'</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
+<method name="volatile_method_with_fp" cv="volatile"><type>int</type><parameter name="fp"><paramtype>int(*)()</paramtype></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
+<method name="volatile_method_with_string_default1" cv="volatile"><type>int</type><parameter name=""><paramtype>char *</paramtype><default>")"</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
+<method name="volatile_method_with_string_default2" cv="volatile"><type>int</type><parameter name=""><paramtype>char *</paramtype><default>"("</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
+<method name="volatile_method_with_char_default1" cv="volatile"><type>int</type><parameter name=""><paramtype>char</paramtype><default>'('</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
+<method name="volatile_method_with_char_default2" cv="volatile"><type>int</type><parameter name=""><paramtype>char</paramtype><default>')'</default></parameter><parameter name=""><paramtype>volatile char</paramtype></parameter></method>
+<method name="const_method" cv="const"><type>void</type></method>
+<method name="volatile_method" cv="volatile"><type>void</type></method>
+<method name="trad_noexcept" cv="noexcept"><type>void</type></method>
+<method name="trad_noexcept_if" cv="noexcept(a==b &amp;&amp;(c||d)))"><type>void</type></method>
+<method name="boost_noexcept" cv="noexcept"><type>void</type></method>
+<method name="boost_noexcept_if" cv="noexcept(condition)"><type>void</type></method>
+<method name="trad_constexpr" cv="constexpr"><type>void</type></method>
+<method name="boost_constexpr" cv="constexpr"><type>void</type></method>
+<method name="boost_constexpr_or_const" cv="constexpr"><type>void</type></method>
+<method name="constexpr_noexcept" cv="constexpr noexcept"><type>void</type></method>
+<method name="conversion-operator" specifiers="explicit"><type>int</type></method>
+</method-group>
+<constructor cv="= default"><parameter name=""><paramtype><classname>example</classname> const &amp;</paramtype></parameter></constructor>
+<copy-assignment cv="= delete"><type><classname>example</classname> &amp;</type><parameter name=""><paramtype><classname>example</classname> const &amp;</paramtype></parameter></copy-assignment>
+<method-group name="public static functions">
+<method name="static_method" specifiers="static"><type>int</type></method>
+<method name="static_constexpr" cv="constexpr" specifiers="static"><type>int</type></method>
+</method-group>
+</class><struct name="example_template"><template>
       <template-type-parameter name="TypeParameter"><purpose><para>A template parameter </para></purpose></template-type-parameter>
       <template-nontype-parameter name="NonTypeParameter"><type>int</type><purpose><para>This is a non-type template parameter </para></purpose></template-nontype-parameter>
       <template-type-parameter name="TypeParameterWithDefault"><default>int</default><purpose><para>This is a template parameter with a default argument </para></purpose></template-type-parameter>
     </template><description><para>Test some doxygen markup</para><para><warning><para>This is just an example.</para></warning>
 Embedded docbook list:</para><para>
- <orderedlist><listitem><simpara>1</simpara></listitem><listitem><simpara>2</simpara></listitem></orderedlist>
- </para><para><emphasis>Special</emphasis> <emphasis role="bold">Bold</emphasis> <computeroutput>Typewriter</computeroutput> <emphasis>Italics</emphasis> <emphasis>emphasis</emphasis> <computeroutput>parameter</computeroutput> </para><para><itemizedlist>
+<orderedlist><listitem><simpara>1</simpara></listitem><listitem><simpara>2</simpara></listitem></orderedlist>
+</para><para><emphasis>Special</emphasis> <emphasis role="bold">Bold</emphasis> <computeroutput>Typewriter</computeroutput> <emphasis>Italics</emphasis> <emphasis>emphasis</emphasis> <computeroutput>parameter</computeroutput> </para><para><itemizedlist>
 <listitem><para>Arg1 first argument. </para></listitem>
 <listitem><para>Arg2 second argument.</para></listitem>
 </itemizedlist>
@@ -15,19 +63,37 @@
 <listitem><para>Second list item</para></listitem>
 </itemizedlist>
 Line 1<sbr/>
- Line 2</para><para><programlisting> void foo() {}
+ Line 2</para><para><programlisting language="c++">void foo() {}
 </programlisting></para><para>
 </para></description></struct><struct name="specialization_test"><template>
       <template-type-parameter name="T"/>
     </template></struct><struct-specialization name="specialization_test"><template>
       <template-type-parameter name="T"/>
- </template><specialization><template-arg>T *</template-arg></specialization><method-group name="public member functions"/><constructor><description><para>A constructor. </para></description></constructor><destructor><description><para>A destructor. </para></description></destructor><copy-assignment cv=""><parameter name=""><paramtype>const <classname>specialization_test</classname> &amp;</paramtype></parameter><description><para>An assignment operator. </para></description></copy-assignment></struct-specialization><enum name="namespace_enum"><enumvalue name="enumerator"/></enum><data-member name="namespace_integer"><type>int</type></data-member><data-member name="namespace_static_integer" specifiers="static"><type>int</type></data-member><data-member name="namespace_const_integer"><type>const int</type></data-member><data-member name="namespace_static_const_integer" specifiers="static"><type>const int</type></data-member><function name="namespace_func"><type>int</type><parameter name="i"><paramtype>int<
/paramtype><description><para>A function parameter </para></description></parameter><parameter name="j"><paramtype>int</paramtype><description><para>Another </para></description></parameter><description><para>
+ </template><specialization><template-arg>T *</template-arg></specialization><method-group name="public member functions">
+</method-group>
+<constructor><description><para>A constructor. </para></description></constructor>
+<destructor><description><para>A destructor. </para></description></destructor>
+<copy-assignment><type><emphasis>unspecified</emphasis></type><parameter name=""><paramtype>const <classname>specialization_test</classname> &amp;</paramtype></parameter><description><para>An assignment operator. </para></description></copy-assignment>
+</struct-specialization><enum name="namespace_enum"><enumvalue name="enumerator"/></enum>
+<data-member name="namespace_integer"><type>int</type></data-member>
+<data-member name="namespace_static_integer" specifiers="static"><type>int</type></data-member>
+<data-member name="namespace_const_integer"><type>const int</type></data-member>
+<data-member name="namespace_static_const_integer" specifiers="static"><type>const int</type></data-member>
+<function name="free_function"><type>void</type><parameter name="x"><paramtype>int</paramtype><description><para>Parameter description.</para></description></parameter><description><para>
+<programlisting language="c++">void function_code_sample();
+</programlisting> </para></description></function>
+<function name="namespace_func"><type>int</type><parameter name="i"><paramtype>int</paramtype><description><para>A function parameter </para></description></parameter><parameter name="j"><paramtype>int</paramtype><description><para>Another </para></description></parameter><description><para>
 
 
 This is a test function. <classname alt="example::example">Link to class</classname> <classname alt="example::example_template">Link to class template</classname> <note><para>This is a note.</para></note>
 <para><emphasis role="bold">See Also:</emphasis><para><classname alt="example::example">example::example</classname> and <classname alt="example::example_template">example_template</classname> </para></para>
-</para></description><requires><para>i &gt; j</para></requires><returns><para>The answer </para></returns></function><function name="namespace_func_template"><type>void</type><template>
+</para></description><requires><para>i &gt; j</para></requires><returns><para>The answer </para></returns></function>
+<function name="namespace_func_template"><type>void</type><template>
           <template-type-parameter name="TypeParameter"><purpose><para>A template parameter </para></purpose></template-type-parameter>
           <template-nontype-parameter name="NonTypeParameter"><type>int</type><purpose><para>This is a non-type template parameter </para></purpose></template-nontype-parameter>
         </template><description><para>Testing a function template.
-</para></description></function></namespace><macro name="EXAMPLE" kind="functionlike"><macro-parameter name="m"/><purpose>Documentation for macro example. </purpose></macro></header></library-reference>
+</para></description></function>
+</namespace>
+<macro name="EXAMPLE" kind="functionlike"><macro-parameter name="m"/><purpose>Documentation for macro example. </purpose></macro>
+</header>
+</library-reference>
\ No newline at end of file

Modified: branches/release/tools/boostbook/test/doxygen/boost/example.hpp
==============================================================================
--- branches/release/tools/boostbook/test/doxygen/boost/example.hpp Sat Nov 16 14:41:12 2013 (r86724)
+++ branches/release/tools/boostbook/test/doxygen/boost/example.hpp 2013-11-16 15:10:31 EST (Sat, 16 Nov 2013) (r86725)
@@ -7,6 +7,12 @@
     \class example::example
     
     \brief Documentation for class example
+
+ Detailed documentation
+
+ \code{.cpp}
+ void class_code_sample();
+ \endcode
  */
 
 /*!
@@ -23,6 +29,16 @@
 
 namespace example
 {
+ /*!
+
+ \param x Parameter description.
+
+ \code{.cpp}
+ void function_code_sample();
+ \endcode
+ */
+ void free_function(int x);
+
     int namespace_integer;
     static int namespace_static_integer;
     const int namespace_const_integer = 1;
@@ -34,6 +50,39 @@
     public:
         example(example const&) = default;
         example& operator=(example const&) = delete;
+ virtual int virtual_method();
+ virtual int virtual_abstract_method() = 0;
+ virtual int virtual_const_method() const;
+ int method_with_default_value(int = default_value);
+
+ int method_with_fp(int (*fp)(), volatile char);
+ int method_with_string_default1(char* = ")", volatile char);
+ int method_with_string_default2(char* = "(", volatile char);
+ int method_with_char_default1(char = '(', volatile char);
+ int method_with_char_default2(char = ')', volatile char);
+
+ int volatile_method_with_fp(int (*fp)(), volatile char) volatile;
+ int volatile_method_with_string_default1(char* = ")", volatile char) volatile;
+ int volatile_method_with_string_default2(char* = "(", volatile char) volatile;
+ int volatile_method_with_char_default1(char = '(', volatile char) volatile;
+ int volatile_method_with_char_default2(char = ')', volatile char) volatile;
+
+ void const_method() const;
+ void volatile_method() volatile;
+
+ void trad_noexcept() noexcept;
+ void trad_noexcept_if() noexcept(a == b && (c || d));
+ void boost_noexcept() BOOST_NOEXCEPT;
+ void boost_noexcept_if() BOOST_NOEXCEPT_IF(a == b && (c || d));
+
+ void trad_constexpr() constexpr;
+ void boost_constexpr() BOOST_CONSTEXPR;
+ void boost_constexpr_or_const() BOOST_CONSTEXPR_OR_CONST;
+
+ void constexpr_noexcept() constexpr noexcept;
+
+ static int static_method();
+ static int static_constexpr() constexpr;
 
         int integer;
         static int static_integer;
@@ -149,7 +198,7 @@
         /** A destructor. */
         ~specialization_test();
         /** An assignment operator. */
- specialization_test& operator=(const specialization_test&);
+ detail::unspecified& operator=(const specialization_test&);
     };
 }
 

Copied: branches/release/tools/boostbook/test/more/tests/syntax-highlight/language-attribute.gold (from r86510, trunk/tools/boostbook/test/more/tests/syntax-highlight/language-attribute.gold)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/release/tools/boostbook/test/more/tests/syntax-highlight/language-attribute.gold 2013-11-16 15:10:31 EST (Sat, 16 Nov 2013) (r86725, copy of r86510, trunk/tools/boostbook/test/more/tests/syntax-highlight/language-attribute.gold)
@@ -0,0 +1,13 @@
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<book xmlns:xi="http://www.w3.org/2001/XInclude" id="test" lang="en">
+ <title>Test language attribute</title>
+ <programlisting>plain text</programlisting>
+ <programlisting><phrase role="keyword">void</phrase> <phrase role="identifier">main</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase><phrase role="special">}</phrase></programlisting>
+ <programlisting><phrase role="keyword">actions</phrase> something <phrase role="special">;</phrase></programlisting>
+
+ <para>
+ <computeroutput>plain text</computeroutput>
+ <computeroutput><phrase role="keyword">void</phrase> <phrase role="identifier">main</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase><phrase role="special">}</phrase></computeroutput>
+ <computeroutput><phrase role="keyword">actions</phrase> something <phrase role="special">;</phrase></computeroutput>
+ </para>
+</book>
\ No newline at end of file

Copied: branches/release/tools/boostbook/test/more/tests/syntax-highlight/language-attribute.xml (from r86510, trunk/tools/boostbook/test/more/tests/syntax-highlight/language-attribute.xml)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/release/tools/boostbook/test/more/tests/syntax-highlight/language-attribute.xml 2013-11-16 15:10:31 EST (Sat, 16 Nov 2013) (r86725, copy of r86510, trunk/tools/boostbook/test/more/tests/syntax-highlight/language-attribute.xml)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2013 Daniel James.
+
+ 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)
+-->
+<!DOCTYPE boostbook PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
+ "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd">
+<boostbook id="test" xmlns:xi="http://www.w3.org/2001/XInclude"
+ last-revision="$Date: 2010-10-30 15:29:27 +0100 (Sat, 30 Oct 2010) $"
+ lang="en">
+ <title>Test language attribute</title>
+ <programlisting>plain text</programlisting>
+ <programlisting language="c++">void main() {}</programlisting>
+ <programlisting language="jam">actions something ;</programlisting>
+
+ <para>
+ <code>plain text</code>
+ <code language="c++">void main() {}</code>
+ <code language="jam">actions something ;</code>
+ </para>
+</boostbook>
+

Modified: branches/release/tools/boostbook/xsl/annotation.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/annotation.xsl Sat Nov 16 14:41:12 2013 (r86724)
+++ branches/release/tools/boostbook/xsl/annotation.xsl 2013-11-16 15:10:31 EST (Sat, 16 Nov 2013) (r86725)
@@ -400,6 +400,14 @@
     </computeroutput>
   </xsl:template>
 
+ <xsl:template match="code[@language='c++']" mode="annotation">
+ <computeroutput>
+ <xsl:apply-templates mode="annotation">
+ <xsl:with-param name="highlight" select="true()"/>
+ </xsl:apply-templates>
+ </computeroutput>
+ </xsl:template>
+
   <xsl:template match="bold" mode="annotation">
     <emphasis role="bold">
       <xsl:apply-templates mode="annotation"/>

Modified: branches/release/tools/boostbook/xsl/docbook.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/docbook.xsl Sat Nov 16 14:41:12 2013 (r86724)
+++ branches/release/tools/boostbook/xsl/docbook.xsl 2013-11-16 15:10:31 EST (Sat, 16 Nov 2013) (r86725)
@@ -398,6 +398,10 @@
     </computeroutput>
   </xsl:template>
 
+ <xsl:template match="code[@language='c++']">
+ <xsl:apply-templates select="." mode="annotation"/>
+ </xsl:template>
+
   <xsl:template match="bold">
     <emphasis role="bold">
       <xsl:apply-templates mode="annotation"/>
@@ -454,6 +458,10 @@
     </programlisting>
   </xsl:template>
 
+ <xsl:template match="programlisting[@language='c++']">
+ <xsl:apply-templates select="." mode="annotation"/>
+ </xsl:template>
+
   <!-- These DocBook elements have special meaning. Use the annotation mode -->
   <xsl:template match="classname|methodname|functionname|enumname|
                        macroname|headername|globalname">

Modified: branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl Sat Nov 16 14:41:12 2013 (r86724)
+++ branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl 2013-11-16 15:10:31 EST (Sat, 16 Nov 2013) (r86725)
@@ -202,6 +202,7 @@
         <xsl:attribute name="name">
           <xsl:value-of select="$name"/>
         </xsl:attribute>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
         
         <xsl:apply-templates>
           <xsl:with-param name="with-namespace-refs"
@@ -209,6 +210,7 @@
           <xsl:with-param name="in-file" select="$in-file"/>
         </xsl:apply-templates>
       </namespace>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
     </xsl:if>
   </xsl:template>
 
@@ -301,6 +303,7 @@
         <xsl:apply-templates select="detaileddescription" mode="passthrough"/>
         <xsl:apply-templates select="inbodydescription" mode="passthrough"/>
       </enum>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
     </xsl:if>
   </xsl:template>
 
@@ -387,6 +390,7 @@
             <xsl:with-param name="header" select="location/attribute::file"/>
           </xsl:call-template>
         </xsl:attribute>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
         
         <xsl:if test="briefdescription/*|detaileddescription/*|inbodydescription/*">
           <xsl:apply-templates select="briefdescription/*" mode="passthrough"/>
@@ -400,6 +404,7 @@
           <xsl:with-param name="in-file" select="location/attribute::file"/>
         </xsl:apply-templates>
       </header>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
     </xsl:if>
   </xsl:template>
 
@@ -518,6 +523,7 @@
           <xsl:apply-templates select="detaileddescription" mode="passthrough"/>
           <xsl:apply-templates select="inbodydescription" mode="passthrough"/>
         </macro>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
       </xsl:when>
 
       <xsl:when test="@kind='function'">
@@ -717,29 +723,35 @@
       <xsl:when test="@kind='public-static-func'">
         <!-- TBD: pass on the fact that these are static functions -->
         <method-group name="public static functions">
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
           <xsl:apply-templates>
             <xsl:with-param name="in-section" select="true()"/>
             <xsl:with-param name="in-file" select="$in-file"/>
           </xsl:apply-templates>
         </method-group>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
       </xsl:when>
       <xsl:when test="@kind='protected-static-func'">
         <!-- TBD: pass on the fact that these are static functions -->
         <method-group name="protected static functions">
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
           <xsl:apply-templates>
             <xsl:with-param name="in-section" select="true()"/>
             <xsl:with-param name="in-file" select="$in-file"/>
           </xsl:apply-templates>
         </method-group>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
       </xsl:when>
       <xsl:when test="@kind='private-static-func'">
         <!-- TBD: pass on the fact that these are static functions -->
         <method-group name="private static functions">
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
           <xsl:apply-templates>
             <xsl:with-param name="in-section" select="true()"/>
             <xsl:with-param name="in-file" select="$in-file"/>
           </xsl:apply-templates>
         </method-group>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
       </xsl:when>
       <xsl:when test="@kind='public-func'">
         <xsl:variable name="members" select="./memberdef"/>
@@ -750,21 +762,25 @@
         </xsl:variable>
         <xsl:if test="$num-internal-only &lt; count($members)">
           <method-group name="public member functions">
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
             <xsl:apply-templates>
               <xsl:with-param name="in-section" select="true()"/>
               <xsl:with-param name="in-file" select="$in-file"/>
             </xsl:apply-templates>
           </method-group>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
           <xsl:apply-templates/>
         </xsl:if>
       </xsl:when>
       <xsl:when test="@kind='protected-func'">
         <method-group name="protected member functions">
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
           <xsl:apply-templates>
             <xsl:with-param name="in-section" select="true()"/>
             <xsl:with-param name="in-file" select="$in-file"/>
           </xsl:apply-templates>
         </method-group>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
         <xsl:apply-templates/>
       </xsl:when>
       <xsl:when test="@kind='private-func'">
@@ -776,22 +792,26 @@
         </xsl:variable>
         <xsl:if test="$num-internal-only &lt; count($members)">
           <method-group name="private member functions">
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
             <xsl:apply-templates>
               <xsl:with-param name="in-section" select="true()"/>
               <xsl:with-param name="in-file" select="$in-file"/>
             </xsl:apply-templates>
           </method-group>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
         </xsl:if>
         <xsl:apply-templates/>
       </xsl:when>
       <xsl:when test="@kind='friend'">
         <xsl:if test="./memberdef/detaileddescription/para or ./memberdef/briefdescription/para">
           <method-group name="friend functions">
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
             <xsl:apply-templates>
               <xsl:with-param name="in-section" select="true()"/>
               <xsl:with-param name="in-file" select="$in-file"/>
             </xsl:apply-templates>
           </method-group>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
         </xsl:if>
       </xsl:when>
       <xsl:when test="@kind='public-static-attrib' or @kind='public-attrib'">
@@ -968,6 +988,7 @@
         
         <type><xsl:apply-templates select="type"/></type>
       </typedef>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
     </xsl:if>
   </xsl:template>
 
@@ -1038,6 +1059,162 @@
     </xsl:if>
   </xsl:template>
 
+ <xsl:template name="function.attributes">
+
+ <!-- argsstring = '(arguments) [= delete] [= default] [constexpt]' -->
+ <xsl:variable name="extra-qualifiers-a">
+ <xsl:if test="contains(argsstring/text(), '(')">
+ <xsl:call-template name="strip-brackets">
+ <xsl:with-param name="text" select="substring-after(argsstring/text(), '(')" />
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:variable>
+ <xsl:variable name="extra-qualifiers">
+ <xsl:if test="$extra-qualifiers-a">
+ <xsl:value-of select="concat(' ', normalize-space($extra-qualifiers-a), ' ')" />
+ </xsl:if>
+ </xsl:variable>
+
+ <!-- CV Qualifiers -->
+ <!-- Plus deleted and defaulted function markers as they're not properly
+ supported in boostbook -->
+
+ <!-- noexcept is complicated because is can have parameters.
+ TODO: should really remove the noexcept parameters before doing
+ anything else. -->
+ <xsl:variable name="noexcept">
+ <xsl:choose>
+ <xsl:when test="contains($extra-qualifiers, ' noexcept(')">
+ <xsl:call-template name="noexcept-if">
+ <xsl:with-param name="condition" select="substring-after($extra-qualifiers, ' noexcept(')" />
+ </xsl:call-template>
+ </xsl:when>
+
+ <xsl:when test="contains($extra-qualifiers, ' BOOST_NOEXCEPT_IF(')">
+ <xsl:call-template name="noexcept-if">
+ <xsl:with-param name="condition" select="substring-after($extra-qualifiers, ' BOOST_NOEXCEPT_IF(')" />
+ </xsl:call-template>
+ </xsl:when>
+
+ <xsl:when test="contains($extra-qualifiers, ' noexcept ') or contains($extra-qualifiers, ' BOOST_NOEXCEPT ')">
+ <xsl:value-of select="'noexcept '" />
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+
+ <!-- Calculate constexpr now, so that we can avoid it getting confused
+ with const -->
+ <xsl:variable name="constexpr" select="
+ contains($extra-qualifiers, ' const expr ') or
+ contains($extra-qualifiers, ' BOOST_CONSTEXPR ') or
+ contains($extra-qualifiers, ' BOOST_CONSTEXPR_OR_CONST ')" />
+
+ <!-- The 'substring' trick includes the string if the condition is true -->
+ <xsl:variable name="cv-qualifiers" select="normalize-space(concat(
+ substring('constexpr ', 1, 999 * $constexpr),
+ substring('const ', 1, 999 * (not($constexpr) and @const='yes')),
+ substring('volatile ', 1, 999 * (@volatile='yes' or contains($extra-qualifiers, ' volatile '))),
+ $noexcept,
+ substring('= delete ', 1, 999 * contains($extra-qualifiers, ' =delete ')),
+ substring('= default ', 1, 999 * contains($extra-qualifiers, ' =default ')),
+ substring('= 0 ', 1, 999 * (@virt = 'pure-virtual')),
+ ''))" />
+
+ <!-- Specifiers -->
+ <xsl:variable name="specifiers" select="normalize-space(concat(
+ substring('explicit ', 1, 999 * (@explicit = 'yes')),
+ substring('virtual ', 1, 999 * (
+ @virtual='yes' or @virt='virtual' or @virt='pure-virtual')),
+ substring('static ', 1, 999 * (@static = 'yes')),
+ ''))" />
+
+ <xsl:if test="$cv-qualifiers">
+ <xsl:attribute name="cv">
+ <xsl:value-of select="$cv-qualifiers" />
+ </xsl:attribute>
+ </xsl:if>
+
+ <xsl:if test="$specifiers">
+ <xsl:attribute name="specifiers">
+ <xsl:value-of select="$specifiers" />
+ </xsl:attribute>
+ </xsl:if>
+
+ </xsl:template>
+
+ <!-- $condition = string after the opening bracket of the condition -->
+ <xsl:template name="noexcept-if">
+ <xsl:param name="condition"/>
+
+ <xsl:variable name="trailing">
+ <xsl:call-template name="strip-brackets">
+ <xsl:with-param name="text" select="$condition" />
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($trailing)">
+ <xsl:value-of select="concat(
+ 'noexcept(',
+ substring($condition, 1, string-length($condition) - string-length($trailing)),
+ ') ')" />
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- Something has gone wrong so: -->
+ <xsl:value-of select="'noexcept(condition) '" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- $text = substring after the opening bracket -->
+ <xsl:template name="strip-brackets">
+ <xsl:param name="text"/>
+
+ <xsl:if test="contains($text, ')')">
+ <xsl:variable name="prefix1" select="substring-before($text, ')')" />
+ <xsl:variable name="prefix2" select="substring($prefix1, 1,
+ string-length(substring-before($prefix1, '(')) +
+ 999 * not(contains($prefix1, '(')))" />
+ <xsl:variable name="prefix3" select="substring($prefix2, 1,
+ string-length(substring-before($prefix2, '&quot;')) +
+ 999 * not(contains($prefix2, '&quot;')))" />
+ <xsl:variable name="prefix" select="substring($prefix3, 1,
+ string-length(substring-before($prefix3, &quot;'&quot;)) +
+ 999 * not(contains($prefix3, &quot;'&quot;)))" />
+
+ <xsl:variable name="prefix-length" select="string-length($prefix)" />
+ <xsl:variable name="char" select="substring($text, $prefix-length + 1, 1)" />
+
+ <xsl:choose>
+ <xsl:when test="$char=')'">
+ <xsl:value-of select="substring($text, $prefix-length + 2)" />
+ </xsl:when>
+ <xsl:when test="$char='('">
+ <xsl:variable name="text2">
+ <xsl:call-template name="strip-brackets">
+ <xsl:with-param name="text" select="substring($text, $prefix-length + 2)" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:call-template name="strip-brackets">
+ <xsl:with-param name="text" select="$text2" />
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="$char=&quot;'&quot;">
+ <!-- Not bothering with escapes, because this is crazy enough as it is -->
+ <xsl:call-template name="strip-brackets">
+ <xsl:with-param name="text" select="substring-after(substring($text, $prefix-length + 2), &quot;'&quot;)" />
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="$char='&quot;'">
+ <!-- Not bothering with escapes, because this is crazy enough as it is -->
+ <xsl:call-template name="strip-brackets">
+ <xsl:with-param name="text" select="substring-after(substring($text, $prefix-length + 2), '&quot;')" />
+ </xsl:call-template>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:template>
+
   <!-- Handle function children -->
   <xsl:template name="function.children">
     <xsl:param name="is-overloaded" select="false()"/>
@@ -1125,6 +1302,7 @@
         </xsl:otherwise>
       </xsl:choose>
     </xsl:if>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
   </xsl:template>
 
   <!-- Emit overload signatures -->
@@ -1164,20 +1342,10 @@
       <xsl:if test="@explicit = 'yes'">
         <xsl:attribute name="specifiers">explicit</xsl:attribute>
       </xsl:if>
- <!-- CV Qualifiers -->
- <xsl:if test="contains(argsstring/text(),'=delete') or contains(argsstring/text(),'=default')">
- <xsl:attribute name="cv">
- <!-- Cheat and add deleted and defaulted function markers to the CV qualifiers -->
- <xsl:if test="contains(argsstring/text(),'=delete')">
- <xsl:text>= delete</xsl:text>
- </xsl:if>
- <xsl:if test="contains(argsstring/text(),'=default')">
- <xsl:text>= default</xsl:text>
- </xsl:if>
- </xsl:attribute>
- </xsl:if>
+ <xsl:call-template name="function.attributes"/>
       <xsl:call-template name="function.children"/>
     </constructor>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
   </xsl:template>
 
   <!-- Handle Destructors -->
@@ -1185,41 +1353,21 @@
     <destructor>
       <xsl:call-template name="function.children"/>
     </destructor>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
   </xsl:template>
 
   <!-- Handle Copy Assignment -->
   <xsl:template name="copy-assignment">
     <copy-assignment>
- <!-- CV Qualifiers -->
- <xsl:if test="not (@const='no' and @volatile='no')">
- <xsl:attribute name="cv">
- <xsl:if test="@const='yes'">
- <xsl:text>const</xsl:text>
- </xsl:if>
- <xsl:if test="@volatile='yes'">
- <xsl:if test="@const='yes'">
- <xsl:text> </xsl:text>
- </xsl:if>
- <xsl:text>volatile</xsl:text>
- </xsl:if>
- <!-- Cheat and add deleted and defaulted function markers to the CV qualifiers -->
- <xsl:if test="contains(argsstring/text(),'=delete')">
- <xsl:if test="@const='yes' or @volatile='yes'">
- <xsl:text> </xsl:text>
- </xsl:if>
- <xsl:text>= delete</xsl:text>
- </xsl:if>
- <xsl:if test="contains(argsstring/text(),'=default')">
- <xsl:if test="@const='yes' or @volatile='yes'">
- <xsl:text> </xsl:text>
- </xsl:if>
- <xsl:text>= default</xsl:text>
- </xsl:if>
- </xsl:attribute>
- </xsl:if>
+ <xsl:call-template name="function.attributes"/>
+ <!-- Return type -->
+ <xsl:element name="type">
+ <xsl:apply-templates select="type"/>
+ </xsl:element>
 
       <xsl:call-template name="function.children"/>
     </copy-assignment>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
   </xsl:template>
 
   <!-- Handle conversion operator -->
@@ -1228,32 +1376,7 @@
       <xsl:attribute name="name">
         <xsl:text>conversion-operator</xsl:text>
       </xsl:attribute>
-
- <!-- CV Qualifiers -->
- <xsl:if test="not (@const='no' and @volatile='no') or contains(argsstring/text(),'=delete')">
- <xsl:attribute name="cv">
- <xsl:if test="@const='yes'">
- <xsl:text>const</xsl:text>
- </xsl:if>
- <xsl:if test="@volatile='yes'">
- <xsl:if test="@const='yes'">
- <xsl:text> </xsl:text>
- </xsl:if>
- <xsl:text>volatile</xsl:text>
- </xsl:if>
- <!-- Cheat and add deleted function markers to the CV qualifiers -->
- <xsl:if test="contains(argsstring/text(),'=delete')">
- <xsl:if test="@const='yes' or @volatile='yes'">
- <xsl:text> </xsl:text>
- </xsl:if>
- <xsl:text>= delete</xsl:text>
- </xsl:if>
- </xsl:attribute>
- </xsl:if>
-
- <xsl:if test="@explicit = 'yes'">
- <xsl:attribute name="specifiers">explicit</xsl:attribute>
- </xsl:if>
+ <xsl:call-template name="function.attributes"/>
 
       <!-- Conversion type -->
       <type>
@@ -1262,6 +1385,7 @@
 
       <xsl:call-template name="function.children"/>
     </method>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
   </xsl:template>
 
   <!-- Handle methods -->
@@ -1270,45 +1394,16 @@
       <xsl:attribute name="name">
         <xsl:value-of select="name/text()"/>
       </xsl:attribute>
-
- <!-- CV Qualifiers -->
- <xsl:if test="not (@const='no' and @volatile='no') or contains(argsstring/text(),'=delete')">
- <xsl:attribute name="cv">
- <xsl:if test="@const='yes'">
- <xsl:text>const</xsl:text>
- </xsl:if>
- <xsl:if test="@volatile='yes'">
- <xsl:if test="@const='yes'">
- <xsl:text> </xsl:text>
- </xsl:if>
- <xsl:text>volatile</xsl:text>
- </xsl:if>
- <!-- Cheat and add deleted function markers to the CV qualifiers -->
- <xsl:if test="contains(argsstring/text(),'=default')">
- <xsl:if test="@const='yes' or @volatile='yes'">
- <xsl:text> </xsl:text>
- </xsl:if>
- <xsl:text>= default</xsl:text>
- </xsl:if>
- </xsl:attribute>
- </xsl:if>
+ <xsl:call-template name="function.attributes"/>
 
       <!-- Return type -->
       <xsl:element name="type">
- <!-- Cheat on virtual and static by dropping them into the type -->
- <xsl:if test="@static='yes'">
- <xsl:text>static </xsl:text>
- </xsl:if>
-
- <xsl:if test="@virtual='yes'">
- <xsl:text>virtual </xsl:text>
- </xsl:if>
-
         <xsl:apply-templates select="type"/>
       </xsl:element>
 
       <xsl:call-template name="function.children"/>
     </method>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
   </xsl:template>
 
   <!-- Handle member variables -->
@@ -1336,6 +1431,7 @@
       <xsl:apply-templates select="detaileddescription" mode="passthrough"/>
       <xsl:apply-templates select="inbodydescription" mode="passthrough"/>
     </data-member>
+ <xsl:text>&#10;</xsl:text><!-- Newline -->
     </xsl:if>
   </xsl:template>
 
@@ -1612,7 +1708,7 @@
 
   <!-- Handle program listings -->
   <xsl:template match="programlisting" mode="passthrough">
- <programlisting>
+ <programlisting language="c++">
       <xsl:apply-templates mode="programlisting"/>
     </programlisting>
   </xsl:template>

Modified: branches/release/tools/boostbook/xsl/fo.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/fo.xsl Sat Nov 16 14:41:12 2013 (r86724)
+++ branches/release/tools/boostbook/xsl/fo.xsl 2013-11-16 15:10:31 EST (Sat, 16 Nov 2013) (r86725)
@@ -216,13 +216,105 @@
       </xsl:choose>
     </fo:list-item-label>
     <fo:list-item-body start-indent="body-start()">
- <xsl:apply-templates select="*[local-name(.)!='label']"/>
+ <xsl:apply-templates select="*[local-name(.)!='label']"/>text-align
     </fo:list-item-body>
   </fo:list-item>
 </xsl:template>
 
+
 <!--
 
+ The following rules apply text coloring to Quickbook items like
+
+ [role blue Some blue text]
+
+ These correspond to an arbitrary list of colors added to the CSS file
+
+ $(BOOST-ROOT)\doc\src\boostbook.css
+
+ and are required for building pdf documentation.
+
+ A more elegant way of doing this is probably possible.
+ Other colors can be added simply by copying these examples.
+-->
+
+<xsl:template match="phrase[@role='red']">
+ <fo:inline color="red">
+ <xsl:apply-templates/>
+ </fo:inline>
+</xsl:template>
+
+<xsl:template match="phrase[@role='blue']">
+ <fo:inline color="blue">
+ <xsl:apply-templates/>
+ </fo:inline>
+</xsl:template>
+
+<xsl:template match="phrase[@role='green']">
+ <fo:inline color="green">
+ <xsl:apply-templates/>
+ </fo:inline>
+</xsl:template>
+<xsl:template match="phrase[@role='lime']">
+ <fo:inline color="lime">
+ <xsl:apply-templates/>
+ </fo:inline>
+</xsl:template>
+<xsl:template match="phrase[@role='navy']">
+ <fo:inline color="navy">
+ <xsl:apply-templates/>
+ </fo:inline>
+</xsl:template>
+<xsl:template match="phrase[@role='yellow']">
+ <fo:inline color="yellow">
+ <xsl:apply-templates/>
+ </fo:inline>
+</xsl:template>
+<xsl:template match="phrase[@role='magenta']">
+ <fo:inline color="magenta">
+ <xsl:apply-templates/>
+ </fo:inline>
+</xsl:template>
+
+<xsl:template match="phrase[@role='indigo']">
+ <fo:inline color="indigo">
+ <xsl:apply-templates/>
+ </fo:inline>
+</xsl:template>
+
+<xsl:template match="phrase[@role='cyan']">
+ <fo:inline color="cyan">
+ <xsl:apply-templates/>
+ </fo:inline>
+</xsl:template>
+
+<xsl:template match="phrase[@role='purple']">
+ <fo:inline color="purple">
+ <xsl:apply-templates/>
+ </fo:inline>
+</xsl:template>
+
+<xsl:template match="phrase[@role='gold']">
+ <fo:inline color="gold">
+ <xsl:apply-templates/>
+ </fo:inline>
+</xsl:template>
+
+<xsl:template match="phrase[@role='silver']">
+ <fo:inline color="silver">
+ <xsl:apply-templates/>
+ </fo:inline>
+</xsl:template>
+
+<xsl:template match="phrase[@role='gray']">
+ <fo:inline color="gray">
+ <xsl:apply-templates/>
+ </fo:inline>
+</xsl:template>
+
+
+ <!--
+
  The following rules apply syntax highlighting to phrases
  that have been appropriately marked up, the highlighting
  used is the same as that used by our CSS style sheets,

Modified: branches/release/tools/boostbook/xsl/html-base.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/html-base.xsl Sat Nov 16 14:41:12 2013 (r86724)
+++ branches/release/tools/boostbook/xsl/html-base.xsl 2013-11-16 15:10:31 EST (Sat, 16 Nov 2013) (r86725)
@@ -232,11 +232,14 @@
               <xsl:value-of
                 select="normalize-space($revision-node/attribute::rev:last-revision)"/>
             </xsl:variable>
- <xsl:if test="string-length($revision-text) &gt; 0">
+ <xsl:if test="string-length($revision-text) &gt; 0 and not($revision-text = '$Date$')">
               <p>
                 <small>
                   <xsl:text>Last revised: </xsl:text>
                   <xsl:choose>
+ <xsl:when test="not(contains($revision-text, '$Date: ')) and not(contains($revision-text, '$Date:: '))">
+ <xsl:value-of select="$revision-text"/>
+ </xsl:when>
                     <xsl:when test="contains($revision-text, '/')">
                       <xsl:call-template name="format.cvs.revision">
                         <xsl:with-param name="text" select="$revision-text"/>

Modified: branches/release/tools/boostbook/xsl/html-help.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/html-help.xsl Sat Nov 16 14:41:12 2013 (r86724)
+++ branches/release/tools/boostbook/xsl/html-help.xsl 2013-11-16 15:10:31 EST (Sat, 16 Nov 2013) (r86725)
@@ -28,106 +28,6 @@
   <xsl:param name="draft.mode">no</xsl:param>
   <xsl:param name="admon.graphics" select="1"/>
 
- <xsl:template name="format.cvs.revision">
- <xsl:param name="text"/>
-
- <!-- Remove the "$Date: " -->
- <xsl:variable name="text.noprefix"
- select="substring-after($text, '$Date: ')"/>
-
- <!-- Grab the year -->
- <xsl:variable name="year" select="substring-before($text.noprefix, '/')"/>
- <xsl:variable name="text.noyear"
- select="substring-after($text.noprefix, '/')"/>
-
- <!-- Grab the month -->
- <xsl:variable name="month" select="substring-before($text.noyear, '/')"/>
- <xsl:variable name="text.nomonth"
- select="substring-after($text.noyear, '/')"/>
-
- <!-- Grab the year -->
- <xsl:variable name="day" select="substring-before($text.nomonth, ' ')"/>
- <xsl:variable name="text.noday"
- select="substring-after($text.nomonth, ' ')"/>
-
- <!-- Get the time -->
- <xsl:variable name="time" select="substring-before($text.noday, ' ')"/>
-
- <xsl:variable name="month.name">
- <xsl:choose>
- <xsl:when test="$month=1">January</xsl:when>
- <xsl:when test="$month=2">February</xsl:when>
- <xsl:when test="$month=3">March</xsl:when>
- <xsl:when test="$month=4">April</xsl:when>
- <xsl:when test="$month=5">May</xsl:when>
- <xsl:when test="$month=6">June</xsl:when>
- <xsl:when test="$month=7">July</xsl:when>
- <xsl:when test="$month=8">August</xsl:when>
- <xsl:when test="$month=9">September</xsl:when>
- <xsl:when test="$month=10">October</xsl:when>
- <xsl:when test="$month=11">November</xsl:when>
- <xsl:when test="$month=12">December</xsl:when>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:value-of select="concat($month.name, ' ', $day, ', ', $year, ' at ',
- $time, ' GMT')"/>
- </xsl:template>
-
-
- <xsl:template name="format.svn.revision">
- <xsl:param name="text"/>
-
- <!-- Remove the "$Date: " or "$Date:: " -->
- <xsl:variable name="text.noprefix"
- select="substring-after($text, ': ')"/>
-
- <!-- Grab the year -->
- <xsl:variable name="year" select="substring-before($text.noprefix, '-')"/>
- <xsl:variable name="text.noyear"
- select="substring-after($text.noprefix, '-')"/>
-
- <!-- Grab the month -->
- <xsl:variable name="month" select="substring-before($text.noyear, '-')"/>
- <xsl:variable name="text.nomonth"
- select="substring-after($text.noyear, '-')"/>
-
- <!-- Grab the year -->
- <xsl:variable name="day" select="substring-before($text.nomonth, ' ')"/>
- <xsl:variable name="text.noday"
- select="substring-after($text.nomonth, ' ')"/>
-
- <!-- Get the time -->
- <xsl:variable name="time" select="substring-before($text.noday, ' ')"/>
- <xsl:variable name="text.notime"
- select="substring-after($text.noday, ' ')"/>
-
- <!-- Get the timezone -->
- <xsl:variable name="timezone" select="substring-before($text.notime, ' ')"/>
-
- <xsl:variable name="month.name">
- <xsl:choose>
- <xsl:when test="$month=1">January</xsl:when>
- <xsl:when test="$month=2">February</xsl:when>
- <xsl:when test="$month=3">March</xsl:when>
- <xsl:when test="$month=4">April</xsl:when>
- <xsl:when test="$month=5">May</xsl:when>
- <xsl:when test="$month=6">June</xsl:when>
- <xsl:when test="$month=7">July</xsl:when>
- <xsl:when test="$month=8">August</xsl:when>
- <xsl:when test="$month=9">September</xsl:when>
- <xsl:when test="$month=10">October</xsl:when>
- <xsl:when test="$month=11">November</xsl:when>
- <xsl:when test="$month=12">December</xsl:when>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:value-of select="concat($month.name, ' ', $day, ', ', $year)"/>
- <xsl:if test="$time != ''">
- <xsl:value-of select="concat(' at ', $time, ' ', $timezone)"/>
- </xsl:if>
- </xsl:template>
-
   <!-- We don't want refentry's to show up in the TOC because they
        will merely be redundant with the synopsis. -->
   <xsl:template match="refentry" mode="toc"/>


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