$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r68575 - in trunk/libs/geometry/doc: . doxy doxy/doxygen_input/groups ref/algorithms reference src/docutils/tools/doxygen_xml2qbk
From: barend.gehrels_at_[hidden]
Date: 2011-01-30 16:53:31
Author: barendgehrels
Date: 2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
New Revision: 68575
URL: http://svn.boost.org/trac/boost/changeset/68575
Log:
Doc update, doc tool update
Added:
   trunk/libs/geometry/doc/reference/area_surveyor.qbk   (contents, props changed)
   trunk/libs/geometry/doc/reference/centroid_exception.qbk   (contents, props changed)
   trunk/libs/geometry/doc/reference/enum.qbk   (contents, props changed)
   trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/for_debugger.ini   (contents, props changed)
Text files modified: 
   trunk/libs/geometry/doc/doxy/Doxyfile                                             |    86 ++--------------                        
   trunk/libs/geometry/doc/doxy/doxygen_input/groups/groups.hpp                      |     1                                         
   trunk/libs/geometry/doc/geometry.qbk                                              |     3                                         
   trunk/libs/geometry/doc/make_qbk.py                                               |    75 ++++++++------                          
   trunk/libs/geometry/doc/quickref.xml                                              |     7                                         
   trunk/libs/geometry/doc/ref/algorithms/centroid.qbk                               |     7                                         
   trunk/libs/geometry/doc/reference.qbk                                             |     9 +                                       
   trunk/libs/geometry/doc/reference/area.qbk                                        |     2                                         
   trunk/libs/geometry/doc/reference/area_huiller.qbk                                |     4                                         
   trunk/libs/geometry/doc/reference/box.qbk                                         |     2                                         
   trunk/libs/geometry/doc/reference/box_range.qbk                                   |     2                                         
   trunk/libs/geometry/doc/reference/centroid.qbk                                    |     8 +                                       
   trunk/libs/geometry/doc/reference/centroid_average.qbk                            |     2                                         
   trunk/libs/geometry/doc/reference/centroid_bashein_detmer.qbk                     |     5                                         
   trunk/libs/geometry/doc/reference/circular_iterator.qbk                           |     2                                         
   trunk/libs/geometry/doc/reference/closing_iterator.qbk                            |     2                                         
   trunk/libs/geometry/doc/reference/closure.qbk                                     |     5                                         
   trunk/libs/geometry/doc/reference/convex_hull_graham_andrew.qbk                   |     2                                         
   trunk/libs/geometry/doc/reference/distance.qbk                                    |     2                                         
   trunk/libs/geometry/doc/reference/distance_cross_track.qbk                        |     6                                         
   trunk/libs/geometry/doc/reference/distance_haversine.qbk                          |     4                                         
   trunk/libs/geometry/doc/reference/distance_projected_point.qbk                    |     6                                         
   trunk/libs/geometry/doc/reference/distance_pythagoras.qbk                         |     4                                         
   trunk/libs/geometry/doc/reference/ever_circling_iterator.qbk                      |     2                                         
   trunk/libs/geometry/doc/reference/exception.qbk                                   |     8 +                                       
   trunk/libs/geometry/doc/reference/identity_view.qbk                               |     2                                         
   trunk/libs/geometry/doc/reference/length.qbk                                      |     2                                         
   trunk/libs/geometry/doc/reference/point.qbk                                       |     2                                         
   trunk/libs/geometry/doc/reference/point_order.qbk                                 |     5                                         
   trunk/libs/geometry/doc/reference/point_xy.qbk                                    |     3                                         
   trunk/libs/geometry/doc/reference/polygon.qbk                                     |     2                                         
   trunk/libs/geometry/doc/reference/segment_range.qbk                               |     2                                         
   trunk/libs/geometry/doc/reference/segment_range_iterator.qbk                      |     2                                         
   trunk/libs/geometry/doc/reference/side_side_by_cross_track.qbk                    |     2                                         
   trunk/libs/geometry/doc/reference/side_side_by_triangle.qbk                       |     2                                         
   trunk/libs/geometry/doc/reference/simplify_douglas_peucker.qbk                    |     2                                         
   trunk/libs/geometry/doc/reference/transform_inverse_transformer.qbk               |     1                                         
   trunk/libs/geometry/doc/reference/transform_map_transformer.qbk                   |     1                                         
   trunk/libs/geometry/doc/reference/within.qbk                                      |    15 ++                                      
   trunk/libs/geometry/doc/reference/within_crossings_multiply.qbk                   |     2                                         
   trunk/libs/geometry/doc/reference/within_franklin.qbk                             |     5                                         
   trunk/libs/geometry/doc/reference/within_winding.qbk                              |     5                                         
   trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp   |    61 +++++++++--                             
   trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.cpp    |     4                                         
   trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp |   139 ++++++++++++++++++++++++----            
   trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp   |   198 ++++++++++++++++++++++++++++----------- 
   46 files changed, 465 insertions(+), 248 deletions(-)
Modified: trunk/libs/geometry/doc/doxy/Doxyfile
==============================================================================
--- trunk/libs/geometry/doc/doxy/Doxyfile	(original)
+++ trunk/libs/geometry/doc/doxy/Doxyfile	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -80,11 +80,12 @@
                         details_calc{1}="The free function \1 calculates the \1 of a geometry" \
                         details_calc2{2}="The free function \1 calculates the \2 of two geometries" \
                         details_calc2{1}="The free function \1 calculates the \1 of two geometries" \
+			details_check12{2}="The free function \1 checks if the first geometry \2 the second geometry" \
                         details_macro{2}="The macro \1 registers a \2 such that it is recognized by Boost.Geometry and that Boost.Geometry functionality can used with the specified point type" \
                         details_macro_const="The const version registers only read access to the fields, the point type is therefore read-only" \
                         details_macro_getset="The get/set version registers get and set methods separately and can be used for classes with protected member variables and get/set methods to change coordinates" \
                         details_default_strategy="It uses the default strategy, based on the coordinate system of the geometry." \
-			details_strategy_reasons="Reasons to specify a strategy include: use another coordinate system for calculations; construct the strategy beforehand (e.g. with the radius of the Earth); select a strategy when there are more than one available for a calculation (e.g. distance over the Earth)" \
+			details_strategy_reasons="Reasons to specify a strategy include: use another coordinate system for calculations; construct the strategy beforehand (e.g. with the radius of the Earth); select a strategy when there are more than one available for a calculation." \
                         details_make{1}="This version with the make_ prefix returns the \1, and a template parameter must therefore be specified in the call." \
                         details_inserter{1}="This version with the _inserter suffix outputs the \1 to an output iterator, and a template parameter must therefore be specified in the call." \
                         return_calc{1}="The calculated \1" \
@@ -249,37 +250,7 @@
 ENUM_VALUES_PER_LINE   = 4
 GENERATE_TREEVIEW      = NO
 TREEVIEW_WIDTH         = 250
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-GENERATE_LATEX         = NO
-LATEX_OUTPUT           = latex
-LATEX_CMD_NAME         = latex
-MAKEINDEX_CMD_NAME     = makeindex
-COMPACT_LATEX          = NO
-PAPER_TYPE             = a4wide
-EXTRA_PACKAGES         = 
-LATEX_HEADER           = 
-PDF_HYPERLINKS         = YES
-USE_PDFLATEX           = YES
-LATEX_BATCHMODE        = NO
-LATEX_HIDE_INDICES     = NO
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-GENERATE_RTF           = NO
-RTF_OUTPUT             = rtf
-COMPACT_RTF            = NO
-RTF_HYPERLINKS         = NO
-RTF_STYLESHEET_FILE    = 
-RTF_EXTENSIONS_FILE    = 
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-GENERATE_MAN           = NO
-MAN_OUTPUT             = man
-MAN_EXTENSION          = .3
-MAN_LINKS              = NO
+
 #---------------------------------------------------------------------------
 # configuration options related to the XML output
 #---------------------------------------------------------------------------
@@ -288,17 +259,17 @@
 XML_SCHEMA             = 
 XML_DTD                = 
 XML_PROGRAMLISTING     = NO
+
 #---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
+# Configuration options turned off
 #---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+GENERATE_MAN           = NO
+GENERATE_RTF           = NO
 GENERATE_AUTOGEN_DEF   = NO
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
 GENERATE_PERLMOD       = NO
-PERLMOD_LATEX          = NO
-PERLMOD_PRETTY         = YES
-PERLMOD_MAKEVAR_PREFIX = 
+
+
 #---------------------------------------------------------------------------
 # Configuration options related to the preprocessor   
 #---------------------------------------------------------------------------
@@ -321,41 +292,8 @@
                          DOXYGEN_NO_SPECIALIZATIONS
 EXPAND_AS_DEFINED      = 
 SKIP_FUNCTION_MACROS   = YES
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references   
-#---------------------------------------------------------------------------
-TAGFILES               = 
-GENERATE_TAGFILE       = 
-ALLEXTERNALS           = NO
-EXTERNAL_GROUPS        = YES
-PERL_PATH              = /usr/bin/perl
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
-#---------------------------------------------------------------------------
-CLASS_DIAGRAMS         = NO
-MSCGEN_PATH            = 
-HIDE_UNDOC_RELATIONS   = YES
-HAVE_DOT               = NO
-CLASS_GRAPH            = YES
-COLLABORATION_GRAPH    = YES
-GROUP_GRAPHS           = YES
-UML_LOOK               = NO
-TEMPLATE_RELATIONS     = NO
-INCLUDE_GRAPH          = YES
-INCLUDED_BY_GRAPH      = YES
-CALL_GRAPH             = NO
-CALLER_GRAPH           = NO
-GRAPHICAL_HIERARCHY    = YES
-DIRECTORY_GRAPH        = YES
-DOT_IMAGE_FORMAT       = png
-DOT_PATH               = 
-DOTFILE_DIRS           = 
-DOT_GRAPH_MAX_NODES    = 50
-MAX_DOT_GRAPH_DEPTH    = 0
-DOT_TRANSPARENT        = YES
-DOT_MULTI_TARGETS      = NO
-GENERATE_LEGEND        = YES
-DOT_CLEANUP            = YES
+
+
 #---------------------------------------------------------------------------
 # Configuration::additions related to the search engine   
 #---------------------------------------------------------------------------
Modified: trunk/libs/geometry/doc/doxy/doxygen_input/groups/groups.hpp
==============================================================================
--- trunk/libs/geometry/doc/doxy/doxygen_input/groups/groups.hpp	(original)
+++ trunk/libs/geometry/doc/doxy/doxygen_input/groups/groups.hpp	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -27,6 +27,7 @@
 \defgroup difference difference: difference of two geometries
 \defgroup disjoint disjoint: detect if geometries are not spatially related
 \defgroup distance distance: calculate distance between two geometries
+\defgroup enum enum: enumerations
 \defgroup envelope envelope: calculate envelope (minimum bounding rectangle) of a geometry
 \defgroup equals equals: detect if two geometries are spatially equal
 \defgroup exterior_ring exterior_ring: exterior_ring
Modified: trunk/libs/geometry/doc/geometry.qbk
==============================================================================
--- trunk/libs/geometry/doc/geometry.qbk	(original)
+++ trunk/libs/geometry/doc/geometry.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -41,7 +41,8 @@
 [def __point__  Point]
 [def __linestring__  Linestring]
 [def __polygon__  Polygon]
-[def __multi_polygon__  Multi-polygon]
+[def __multi_point__  Multi point]
+[def __multi_polygon__  Multi Polygon]
 [def __range__  Rangelike (linestring, ring)]
 [def __other__  Other geometries]
 
Modified: trunk/libs/geometry/doc/make_qbk.py
==============================================================================
--- trunk/libs/geometry/doc/make_qbk.py	(original)
+++ trunk/libs/geometry/doc/make_qbk.py	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -7,7 +7,7 @@
 # 
 #  Use, modification and distribution is subject to 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)9
+#  http://www.boost.org/LICENSE_1_0.txt)
 # ============================================================================
 
 import os, sys
@@ -29,7 +29,10 @@
 def group_to_quickbook(section):
     os.system(cmd % ("group__" + section.replace("_", "__"), section))
 
-def model_to_quickbook(classname, section):
+def model_to_quickbook(section):
+    os.system(cmd % ("classboost_1_1geometry_1_1model_1_1" + section.replace("_", "__"), section))
+
+def model_to_quickbook2(classname, section):
     os.system(cmd % ("classboost_1_1geometry_1_1model_1_1" + classname, section))
 
 def struct_to_quickbook(section):
@@ -59,19 +62,27 @@
     , "length", "num_geometries", "num_interior_rings", "num_points" 
     , "overlaps", "perimeter", "reverse", "simplify", "sym_difference" 
     , "transform", "union", "unique", "within"]
+
 access_functions = ["get", "set", "exterior_ring", "interior_rings"
     , "num_points", "num_interior_rings", "num_geometries"]
     
+coordinate_systems = ["cartesian", "geographic", "polar", "spherical"]
+
 core = ["closure", "coordinate_system", "coordinate_type", "cs_tag"
     , "dimension", "exception", "geometry_id", "interior_type"
     , "is_areal", "is_linear", "is_multi", "is_radian", "point_order"
     , "point_type", "ring_type", "tag", "topological_dimension" ]
 
+exceptions = ["exception", "centroid_exception"];
+
 iterators = ["box_iterator", "circular_iterator", "closing_iterator"
     , "ever_circling_iterator", "segment_range_iterator"]
 
+models = ["point", "linestring", "box"
+    , "polygon", "segment", "ring"
+    , "multi_linestring", "multi_point", "multi_polygon", "referring_segment"]
+
 ranges = ["box_range", "segment_range"];
-views = ["closeable_view", "reversible_view", "identity_view"]
 
 strategies = ["distance::pythagoras", "distance::haversine"
     , "distance::cross_track", "distance::projected_point"
@@ -86,49 +97,45 @@
     , "transform::translate_transformer", "transform::ublas_transformer"
     ]
     
-coordinate_systems = ["cartesian", "geographic", "polar", "spherical"]
+views = ["closeable_view", "reversible_view", "identity_view"]
 
 
 
-for a in algorithms:
-    group_to_quickbook(a)
+for i in algorithms:
+    group_to_quickbook(i)
     
-for a in access_functions:
-    group_to_quickbook(a)
+for i in access_functions:
+    group_to_quickbook(i)
     
-for a in core:
-    struct_to_quickbook(a)
+for i in coordinate_systems:
+    cs_to_quickbook(i)
 
-for a in iterators:
-    struct_to_quickbook(a)
+for i in core:
+    struct_to_quickbook(i)
 
-for a in views:
-    struct_to_quickbook(a)
-    
-for a in ranges:
-    class_to_quickbook(a)
+for i in exceptions:
+    class_to_quickbook(i)
+
+for i in iterators:
+    struct_to_quickbook(i)
+
+for i in models:
+    model_to_quickbook(i)
+   
+for i in ranges:
+    class_to_quickbook(i)
 
-for a in strategies:
-    strategy_to_quickbook(a)
+for i in strategies:
+    strategy_to_quickbook(i)
 
-for a in coordinate_systems:
-    cs_to_quickbook(a)
+for i in views:
+    struct_to_quickbook(i)
     
 
+model_to_quickbook2("d2_1_1point__xy", "point_xy")
+
 group_to_quickbook("arithmetic")
 group_to_quickbook("register")
-
-model_to_quickbook("point", "point")
-model_to_quickbook("d2_1_1point__xy", "point_xy")
-model_to_quickbook("linestring", "linestring")
-model_to_quickbook("box", "box")
-model_to_quickbook("polygon", "polygon")
-model_to_quickbook("segment", "segment")
-model_to_quickbook("multi__linestring", "multi_linestring")
-model_to_quickbook("multi__point", "multi_point")
-model_to_quickbook("multi__polygon", "multi_polygon")
-model_to_quickbook("ring", "ring")
-model_to_quickbook("referring__segment", "referring_segment")
-
+group_to_quickbook("enum")
 
 os.system("bjam") 
Modified: trunk/libs/geometry/doc/quickref.xml
==============================================================================
--- trunk/libs/geometry/doc/quickref.xml	(original)
+++ trunk/libs/geometry/doc/quickref.xml	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -168,8 +168,8 @@
     </simplelist>
     <bridgehead renderas="sect3">Classes</bridgehead>
     <simplelist type="vert" columns="1">
-     <member><link linkend="geometry.reference.exception">exception</link></member>
-     <member> <link linkend="geometry.reference.centroid_exception">centroid_exception</link></member>
+     <member><link linkend="geometry.reference.exceptions.exception">exception</link></member>
+     <member> <link linkend="geometry.reference.exceptions.centroid_exception">centroid_exception</link></member>
     </simplelist>
    </entry>
   </row>
@@ -198,7 +198,8 @@
     <simplelist type="vert" columns="1">
     <member><link linkend="geometry.reference.max_corner">max_corner</link></member>
     <member><link linkend="geometry.reference.min_corner">min_corner</link></member>
-    <member><link linkend="geometry.reference.order_selector">order_selector</link></member>
+    <member><link linkend="geometry.reference.enumerations.order_selector">order_selector</link></member>
+    <member><link linkend="geometry.reference.enumerations.closure_selector">closure_selector</link></member>
     </simplelist>
    </entry>
    <entry valign="top">
Modified: trunk/libs/geometry/doc/ref/algorithms/centroid.qbk
==============================================================================
--- trunk/libs/geometry/doc/ref/algorithms/centroid.qbk	(original)
+++ trunk/libs/geometry/doc/ref/algorithms/centroid.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -13,12 +13,13 @@
 [heading Behavior]
 [table
 [[Case] [Behavior] ]
-[[__0dim__][Calculates centroid]]
+[[__point__][Returns the point itself as the centroid]]
+[[__multi_point__][Calculates centroid]]
 [[__1dim__][Calculates centroid]]
 [[__2dim__][Calculates centroid]]
-[[__empty__][Throws a centroid_exception]]
+[[__empty__][Throws a [link geometry.reference.exceptions.centroid_exception centroid_exception] ]]
 ]
 
-
 [heading Complexity]
 Linear
+
Modified: trunk/libs/geometry/doc/reference.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference.qbk	(original)
+++ trunk/libs/geometry/doc/reference.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -261,5 +261,14 @@
 [include reference/arithmetic.qbk]
 [endsect] 
 
+[section:exceptions Exceptions]
+[include reference/exception.qbk]
+[include reference/centroid_exception.qbk]
+[endsect] 
+
+[section:enumerations Enumerations]
+[include reference/enum.qbk]
+[endsect] 
+
 
 [endsect] [/reference]
Modified: trunk/libs/geometry/doc/reference/area.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/area.qbk	(original)
+++ trunk/libs/geometry/doc/reference/area.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -18,7 +18,7 @@
 Calculates the area of a geometry using the specified strategy. 
 
 [heading Description]
-The free function area calculates the area of a geometry using the specified strategy. Reasons to specify a strategy include: use another coordinate system for calculations; construct the strategy beforehand (e.g. with the radius of the Earth); select a strategy when there are more than one available for a calculation (e.g. distance over the Earth) 
+The free function area calculates the area of a geometry using the specified strategy. Reasons to specify a strategy include: use another coordinate system for calculations; construct the strategy beforehand (e.g. with the radius of the Earth); select a strategy when there are more than one available for a calculation. 
 
 [heading Synopsis]
 ``template<typename Geometry, typename Strategy>
Modified: trunk/libs/geometry/doc/reference/area_huiller.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/area_huiller.qbk	(original)
+++ trunk/libs/geometry/doc/reference/area_huiller.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -47,7 +47,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``void apply (PointOfSegment const &p1, PointOfSegment const &p2, excess_sum &state) const ``
 
 ] [] [[* PointOfSegment const &]: ['p1]:  
@@ -79,7 +79,7 @@
 
 
 [heading See also]
-[link geometry.reference.algorithms.area.area_2_with_strategy area]
+[link geometry.reference.algorithms.area.area_2_with_strategy area (with strategy)]
 
 [endsect]
 
Added: trunk/libs/geometry/doc/reference/area_surveyor.qbk
==============================================================================
--- (empty file)
+++ trunk/libs/geometry/doc/reference/area_surveyor.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -0,0 +1,70 @@
+[/============================================================================
+  Boost.Geometry (aka GGL, Generic Geometry Library)
+
+  Copyright (c) 2009-2011 Barend Gehrels, Geodan, Amsterdam, the Netherlands.
+  Copyright (c) 2009-2011 Mateusz Loskot (mateusz_at_[hidden])
+  Copyright (c) 2009-2011 Bruno Lalande, Paris, France.
+
+  Use, modification and distribution is subject to 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)
+=============================================================================/]
+
+
+[/ Generated by doxygen_xml2qbk, don't change, will be overwritten automatically]
+[/ Generated from doxy/doxygen_output/xml/classboost_1_1geometry_1_1strategy_1_1area_1_1surveyor.xml]
+[section:strategy_area_surveyor strategy::area::surveyor]
+
+Area calculation for cartesian points. 
+
+[heading Description]
+Calculates area using the Surveyor's formula, a well-known triangulation algorithm 
+
+[heading Synopsis]
+``template<typename PointOfSegment, typename CalculationType>
+class strategy::area::surveyor
+{
+  // ...
+};
+``
+
+[heading Template parameter(s)]
+[table
+[[Parameter] [Default] [Description]]
+[[typename PointOfSegment] [] [segment point type ]]
+[[typename CalculationType] [void] [numeric type for calculation (e.g. high precision); if [*void] then it is extracted automatically from the coordinate type and (if necessary) promoted to floating point]]
+]
+
+[heading Member Function(s)]
+[table
+[[Function] [Description] [Parameters]  [Returns]]
+[[``void apply (PointOfSegment const &p1, PointOfSegment const &p2, summation &state)``
+
+] [] [[* PointOfSegment const &]: ['p1]:  
+
+[* PointOfSegment const &]: ['p2]:  
+
+[* summation &]: ['state]:  
+
+
+
+
+]]
+[[``return_type result (summation const &state)``
+
+] [] [[* summation const &]: ['state]:  
+
+
+
+
+]]
+]
+
+[heading Header]
+`#include <boost/geometry/strategies/cartesian/area_surveyor.hpp>`
+
+[heading See also]
+[link geometry.reference.algorithms.area.area_2_with_strategy area (with strategy)]
+
+[endsect]
+
Modified: trunk/libs/geometry/doc/reference/box.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/box.qbk	(original)
+++ trunk/libs/geometry/doc/reference/box.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -57,7 +57,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``Point const & min_corner () const ``
 
 ] [] [
Modified: trunk/libs/geometry/doc/reference/box_range.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/box_range.qbk	(original)
+++ trunk/libs/geometry/doc/reference/box_range.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -46,7 +46,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``const_iterator begin () const ``
 
 ] [] [
Modified: trunk/libs/geometry/doc/reference/centroid.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/centroid.qbk	(original)
+++ trunk/libs/geometry/doc/reference/centroid.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -52,7 +52,7 @@
 Calculates the centroid of a geometry using the specified strategy. 
 
 [heading Description]
-The free function centroid calculates the geometric center (or: center of mass) of a geometry 
+The free function centroid calculates the geometric center (or: center of mass) of a geometry. Reasons to specify a strategy include: use another coordinate system for calculations; construct the strategy beforehand (e.g. with the radius of the Earth); select a strategy when there are more than one available for a calculation. 
 
 [heading Synopsis]
 ``template<typename Geometry, typename Point, typename Strategy>
@@ -78,6 +78,8 @@
 `#include <boost/geometry/algorithms/centroid.hpp>`
 
 [include ref/algorithms/centroid.qbk]
+[heading Available Strategies]
+* [link geometry.reference.strategies.strategy_centroid_bashein_detmer Bashein Detmer (cartesian)]
 
 
 [endsect]
@@ -87,7 +89,7 @@
 Calculates the centroid of a geometry using the specified strategy. 
 
 [heading Description]
-The free function centroid calculates the geometric center (or: center of mass) of a geometry. This version with the make_ prefix returns the centroid, and a template parameter must therefore be specified in the call.. 
+The free function centroid calculates the geometric center (or: center of mass) of a geometry. This version with the make_ prefix returns the centroid, and a template parameter must therefore be specified in the call.. Reasons to specify a strategy include: use another coordinate system for calculations; construct the strategy beforehand (e.g. with the radius of the Earth); select a strategy when there are more than one available for a calculation. 
 
 [heading Synopsis]
 ``template<typename Point, typename Geometry, typename Strategy>
@@ -116,6 +118,8 @@
 `#include <boost/geometry/algorithms/centroid.hpp>`
 
 [include ref/algorithms/centroid.qbk]
+[heading Available Strategies]
+* [link geometry.reference.strategies.strategy_centroid_bashein_detmer Bashein Detmer (cartesian)]
 
 
 [endsect]
Modified: trunk/libs/geometry/doc/reference/centroid_average.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/centroid_average.qbk	(original)
+++ trunk/libs/geometry/doc/reference/centroid_average.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -34,7 +34,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``void apply (Point const &p, sum &state)``
 
 ] [] [[* Point const &]: ['p]:  
Modified: trunk/libs/geometry/doc/reference/centroid_bashein_detmer.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/centroid_bashein_detmer.qbk	(original)
+++ trunk/libs/geometry/doc/reference/centroid_bashein_detmer.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -44,7 +44,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``void apply (PointOfSegment const &p1, PointOfSegment const &p2, sums &state)``
 
 ] [] [[* PointOfSegment const &]: ['p1]:  
@@ -72,5 +72,8 @@
 [heading Header]
 `#include <boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp>`
 
+[heading See also]
+[link geometry.reference.algorithms.centroid.centroid_3_with_strategy centroid (with strategy)]
+
 [endsect]
 
Added: trunk/libs/geometry/doc/reference/centroid_exception.qbk
==============================================================================
--- (empty file)
+++ trunk/libs/geometry/doc/reference/centroid_exception.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -0,0 +1,66 @@
+[/============================================================================
+  Boost.Geometry (aka GGL, Generic Geometry Library)
+
+  Copyright (c) 2009-2011 Barend Gehrels, Geodan, Amsterdam, the Netherlands.
+  Copyright (c) 2009-2011 Mateusz Loskot (mateusz_at_[hidden])
+  Copyright (c) 2009-2011 Bruno Lalande, Paris, France.
+
+  Use, modification and distribution is subject to 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)
+=============================================================================/]
+
+
+[/ Generated by doxygen_xml2qbk, don't change, will be overwritten automatically]
+[/ Generated from doxy/doxygen_output/xml/classboost_1_1geometry_1_1centroid__exception.xml]
+[section:centroid_exception centroid_exception]
+
+Centroid Exception. 
+
+[heading Description]
+The centroid_exception is thrown if the free centroid function is called with geometries for which the centroid cannot be calculated. For example: a linestring without points, a polygon without points, an empty multi-geometry.  
+
+[heading Synopsis]
+``class centroid_exception
+      : public exception
+{
+  // ...
+};
+``
+
+[heading Constructor(s)]
+[table
+[[Function] [Description] [Parameters] ]
+[[``centroid_exception ()``
+
+] [] [
+
+
+]]
+]
+
+[heading Member Function(s)]
+[table
+[[Function] [Description] [Parameters]  [Returns]]
+[[``char const * what () const ``
+
+] [] [
+
+
+]]
+]
+
+[heading Header]
+Either
+
+`#include <boost/geometry/geometry.hpp>`
+
+Or
+
+`#include <boost/geometry/algorithms/centroid.hpp>`
+
+[heading See also]
+* [link geometry.reference.algorithms.centroid the centroid function]
+
+[endsect]
+
Modified: trunk/libs/geometry/doc/reference/circular_iterator.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/circular_iterator.qbk	(original)
+++ trunk/libs/geometry/doc/reference/circular_iterator.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -58,7 +58,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``void moveto (Iterator it)``
 
 ] [] [[* Iterator]: ['it]:  
Modified: trunk/libs/geometry/doc/reference/closing_iterator.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/closing_iterator.qbk	(original)
+++ trunk/libs/geometry/doc/reference/closing_iterator.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -62,7 +62,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``closing_iterator< Range > & operator= (closing_iterator< Range > const &source)``
 
 ] [] [[* < Range > const &]: ['source]:  
Modified: trunk/libs/geometry/doc/reference/closure.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/closure.qbk	(original)
+++ trunk/libs/geometry/doc/reference/closure.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -15,7 +15,7 @@
 [/ Generated from doxy/doxygen_output/xml/structboost_1_1geometry_1_1closure.xml]
 [section:closure closure]
 
-Meta-function which defines closure of any geometry. 
+Meta-function which defines closure of a geometry type. 
 
 [heading Synopsis]
 ``template<typename Geometry>
@@ -34,5 +34,8 @@
 [heading Header]
 `#include <boost/geometry/core/closure.hpp>`
 
+[heading See also]
+[link geometry.reference.enumerations.order_selector The order_selector enumeration]
+
 [endsect]
 
Modified: trunk/libs/geometry/doc/reference/convex_hull_graham_andrew.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/convex_hull_graham_andrew.qbk	(original)
+++ trunk/libs/geometry/doc/reference/convex_hull_graham_andrew.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -34,7 +34,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``void apply (InputGeometry const &geometry, partitions &state) const ``
 
 ] [] [[* InputGeometry const &]: ['geometry]:  
Modified: trunk/libs/geometry/doc/reference/distance.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/distance.qbk	(original)
+++ trunk/libs/geometry/doc/reference/distance.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -82,7 +82,7 @@
 Calculate the distance of two geometries using the specified strategy. 
 
 [heading Description]
-The free function area calculates the area of a geometry. using the specified strategy. Reasons to specify a strategy include: use another coordinate system for calculations; construct the strategy beforehand (e.g. with the radius of the Earth); select a strategy when there are more than one available for a calculation (e.g. distance over the Earth)
+The free function area calculates the area of a geometry. using the specified strategy. Reasons to specify a strategy include: use another coordinate system for calculations; construct the strategy beforehand (e.g. with the radius of the Earth); select a strategy when there are more than one available for a calculation.
 
 [heading Synopsis]
 ``template<typename Geometry1, typename Geometry2, typename Strategy>
Modified: trunk/libs/geometry/doc/reference/distance_cross_track.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/distance_cross_track.qbk	(original)
+++ trunk/libs/geometry/doc/reference/distance_cross_track.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -34,7 +34,7 @@
 [[typename Point] [] [point type ]]
 [[typename PointOfSegment] [Point] [segment point type ]]
 [[typename CalculationType] [void] [numeric type for calculation (e.g. high precision); if [*void] then it is extracted automatically from the coordinate type and (if necessary) promoted to floating point ]]
-[[typename Strategy] [typename services::default_strategy<point_tag, Point>::type] [strategy, underlying point-point distance strategy, defaults to haversine]]
+[[typename Strategy] [typename services::default_strategy<point_tag, Point>::type] [underlying point-point distance strategy, defaults to haversine]]
 ]
 
 [heading Constructor(s)]
@@ -66,7 +66,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``return_type apply (Point const &p, PointOfSegment const &sp1, PointOfSegment const &sp2) const ``
 
 ] [] [[* Point const &]: ['p]:  
@@ -91,7 +91,7 @@
 `#include <boost/geometry/strategies/spherical/distance_cross_track.hpp>`
 
 [heading See also]
-[link geometry.reference.algorithms.distance.distance_3_with_strategy distance]
+[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
 
 [endsect]
 
Modified: trunk/libs/geometry/doc/reference/distance_haversine.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/distance_haversine.qbk	(original)
+++ trunk/libs/geometry/doc/reference/distance_haversine.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -48,7 +48,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``calculation_type apply (Point1 const &p1, Point2 const &p2) const ``
 
 ] [applies the distance calculation ] [[* Point1 const &]: ['p1]:  first point 
@@ -77,7 +77,7 @@
 `#include <boost/geometry/strategies/spherical/distance_haversine.hpp>`
 
 [heading See also]
-[link geometry.reference.algorithms.distance.distance_3_with_strategy distance]
+[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
 
 [endsect]
 
Modified: trunk/libs/geometry/doc/reference/distance_projected_point.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/distance_projected_point.qbk	(original)
+++ trunk/libs/geometry/doc/reference/distance_projected_point.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -34,12 +34,12 @@
 [[typename Point] [] [point type ]]
 [[typename PointOfSegment] [Point] [segment point type ]]
 [[typename CalculationType] [void] [numeric type for calculation (e.g. high precision); if [*void] then it is extracted automatically from the coordinate type and (if necessary) promoted to floating point ]]
-[[typename Strategy] [pythagoras<Point, PointOfSegment, CalculationType>] [strategy, underlying point-point distance strategy ]]
+[[typename Strategy] [pythagoras<Point, PointOfSegment, CalculationType>] [underlying point-point distance strategy ]]
 ]
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``calculation_type apply (Point const &p, PointOfSegment const &p1, PointOfSegment const &p2) const ``
 
 ] [] [[* Point const &]: ['p]:  
@@ -58,7 +58,7 @@
 `#include <boost/geometry/strategies/cartesian/distance_projected_point.hpp>`
 
 [heading See also]
-[link geometry.reference.algorithms.distance.distance_3_with_strategy distance]
+[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
 
 [endsect]
 
Modified: trunk/libs/geometry/doc/reference/distance_pythagoras.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/distance_pythagoras.qbk	(original)
+++ trunk/libs/geometry/doc/reference/distance_pythagoras.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -35,7 +35,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``calculation_type apply (Point1 const &p1, Point2 const &p2)``
 
 ] [applies the distance calculation using pythagoras ] [[* Point1 const &]: ['p1]:  first point 
@@ -57,7 +57,7 @@
 [heading Notes]
 [note Can be used for points with two, three or more dimensions]
 [heading See also]
-[link geometry.reference.algorithms.distance.distance_3_with_strategy distance]
+[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
 
 [endsect]
 
Added: trunk/libs/geometry/doc/reference/enum.qbk
==============================================================================
--- (empty file)
+++ trunk/libs/geometry/doc/reference/enum.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -0,0 +1,73 @@
+[/============================================================================
+  Boost.Geometry (aka GGL, Generic Geometry Library)
+
+  Copyright (c) 2009-2011 Barend Gehrels, Geodan, Amsterdam, the Netherlands.
+  Copyright (c) 2009-2011 Mateusz Loskot (mateusz_at_[hidden])
+  Copyright (c) 2009-2011 Bruno Lalande, Paris, France.
+
+  Use, modification and distribution is subject to 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)
+=============================================================================/]
+
+
+[/ Generated by doxygen_xml2qbk, don't change, will be overwritten automatically]
+[/ Generated from doxy/doxygen_output/xml/group__enum.xml]
+[section:closure_selector closure_selector]
+
+Enumerates options for defining if polygons are open or closed. 
+
+[heading Description]
+The enumeration closure_selector describes options for if a polygon is open or closed. In a closed polygon the very first point (per ring) should be equal to the very last point. The specific closing property of a polygon type is defined by the closure metafunction. The closure metafunction defines a value, which is one of the values enumerated in the closure_selector
+
+[heading Synopsis]
+``enum closure_selector {open = 0, closed = 1, closure_undertermined = -1};``
+
+[heading Values]
+
+[table
+[[Value] [Description] ]
+[[open] []]
+[[closed] []]
+[[closure_undertermined] []]
+]
+
+
+[heading Header]
+`#include <boost/geometry/core/closure.hpp>`
+
+[heading See also]
+[link geometry.reference.core.closure The closure metafunction]
+
+
+[endsect]
+
+[section:order_selector order_selector]
+
+Enumerates options for the order of points within polygons. 
+
+[heading Description]
+The enumeration order_selector describes options for the order of points within a polygon. Polygons can be ordered either clockwise or counterclockwise. The specific order of a polygon type is defined by the point_order metafunction. The point_order metafunction defines a value, which is one of the values enumerated in the order_selector
+
+[heading Synopsis]
+``enum order_selector {clockwise = 1, counterclockwise = 2, order_undetermined = 0};``
+
+[heading Values]
+
+[table
+[[Value] [Description] ]
+[[clockwise] [Points are ordered clockwise. ]]
+[[counterclockwise] [Points are ordered counter clockwise. ]]
+[[order_undetermined] [Points might be stored in any order, the algorithm will find out (not yet supported). ]]
+]
+
+
+[heading Header]
+`#include <boost/geometry/core/point_order.hpp>`
+
+[heading See also]
+[link geometry.reference.core.point_order The point_order metafunction]
+
+
+[endsect]
+
Modified: trunk/libs/geometry/doc/reference/ever_circling_iterator.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/ever_circling_iterator.qbk	(original)
+++ trunk/libs/geometry/doc/reference/ever_circling_iterator.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -64,7 +64,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``void moveto (Iterator it)``
 
 ] [] [[* Iterator]: ['it]:  
Modified: trunk/libs/geometry/doc/reference/exception.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/exception.qbk	(original)
+++ trunk/libs/geometry/doc/reference/exception.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -12,13 +12,17 @@
 
 
 [/ Generated by doxygen_xml2qbk, don't change, will be overwritten automatically]
-[/ Generated from doxy/doxygen_output/xml/structboost_1_1geometry_1_1exception.xml]
+[/ Generated from doxy/doxygen_output/xml/classboost_1_1geometry_1_1exception.xml]
 [section:exception exception]
 
-Base exception class for GGL. 
+Base exception class for Boost.Geometry algorithms. 
+
+[heading Description]
+This class is never thrown. All exceptions thrown in Boost.Geometry are derived from exception, so it might be convenient to catch it. 
 
 [heading Synopsis]
 ``class exception
+      : public std::exception
 {
   // ...
 };
Modified: trunk/libs/geometry/doc/reference/identity_view.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/identity_view.qbk	(original)
+++ trunk/libs/geometry/doc/reference/identity_view.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -46,7 +46,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``const_iterator begin () const ``
 
 ] [] [
Modified: trunk/libs/geometry/doc/reference/length.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/length.qbk	(original)
+++ trunk/libs/geometry/doc/reference/length.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -18,7 +18,7 @@
 Calculates the length of a geometry using the specified strategy. 
 
 [heading Description]
-The free function length calculates the length (the sum of distances between consecutive points) of a geometry using the specified strategy. Reasons to specify a strategy include: use another coordinate system for calculations; construct the strategy beforehand (e.g. with the radius of the Earth); select a strategy when there are more than one available for a calculation (e.g. distance over the Earth) 
+The free function length calculates the length (the sum of distances between consecutive points) of a geometry using the specified strategy. Reasons to specify a strategy include: use another coordinate system for calculations; construct the strategy beforehand (e.g. with the radius of the Earth); select a strategy when there are more than one available for a calculation. 
 
 [heading Synopsis]
 ``template<typename Geometry, typename Strategy>
Modified: trunk/libs/geometry/doc/reference/point.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/point.qbk	(original)
+++ trunk/libs/geometry/doc/reference/point.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -64,7 +64,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``template<std::size_t K>
 CoordinateType const & get () const ``
 
Modified: trunk/libs/geometry/doc/reference/point_order.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/point_order.qbk	(original)
+++ trunk/libs/geometry/doc/reference/point_order.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -15,7 +15,7 @@
 [/ Generated from doxy/doxygen_output/xml/structboost_1_1geometry_1_1point__order.xml]
 [section:point_order point_order]
 
-Meta-function which defines point order of any geometry. 
+Metafunction which defines point order of a geometry type. 
 
 [heading Synopsis]
 ``template<typename Geometry>
@@ -34,5 +34,8 @@
 [heading Header]
 `#include <boost/geometry/core/point_order.hpp>`
 
+[heading See also]
+[link geometry.reference.enumerations.closure_selector The closure_selector enumeration]
+
 [endsect]
 
Modified: trunk/libs/geometry/doc/reference/point_xy.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/point_xy.qbk	(original)
+++ trunk/libs/geometry/doc/reference/point_xy.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -23,6 +23,7 @@
 [heading Synopsis]
 ``template<typename CoordinateType, typename CoordinateSystem>
 class model::d2::point_xy
+      : public model::point< CoordinateType, 2, CoordinateSystem >
 {
   // ...
 };
@@ -58,7 +59,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``CoordinateType const & x () const ``
 
 ] [Get x-value. ] [
Modified: trunk/libs/geometry/doc/reference/polygon.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/polygon.qbk	(original)
+++ trunk/libs/geometry/doc/reference/polygon.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -42,7 +42,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``ring_type const & outer () const ``
 
 ] [] [
Modified: trunk/libs/geometry/doc/reference/segment_range.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/segment_range.qbk	(original)
+++ trunk/libs/geometry/doc/reference/segment_range.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -46,7 +46,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``const_iterator begin () const ``
 
 ] [] [
Modified: trunk/libs/geometry/doc/reference/segment_range_iterator.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/segment_range_iterator.qbk	(original)
+++ trunk/libs/geometry/doc/reference/segment_range_iterator.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -62,7 +62,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``segment_range_iterator< Segment > & operator= (segment_range_iterator< Segment > const &source)``
 
 ] [] [[* < Segment > const &]: ['source]:  
Modified: trunk/libs/geometry/doc/reference/side_side_by_cross_track.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/side_side_by_cross_track.qbk	(original)
+++ trunk/libs/geometry/doc/reference/side_side_by_cross_track.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -36,7 +36,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``template<typename P1, typename P2, typename P>
 int apply (P1 const &p1, P2 const &p2, P const &p)``
 
Modified: trunk/libs/geometry/doc/reference/side_side_by_triangle.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/side_side_by_triangle.qbk	(original)
+++ trunk/libs/geometry/doc/reference/side_side_by_triangle.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -36,7 +36,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``template<typename P1, typename P2, typename P>
 int apply (P1 const &p1, P2 const &p2, P const &p)``
 
Modified: trunk/libs/geometry/doc/reference/simplify_douglas_peucker.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/simplify_douglas_peucker.qbk	(original)
+++ trunk/libs/geometry/doc/reference/simplify_douglas_peucker.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -37,7 +37,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``template<typename Range, typename OutputIterator>
 OutputIterator apply (Range const &range, OutputIterator out, double max_distance)``
 
Modified: trunk/libs/geometry/doc/reference/transform_inverse_transformer.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/transform_inverse_transformer.qbk	(original)
+++ trunk/libs/geometry/doc/reference/transform_inverse_transformer.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -20,6 +20,7 @@
 [heading Synopsis]
 ``template<typename P1, typename P2>
 class strategy::transform::inverse_transformer
+      : public strategy::transform::ublas_transformer< P1, P2, dimension< P1 >::type::value, dimension< P2 >::type::value >
 {
   // ...
 };
Modified: trunk/libs/geometry/doc/reference/transform_map_transformer.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/transform_map_transformer.qbk	(original)
+++ trunk/libs/geometry/doc/reference/transform_map_transformer.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -20,6 +20,7 @@
 [heading Synopsis]
 ``template<typename P1, typename P2, bool Mirror, bool SameScale, std::size_t Dimension1, std::size_t Dimension2>
 class strategy::transform::map_transformer
+      : public strategy::transform::ublas_transformer< P1, P2, Dimension1, Dimension2 >
 {
   // ...
 };
Modified: trunk/libs/geometry/doc/reference/within.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/within.qbk	(original)
+++ trunk/libs/geometry/doc/reference/within.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -15,7 +15,10 @@
 [/ Generated from doxy/doxygen_output/xml/group__within.xml]
 [section:within_3_with_strategy within (with strategy)]
 
-Within, examine if a geometry is within another geometry, using a specified strategy. 
+Checks if the first geometry is completely inside the second geometry using the specified strategy. 
+
+[heading Description]
+The free function within checks if the first geometry is completely inside the second geometry, using the specified strategy. Reasons to specify a strategy include: use another coordinate system for calculations; construct the strategy beforehand (e.g. with the radius of the Earth); select a strategy when there are more than one available for a calculation. 
 
 [heading Synopsis]
 ``template<typename Geometry1, typename Geometry2, typename Strategy>
@@ -43,12 +46,20 @@
 
 `#include <boost/geometry/algorithms/within.hpp>`
 
+[heading Available Strategies]
+* [link geometry.reference.strategies.strategy_within_winding Winding (coordinate system agnostic)]
+* [link geometry.reference.strategies.strategy_within_franklin Franklin (cartesian)]
+* [link geometry.reference.strategies.strategy_within_crossings_multiply Crossings Multiply (cartesian)]
+
 
 [endsect]
 
 [section:within_2 within]
 
-Checks if the first geometry completely inside the second geometry. 
+Checks if the first geometry is completely inside the second geometry. 
+
+[heading Description]
+The free function within checks if the first geometry is completely inside the second geometry. 
 
 [heading Synopsis]
 ``template<typename Geometry1, typename Geometry2>
Modified: trunk/libs/geometry/doc/reference/within_crossings_multiply.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/within_crossings_multiply.qbk	(original)
+++ trunk/libs/geometry/doc/reference/within_crossings_multiply.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -35,7 +35,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``bool apply (Point const &point, PointOfSegment const &seg1, PointOfSegment const &seg2, flags &state)``
 
 ] [] [[* Point const &]: ['point]:  
Modified: trunk/libs/geometry/doc/reference/within_franklin.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/within_franklin.qbk	(original)
+++ trunk/libs/geometry/doc/reference/within_franklin.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -35,7 +35,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``bool apply (Point const &point, PointOfSegment const &seg1, PointOfSegment const &seg2, crossings &state)``
 
 ] [] [[* Point const &]: ['point]:  
@@ -63,5 +63,8 @@
 [heading Header]
 `#include <boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp>`
 
+[heading See also]
+[link geometry.reference.algorithms.within.within_3_with_strategy within (with strategy)]
+
 [endsect]
 
Modified: trunk/libs/geometry/doc/reference/within_winding.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/within_winding.qbk	(original)
+++ trunk/libs/geometry/doc/reference/within_winding.qbk	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -35,7 +35,7 @@
 
 [heading Member Function(s)]
 [table
-[[Function] [Description] [Parameters] [Returns] ]
+[[Function] [Description] [Parameters]  [Returns]]
 [[``bool apply (Point const &point, PointOfSegment const &s1, PointOfSegment const &s2, counter &state)``
 
 ] [] [[* Point const &]: ['point]:  
@@ -63,5 +63,8 @@
 [heading Header]
 `#include <boost/geometry/strategies/agnostic/point_in_poly_winding.hpp>`
 
+[heading See also]
+[link geometry.reference.algorithms.within.within_3_with_strategy within (with strategy)]
+
 [endsect]
 
Modified: trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp
==============================================================================
--- trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp	(original)
+++ trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -14,18 +14,43 @@
 #include <vector>
 
 
-// contains (template)parameter
-struct parameter
+enum markup_type { markup_default, markup_synopsis };
+enum markup_order_type { markup_any, markup_before, markup_after };
+
+// TODO: rename, not all are functions
+enum function_type 
+{ 
+    function_unknown, 
+    function_define, 
+    function_constructor, 
+    function_member, 
+    function_free 
+};
+
+struct base_element
 {
     std::string name;
-    std::string description;
+    std::string brief_description;
+
+    base_element(std::string const& n = "")
+        : name(n)
+    {}
+};
+
+
+// contains (template)parameter
+struct parameter : public base_element
+{
     std::string type;
     std::string default_value; // for template parameters
     std::string fulltype; // post-processed
 };
 
-enum markup_type { markup_default, markup_synopsis };
-enum markup_order_type { markup_any, markup_before, markup_after };
+struct enumeration_value : public base_element
+{
+    std::string initializer;
+};
+
 
 
 struct markup
@@ -57,11 +82,10 @@
     }
 };
 
-// Basic element, base of a class/struct, function, define
-struct element
+// Base of a class/struct, function, define
+struct element : public base_element
 {
-    std::string name;
-    std::string brief_description, detailed_description;
+    std::string detailed_description;
     std::string location;
     int line; // To sort - Doxygen changes order - we change it back
 
@@ -81,7 +105,6 @@
     {}
 };
 
-enum function_type { function_unknown, function_define, function_constructor, function_member, function_free };
 
 struct function : public element
 {
@@ -98,6 +121,13 @@
 
 };
 
+
+struct enumeration : public element
+{
+    std::vector<enumeration_value> enumeration_values;
+};
+
+
 struct base_class
 {
     std::string name;
@@ -110,15 +140,22 @@
     std::string name, fullname;
     std::vector<function> functions;
 
+    std::vector<base_element> typedefs;
+    std::vector<base_element> variables;
+
     std::vector<base_class> base_classes;
 };
 
 
 struct documentation
 {
-    class_or_struct cos;
-    std::vector<function> functions;
+    // Only one expected (no grouping)
+    class_or_struct cos; 
+
+    // There can be many of them (in groups):
+    std::vector<function> functions; 
     std::vector<function> defines;
+    std::vector<enumeration> enumerations;
 };
 
 
Modified: trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.cpp
==============================================================================
--- trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.cpp	(original)
+++ trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.cpp	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -158,6 +158,10 @@
         {
             quickbook_output(f, config, std::cout);
         }
+        BOOST_FOREACH(enumeration const& e, doc.enumerations)
+        {
+            quickbook_output(e, config, std::cout);
+        }
 
         if (! doc.cos.name.empty())
         {
Modified: trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp
==============================================================================
--- trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp	(original)
+++ trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -33,13 +33,12 @@
 }
 
 
-
 static inline void add_or_set(std::vector<parameter>& parameters, parameter const& p)
 {
     std::vector<parameter>::iterator it = std::find_if(parameters.begin(), parameters.end(), par_by_name(p.name));
     if (it != parameters.end())
     {
-        if (it->description.empty()) it->description = p.description;
+        if (it->brief_description.empty()) it->brief_description = p.brief_description;
         if (it->type.empty()) it->type = p.type;
         if (it->fulltype.empty()) it->fulltype = p.fulltype;
     }
@@ -49,6 +48,9 @@
     }
 }
 
+
+
+
 /// Parses a "para" element 
 /*
 This is used for different purposes within Doxygen. 
@@ -122,7 +124,7 @@
         }
         else if (name == "para")
         {
-             parse_para(node, p.description);
+             parse_para(node, p.brief_description);
         }
 
         parse_parameter(node->first_node(), p);
@@ -130,6 +132,32 @@
     }
 }
 
+static void parse_enumeration_value(rapidxml::xml_node<>* node, enumeration_value& value)
+{
+    // <enumvalue><name>green</name><initializer> 2</initializer>
+    //    <briefdescription><para>...</para></briefdescription>
+    //    <detaileddescription><para>...</para></detaileddescription>
+    // </enumvalue>
+    if (node != NULL)
+    {
+        std::string node_name = node->name();
+
+        if (node_name == "name") value.name = node->value();
+        else if (node_name == "para")
+        {
+            // Parses both brief AND detailed into this description
+            parse_para(node, value.brief_description);
+        }
+        else if (node_name == "initializer")
+        {
+            value.initializer = node->value();
+        }
+
+        parse_enumeration_value(node->first_node(), value);
+        parse_enumeration_value(node->next_sibling(), value);
+    }
+}
+
 // Definition is a function or a class/struct
 template <typename Parameters>
 static void parse_parameter_list(rapidxml::xml_node<>* node, Parameters& parameters)
@@ -149,7 +177,7 @@
                     parameters.end(), par_by_name(p.name));
                 if (it != parameters.end())
                 {
-                    it->description = p.description;
+                    it->brief_description = p.brief_description;
                 }
                 else
                 {
@@ -316,6 +344,49 @@
     }
 }
 
+static void parse_enumeration(rapidxml::xml_node<>* node, configuration const& config, std::string const& parent, enumeration& e)
+{
+    if (node != NULL)
+    {
+        std::string name = node->name();
+        std::string full = parent + "." + name;
+
+        if (full == ".name") e.name = node->value();
+        else if (full == ".enumvalue")
+        {
+            enumeration_value value;
+            parse_enumeration_value(node->first_node(), value);
+            e.enumeration_values.push_back(value);
+        }
+
+        parse_enumeration(node->first_node(), config, full, e);
+        parse_enumeration(node->next_sibling(), config, parent, e);
+    }
+}
+
+
+static std::string parse_named_node(rapidxml::xml_node<>* node, std::string const& look_for_name)
+{
+    if (node != NULL)
+    {
+        std::string node_name = node->name();
+        std::string contents;
+
+        if (boost::equals(node_name, look_for_name))
+        {
+            contents = node->value();
+        }
+
+        return contents
+            + parse_named_node(node->first_node(), look_for_name)
+            + parse_named_node(node->next_sibling(), look_for_name);
+    }
+    return "";
+}
+
+
+
+
 static void parse(rapidxml::xml_node<>* node, configuration const& config, documentation& doc, bool member = false)
 {
     if (node != NULL)
@@ -332,17 +403,15 @@
         else if (nodename == "sectiondef")
         {
             std::string kind = get_attribute(node, "kind");
-            if (kind == "func" )
-            {
-                // Get free function definition
-                recurse = true;
-            }
-            if (kind == "define" )
+
+            if (kind == "func"
+                || kind == "define"
+                || kind == "enum"
+                )
             {
-                // Get define or registration macro
                 recurse = true;
             }
-            else if (kind == "public-static-func" || kind == "public-func")
+            else if (boost::starts_with(kind, "public"))
             {
                 recurse = true;
                 is_member = true;
@@ -364,19 +433,16 @@
         else if (nodename == "memberdef")
         {
             std::string kind = get_attribute(node, "kind");
-            if (kind == "function" || kind == "define")
+            if (kind == "function")
             {
                 function f;
                 parse_element(node->first_node(), config, "", f);
                 parse_function(node->first_node(), config, "", f);
-                if (kind == "define")
-                {
-                    f.type = function_define;
-                    doc.defines.push_back(f);
-                }
-                else if (member)
+                if (member)
                 {
-                    f.type = f.name == doc.cos.name ? function_constructor : function_member;
+                    f.type = boost::equals(f.name, doc.cos.name) 
+                        ? function_constructor 
+                        : function_member;
                     doc.cos.functions.push_back(f);
                 }
                 else
@@ -385,6 +451,39 @@
                     doc.functions.push_back(f);
                 }
             }
+            else if (kind == "define")
+            {
+                function f;
+                f.type = function_define;
+                parse_element(node->first_node(), config, "", f);
+                parse_function(node->first_node(), config, "", f);
+            }
+            else if (kind == "enum")
+            {
+                enumeration e;
+                parse_element(node->first_node(), config, "", e);
+                parse_enumeration(node->first_node(), config, "", e);
+                doc.enumerations.push_back(e);
+            }
+            else if (kind == "typedef")
+            {
+                if (boost::equals(get_attribute(node, "prot"), "public"))
+                {
+                    std::string name = parse_named_node(node->first_node(), "name");
+                    doc.cos.typedefs.push_back(base_element(name));
+                }
+            }
+            else if (kind == "variable")
+            {
+                if (boost::equals(get_attribute(node, "static"), "yes")
+                    && boost::equals(get_attribute(node, "mutable"), "no")
+                    && boost::equals(get_attribute(node, "prot"), "public"))
+                {
+                    std::string name = parse_named_node(node->first_node(), "name");
+                    doc.cos.variables.push_back(base_element(name));
+                }
+            }
+
         }
         else if (nodename == "compoundname")
         {
Added: trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/for_debugger.ini
==============================================================================
--- (empty file)
+++ trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/for_debugger.ini	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -0,0 +1,9 @@
+# xml=../../../../doxy/doxygen_output/xml/classboost_1_1geometry_1_1model_1_1d2_1_1point__xy.xml
+# xml=../../../../doxy/doxygen_output/xml/classboost_1_1geometry_1_1model_1_1polygon.xml
+# xml=../../../../doxy/doxygen_output/xml/group__area.xml
+xml=../../../../doxy/doxygen_output/xml/classboost_1_1geometry_1_1strategy_1_1distance_1_1pythagoras.xml
+start_include=boost/geometry/
+convenience_header_path=../../../../../../../boost/geometry/
+convenience_headers=geometry.hpp,geometries/geometries.hpp,multi/multi.hpp
+skip_namespace=boost::geometry::
+
Modified: trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp
==============================================================================
--- trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp	(original)
+++ trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp	2011-01-30 16:53:02 EST (Sun, 30 Jan 2011)
@@ -78,6 +78,29 @@
         << std::endl;
 }
 
+
+void quickbook_synopsis(enumeration const& e, std::ostream& out)
+{
+    out << "``enum " << e.name;
+    bool first = true;
+    BOOST_FOREACH(enumeration_value const& value, e.enumeration_values)
+    {
+        out << (first ? " {" : ", ") << value.name;
+        if (! value.initializer.empty())
+        {
+            out << " = " << boost::trim_copy(value.initializer);
+        }
+        first = false;
+    }
+    if (! first)
+    {
+        out << "};";
+    }
+    out << "``" 
+        << std::endl
+        << std::endl;
+}
+
 inline bool includes(std::string const& filename, std::string const& header)
 {
     std::string result;
@@ -177,6 +200,42 @@
 
 
 
+void quickbook_short_output(function const& f, std::ostream& out)
+{
+    BOOST_FOREACH(parameter const& p, f.parameters)
+    {
+        out << "[* " << p.fulltype << "]: ['" << p.name << "]:  " << p.brief_description << std::endl << std::endl;
+    }
+    out << std::endl;
+    out << std::endl;
+
+    if (! f.return_description.empty())
+    {
+        out << "][" << std::endl;
+        out << f.return_description << std::endl;
+        out << std::endl;
+    }
+
+    out << std::endl;
+}
+
+inline std::string namespace_skipped(std::string const& name, configuration const& config)
+{
+    return config.skip_namespace.empty()
+        ? name
+        : boost::replace_all_copy(name, config.skip_namespace, "")
+        ;
+}
+
+inline std::string output_if_different(std::string const& s, std::string const& s2)
+{
+    return boost::equals(s, s2)
+        ? ""
+        : s + " "
+        ;
+}
+
+
 void quickbook_output(function const& f, configuration const& config, std::ostream& out)
 {
     // Write the parsed function
@@ -235,7 +294,7 @@
 
         if (it == f.parameters.end())
         {
-            out << "[[" << tp.name << "] [" << tp.description << "] [ - ] [Must be specified]]" << std::endl;
+            out << "[[" << tp.name << "] [" << tp.brief_description << "] [ - ] [Must be specified]]" << std::endl;
         }
 
     }
@@ -249,11 +308,11 @@
         if (f.type != function_define)
         {
             out << "[" << p.fulltype
-                << "] [" << (it == f.template_parameters.end() ? "" : it->description)
+                << "] [" << (it == f.template_parameters.end() ? "" : it->brief_description)
                 << "] ";
         }
         out << "[" << p.name
-            << "] [" << p.description
+            << "] [" << p.brief_description
             << "]]"
             << std::endl;
     }
@@ -272,31 +331,80 @@
 }
 
 
-void quickbook_short_output(function const& f, std::ostream& out)
+void quickbook_output(enumeration const& e, configuration const& config, std::ostream& out)
 {
-    BOOST_FOREACH(parameter const& p, f.parameters)
-    {
-        out << "[* " << p.fulltype << "]: ['" << p.name << "]:  " << p.description << std::endl << std::endl;
-    }
-    out << std::endl;
+    out << "[section:" << to_section_name(e.name);
+    out << " " << e.name
+        << "]" << std::endl
+        << std::endl;
+
+    out << e.brief_description << std::endl;
     out << std::endl;
 
-    if (! f.return_description.empty())
+    quickbook_string_with_heading_if_present("Description", e.detailed_description, out);
+
+    // Synopsis
+    quickbook_markup(e.qbk_markup, markup_before, markup_synopsis, out);
+    out << "[heading Synopsis]" << std::endl;
+    quickbook_synopsis(e, out);
+    quickbook_markup(e.qbk_markup, markup_after, markup_synopsis, out);
+
+
+    out << "[heading Values]" << std::endl
+        << std::endl;
+
+    out << "[table" << std::endl << "[";
+    out << "[Value] [Description] ]" << std::endl;
+
+    BOOST_FOREACH(enumeration_value const& value, e.enumeration_values)
     {
-        out << "][" << std::endl;
-        out << f.return_description << std::endl;
-        out << std::endl;
+        out << "[[" << value.name
+            << "] [" << value.brief_description
+            << "]]"
+            << std::endl;
     }
+    out << "]" << std::endl
+        << std::endl
+        << std::endl;
 
+    quickbook_header(e.location, config, out);
+    quickbook_markup(e.qbk_markup, markup_any, markup_default, out);
+
+    out << std::endl;
+    out << "[endsect]" << std::endl;
     out << std::endl;
 }
 
+void quickbook_output_member(std::vector<function> const& functions, 
+        function_type type, 
+        std::string const& title,
+        configuration const& config, std::ostream& out)
+{
+    std::string returns = type == function_constructor ? "" : " [Returns]";
+    out << "[heading " << title << "(s)]" << std::endl
+        << "[table" << std::endl
+        << "[[Function] [Description] [Parameters] " << returns << "]" << std::endl;
+
+    BOOST_FOREACH(function const& f, functions)
+    {
+        if (f.type == type)
+        {
+            out << "[[";
+            quickbook_synopsis(f, out);
+            out << "] [" << f.brief_description << "] [";
+            quickbook_short_output(f, out);
+            out << "]]" << std::endl;
+        }
+    }
+    out << "]" << std::endl
+        << std::endl;
+}
+
+
 void quickbook_output(class_or_struct const& cos, configuration const& config, std::ostream& out)
 {
     // Skip namespace
-    std::string short_name = config.skip_namespace.empty()
-        ? cos.fullname
-        : boost::replace_all_copy(cos.fullname, config.skip_namespace, "");
+    std::string short_name = namespace_skipped(cos.fullname, config);
 
     // Write the parsed function
     out << "[section:" << to_section_name(short_name) << " " << short_name << "]" << std::endl
@@ -311,23 +419,27 @@
     out << "[heading Synopsis]" << std::endl
         << "``";
     quickbook_template_parameter_list(cos.template_parameters, out);
-    out << "class " << short_name;
+    out << "class " << short_name << std::endl;
 
     if (! cos.base_classes.empty())
     {
-        out << " : ";
+        out << "      : ";
         bool first = true;
         BOOST_FOREACH(base_class const& bc, cos.base_classes)
         {
-            out << (first ? "" : ", ") 
-                << (boost::equals(bc.derivation, "private") ? "" : bc.derivation)
-                << (boost::equals(bc.virtuality, "non-virtual") ? "" : bc.virtuality)
-                << " " << bc.name;
+            if (! first)
+            {
+                out << std::endl << "      , ";
+            }
+            out << output_if_different(bc.derivation, "private")
+                << output_if_different(bc.virtuality, "non-virtual")
+                << namespace_skipped(bc.name, config);
             first = false;
         }
+        out << std::endl;
     }
 
-    out << std::endl << "{" << std::endl
+    out << "{" << std::endl
         << "  // ..." << std::endl
         << "};" << std::endl
         << "``" << std::endl << std::endl;
@@ -362,7 +474,7 @@
             {
                 out << "] [" << p.default_value;
             }
-            out << "] [" << p.description << "]]" << std::endl;
+            out << "] [" << p.brief_description << "]]" << std::endl;
         }
         out << "]" << std::endl
             << std::endl;
@@ -377,44 +489,12 @@
 
     if (counts[function_constructor] > 0)
     {
-        out << "[heading Constructor(s)]" << std::endl
-            << "[table" << std::endl
-            << "[[Function] [Description] [Parameters] ]" << std::endl;
-
-        BOOST_FOREACH(function const& f, cos.functions)
-        {
-            if (f.type == function_constructor)
-            {
-                out << "[[";
-                quickbook_synopsis(f, out);
-                out << "] [" << f.brief_description << "] [";
-                quickbook_short_output(f, out);
-                out << "]]" << std::endl;
-            }
-        }
-        out << "]" << std::endl
-            << std::endl;
+        quickbook_output_member(cos.functions, function_constructor, "Constructor", config, out);
     }
 
     if (counts[function_member] > 0)
     {
-        out << "[heading Member Function(s)]" << std::endl
-            << "[table" << std::endl
-            << "[[Function] [Description] [Parameters] [Returns] ]" << std::endl;
-
-        BOOST_FOREACH(function const& f, cos.functions)
-        {
-            if (f.type == function_member)
-            {
-                out << "[[";
-                quickbook_synopsis(f, out);
-                out << "] [" << f.brief_description << "] [";
-                quickbook_short_output(f, out);
-                out << "]]" << std::endl;
-            }
-        }
-        out << "]" << std::endl
-            << std::endl;
+        quickbook_output_member(cos.functions, function_member, "Member Function", config, out);
     }
 
     quickbook_header(cos.location, config, out);
@@ -423,4 +503,6 @@
     out << "[endsect]" << std::endl
         << std::endl;
 }
+
+
 #endif // QUICKBOOK_OUTPUT_HPP