Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r68384 - in trunk/libs/geometry/doc: . concept doxy doxy/doxygen_input/pages reference src/docutils/tools/doxygen_xml2qbk
From: barend.gehrels_at_[hidden]
Date: 2011-01-23 10:58:17


Author: barendgehrels
Date: 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
New Revision: 68384
URL: http://svn.boost.org/trac/boost/changeset/68384

Log:
Copied and adapted descriptions for Geometry Concepts
Reverted qbk_begin / qbk_end back to qbk because multi-line IS possible there
Renamed linear_ring to ring
Updated the doxygen_xml2qbk tool
Text files modified:
   trunk/libs/geometry/doc/concept/box.qbk | 27 +++++++++++
   trunk/libs/geometry/doc/concept/linestring.qbk | 22 +++++++++
   trunk/libs/geometry/doc/concept/multi_linestring.qbk | 17 +++++++
   trunk/libs/geometry/doc/concept/multi_point.qbk | 17 +++++++
   trunk/libs/geometry/doc/concept/multi_polygon.qbk | 17 +++++++
   trunk/libs/geometry/doc/concept/point.qbk | 40 ++++++++++++++----
   trunk/libs/geometry/doc/concept/polygon.qbk | 26 +++++++++++
   trunk/libs/geometry/doc/concept/ring.qbk | 23 +++++++++-
   trunk/libs/geometry/doc/concept/segment.qbk | 21 +++++++++
   trunk/libs/geometry/doc/doxy/Doxyfile | 20 +++++---
   trunk/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_pages.hpp | 2
   trunk/libs/geometry/doc/geometry.qbk | 3 +
   trunk/libs/geometry/doc/make_qbk.py | 2
   trunk/libs/geometry/doc/quickref.xml | 5 +
   trunk/libs/geometry/doc/reference.qbk | 1
   trunk/libs/geometry/doc/reference/area.qbk | 4 +
   trunk/libs/geometry/doc/reference/area_huiller.qbk | 9 ++-
   trunk/libs/geometry/doc/reference/box_range.qbk | 4
   trunk/libs/geometry/doc/reference/buffer.qbk | 7 +-
   trunk/libs/geometry/doc/reference/centroid.qbk | 13 +++--
   trunk/libs/geometry/doc/reference/centroid_average.qbk | 6 +-
   trunk/libs/geometry/doc/reference/centroid_bashein_detmer.qbk | 8 +-
   trunk/libs/geometry/doc/reference/closing_iterator.qbk | 2
   trunk/libs/geometry/doc/reference/distance.qbk | 6 +
   trunk/libs/geometry/doc/reference/distance_cross_track.qbk | 15 +++---
   trunk/libs/geometry/doc/reference/distance_haversine.qbk | 13 +++--
   trunk/libs/geometry/doc/reference/distance_projected_point.qbk | 13 +++--
   trunk/libs/geometry/doc/reference/distance_pythagoras.qbk | 11 ++--
   trunk/libs/geometry/doc/reference/identity_view.qbk | 8 +-
   trunk/libs/geometry/doc/reference/intersection.qbk | 3 +
   trunk/libs/geometry/doc/reference/intersects.qbk | 2
   trunk/libs/geometry/doc/reference/length.qbk | 2
   trunk/libs/geometry/doc/reference/linestring.qbk | 17 ++++---
   trunk/libs/geometry/doc/reference/multi_linestring.qbk | 15 ++++--
   trunk/libs/geometry/doc/reference/multi_point.qbk | 36 +++++++++++++---
   trunk/libs/geometry/doc/reference/multi_polygon.qbk | 15 ++++--
   trunk/libs/geometry/doc/reference/num_geometries.qbk | 1
   trunk/libs/geometry/doc/reference/num_interior_rings.qbk | 1
   trunk/libs/geometry/doc/reference/num_points.qbk | 1
   trunk/libs/geometry/doc/reference/perimeter.qbk | 2
   trunk/libs/geometry/doc/reference/point.qbk | 8 ++
   trunk/libs/geometry/doc/reference/point_xy.qbk | 9 ++-
   trunk/libs/geometry/doc/reference/polygon.qbk | 32 ++++++++-------
   trunk/libs/geometry/doc/reference/register.qbk | 1
   trunk/libs/geometry/doc/reference/ring.qbk | 33 ++++++++-------
   trunk/libs/geometry/doc/reference/segment_range.qbk | 4
   trunk/libs/geometry/doc/reference/segment_range_iterator.qbk | 2
   trunk/libs/geometry/doc/reference/side_side_by_cross_track.qbk | 4
   trunk/libs/geometry/doc/reference/side_side_by_triangle.qbk | 4
   trunk/libs/geometry/doc/reference/simplify.qbk | 5 +
   trunk/libs/geometry/doc/reference/transform_map_transformer.qbk | 14 +++---
   trunk/libs/geometry/doc/reference/transform_scale_transformer.qbk | 10 ++--
   trunk/libs/geometry/doc/reference/transform_translate_transformer.qbk | 10 ++--
   trunk/libs/geometry/doc/reference/transform_ublas_transformer.qbk | 2
   trunk/libs/geometry/doc/reference/within_crossings_multiply.qbk | 8 +-
   trunk/libs/geometry/doc/reference/within_franklin.qbk | 8 +-
   trunk/libs/geometry/doc/reference/within_winding.qbk | 8 +-
   trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp | 35 ++++++++++++---
   trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.cpp | 13 ++++-
   trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp | 64 ++++++++++++++++++++----------
   trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/parameter_predicates.hpp | 4
   trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp | 84 +++++++++++++++++++++++++++------------
   trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/rapidxml_util.hpp | 16 ++++++
   63 files changed, 581 insertions(+), 254 deletions(-)

Modified: trunk/libs/geometry/doc/concept/box.qbk
==============================================================================
--- trunk/libs/geometry/doc/concept/box.qbk (original)
+++ trunk/libs/geometry/doc/concept/box.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -10,10 +10,33 @@
   http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================/]
 
-[section:concept_box Box]
+[section:concept_box Box Concept]
 
 [heading Description]
-Stub
+[concept Box..box]
+
+A box is a geometry with (usually) two or three dimensions, having its axis aligned to the coordinate system.
+
+The box is not one of the basic types in Boost.Geometry (point, linestring, polygon) but it is a ['helper type].
+The main reasons for the box existance are its usefulness for indexing (a spatial index, or splitting a geometry
+into monotonic sections) and it is the output of the [link geometry.reference.algorithms.envelope envelope] algorithm.
+
+Therefore, a box is axis aligned (the envelope is also called aabb, axis aligned bounding box).
+
+[heading Concept Definition]
+
+The Box Concept is defined as following:
+
+* there must be a specialization of `traits::tag`, defining `box_tag` as type
+* there must be a specialization of `traits::point_type` to define the underlying point type
+ (even if it does not consist of points, it should define this type, to indicate the points it can work with)
+* there must be a specialization of `traits::indexed_access`, per index (`min_corner`, `max_corner`) and per dimension, with two functions:
+ * `get` to get a coordinate value
+ * `set` to set a coordinate value (this one is not checked for ConstBox)
+
+
+[heading Available Models]
+* [link geometry.reference.models.model_box model::box]
 
 [endsect]
 

Modified: trunk/libs/geometry/doc/concept/linestring.qbk
==============================================================================
--- trunk/libs/geometry/doc/concept/linestring.qbk (original)
+++ trunk/libs/geometry/doc/concept/linestring.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -10,9 +10,27 @@
   http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================/]
 
-[section:concept_linestring Linestring]
+[section:concept_linestring Linestring Concept]
 
 [heading Description]
-Stub
+[concept Linestring..linestring]
+
+A linestring is ['a Curve with linear interpolation between Points].
+([@http://portal.opengeospatial.org/files/?artifact_id=25355 opengeospatial]).
+
+[heading Concept Definition]
+
+The Linestring Concept is defined as following:
+
+* there must be a specialization of `traits::tag` defining `linestring_tag` as type
+* it must behave like a Boost.Range
+* The type defined by the metafunction `range_value<...>::type` must fulfill
+ the [link geometry.reference.concepts.concept_point Point Concept]
+
+[heading Available Models]
+* [link geometry.reference.models.model_linestring model::linestring]
+* a std::vector (requires `#include boost/geometry/geometries/adapted/std_as_linestring.hpp>`)
+* a std::deque (requires `#include boost/geometry/geometries/adapted/std_as_linestring.hpp>`)
+
 
 [endsect]

Modified: trunk/libs/geometry/doc/concept/multi_linestring.qbk
==============================================================================
--- trunk/libs/geometry/doc/concept/multi_linestring.qbk (original)
+++ trunk/libs/geometry/doc/concept/multi_linestring.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -10,9 +10,22 @@
   http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================/]
 
-[section:concept_multi_linestring MultiLinestring]
+[section:concept_multi_linestring MultiLinestring Concept]
 
 [heading Description]
-Stub
+[concept MultiLinestring..multi linestring]
+
+[heading Concept Definition]
+
+The MultiLinestring Concept is defined as following:
+
+* There must be a specialization of the metafunction `traits::tag`, defining `multi_linestring_tag` as type
+* It must behave like a Boost.Range
+* The type defined by the metafunction `range_value<...>::type` must fulfill
+ the [link geometry.reference.concepts.concept_linestring Linestring Concept]
+
+[heading Available Models]
+* [link geometry.reference.models.model_multi_linestring model::multi_linestring]
+
 
 [endsect]

Modified: trunk/libs/geometry/doc/concept/multi_point.qbk
==============================================================================
--- trunk/libs/geometry/doc/concept/multi_point.qbk (original)
+++ trunk/libs/geometry/doc/concept/multi_point.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -10,9 +10,22 @@
   http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================/]
 
-[section:concept_multi_point MultiPoint]
+[section:concept_multi_point MultiPoint Concept]
 
 [heading Description]
-Stub
+[concept MultiPoint..multi point]
+
+
+[heading Concept Definition]
+
+The MultiPoint Concept is defined as following:
+
+* There must be a specialization of the metafunction `traits::tag`, defining `multi_point_tag` as type
+* It must behave like a Boost.Range
+* The type defined by the metafunction `range_value<...>::type` must fulfill the [link geometry.reference.concepts.concept_point Point Concept]
+
+[heading Available Models]
+* [link geometry.reference.models.model_multi_point model::multi_point]
+
 
 [endsect]

Modified: trunk/libs/geometry/doc/concept/multi_polygon.qbk
==============================================================================
--- trunk/libs/geometry/doc/concept/multi_polygon.qbk (original)
+++ trunk/libs/geometry/doc/concept/multi_polygon.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -10,9 +10,22 @@
   http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================/]
 
-[section:concept_multi_polygon MultiPolygon]
+[section:concept_multi_polygon MultiPolygon Concept]
 
 [heading Description]
-Stub
+[concept MultiPolygon..multi polygon]
+
+[heading Concept Definition]
+
+The MultiPolygon Concept is defined as following:
+
+* There must be a specialization of the metafunction `traits::tag`, defining `multi_polygon_tag` as type
+* It must behave like a Boost.Range
+* The type defined by the metafunction `range_value<...>::type` must fulfill
+ the [link geometry.reference.concepts.concept_polygon Polygon Concept]
+
+[heading Available Models]
+* [link geometry.reference.models.model_multi_polygon model::multi_polygon]
+
 
 [endsect]

Modified: trunk/libs/geometry/doc/concept/point.qbk
==============================================================================
--- trunk/libs/geometry/doc/concept/point.qbk (original)
+++ trunk/libs/geometry/doc/concept/point.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -10,18 +10,40 @@
   http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================/]
 
-[section:concept_point Point]
+[section:concept_point Point Concept]
 
 [heading Description]
-Stub
+[concept Point..point]
 
-[endsect]
-
-[/ if wished to separate them]
-[/ section:concept::ConstPoint concept::ConstPoint]
-
-[/ heading Description]
+A point is ['an entity that has a location in space or on a plane, but has no extent] ([@http://en.wikipedia.org/wiki/Point_(geometry) wiki]).
+The point is the most basic geometry of Boost.Geometry, most other geometries consist of points.
+['(Exceptions are box and segment, which might consist of two points but that is not necessarily the case.)]
+
+[heading Concept Definition]
+
+The Point Concept is defined as following:
+
+* there must be a specialization of `traits::tag`, defining `point_tag` as type
+* there must be a specialization of `traits::coordinate_type`, defining the type of its coordinates
+* there must be a specialization of `traits::coordinate_system`, defining its coordinate system
+ (cartesian, spherical, etc)
+* there must be a specialization of `traits::dimension`, defining its number of dimensions (2, 3, ...)
+ (hint: derive it conveniently from `boost::mpl::int_<X>` for X Dimensional)
+* there must be a specialization of `traits::access`, per dimension, with two functions:
+ * `get` to get a coordinate value
+ * `set` to set a coordinate value (this one is not checked for ConstPoint)
+
+[heading Available Models]
+* [link geometry.reference.models.model_point model::point]
+* [link geometry.reference.models.model_d2_point_xy model::d2::point_xy]
+* a lat long point (currently in an extension)
+* a C array (requires `#include boost/geometry/geometries/adapted/c_array.hpp>`)
+* a Boost.Array (requires `#include <boost/geometry/geometries/adapted/boost_array.hpp>`)
+* a Boost.Polygon point (requires `#include boost/geometry/geometries/adapted/boost_polygon/point.hpp>`)
+* a Boost.Fusion adapted structure (requires `#include boost/geometry/geometries/adapted/fusion.hpp>`)
+* a Boost.Tuple (requires `#include boost/geometry/geometries/adapted/tuple.hpp>`)
+* an adapted point using one of the [link geometry.reference.register registration macro's]
 
+[endsect]
 
-[/ endsect]
 

Modified: trunk/libs/geometry/doc/concept/polygon.qbk
==============================================================================
--- trunk/libs/geometry/doc/concept/polygon.qbk (original)
+++ trunk/libs/geometry/doc/concept/polygon.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -10,9 +10,31 @@
   http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================/]
 
-[section:concept_polygon Polygon]
+[section:concept_polygon Polygon Concept]
 
 [heading Description]
-Stub
+[concept Polygon..polygon]
+
+A polygon is ['A polygon is a planar surface defined by one exterior boundary and zero or more interior boundaries.]
+([@http://portal.opengeospatial.org/files/?artifact_id=25355 opengeospatial]).
+
+So the definition of a Boost.Geometry polygon differs a bit from e.g. Wiki, where a polygon does not have holes. A
+polygon of Boost.Geometry is a polygon with or without holes.
+['(A polygon without holes is a ['helper geometry] within Boost.Geometry, and referred to as a ring.)]
+
+[heading Concept Definition]
+
+The Polygon Concept is defined as following:
+
+* there must be a specialization of `traits::tag` defining `polygon_tag` as type
+* there must be a specialization of `traits::ring_type` defining the type of its exterior ring and interior rings as type
+* this type defined by `ring_type` must fulfill the [link geometry.reference.concepts.concept_ring Ring Concept]
+* there must be a specialization of `traits::interior_type` defining the type of the collection of its interior rings as type
+* there must be a specialization of `traits::exterior_ring` with two functions named `get`, returning the exterior ring, one being const, the other being non const
+* there must be a specialization of `traits::interior_rings` with two functions named `get`, returning the interior rings, one being const, the other being non const
+
+[heading Available Models]
+* [link geometry.reference.models.model_polygon polygon]
+* a Boost.Polygon polygon_with_holes_data (requires `#include boost/geometry/geometries/adapted/boost_polygon/polygon.hpp>`)
 
 [endsect]

Modified: trunk/libs/geometry/doc/concept/ring.qbk
==============================================================================
--- trunk/libs/geometry/doc/concept/ring.qbk (original)
+++ trunk/libs/geometry/doc/concept/ring.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -10,12 +10,29 @@
   http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================/]
 
-[section:concept_ring Ring]
+[section:concept_ring Ring Concept]
 
 [heading Description]
-Ring
+[concept Ring..ring]
 
-Note: also called linear ring, but we explicitly refer to a filled feature here.
+[note Also called linear ring, but we explicitly refer to a filled feature here]
+
+[heading Concept Definition]
+
+The Ring Concept is defined as following:
+
+* there must be a specialization of `traits::tag` defining `ring_tag` as type
+* it must behave like a Boost.Range
+* The type defined by the metafunction `range_value<...>::type` must fulfill
+ the [link geometry.reference.concepts.concept_point Point Concept]
+* there might be a specialization of `traits::point_order` defining the order or orientation of its points, `clockwise` or `counterclockwise`
+* there might be a specialization of `traits::closure` defining the closure, `open` or `closed`
+
+[heading Available Models]
+* [link geometry.reference.models.model_ring ring]
+* a Boost.Polygon polygon_data (requires `#include boost/geometry/geometries/adapted/boost_polygon/ring.hpp>`)
+* a std::vector (requires `#include boost/geometry/geometries/adapted/std_as_ring.hpp>`)
+* a std::deque (requires `#include boost/geometry/geometries/adapted/std_as_ring.hpp>`)
 
 
 [endsect]

Modified: trunk/libs/geometry/doc/concept/segment.qbk
==============================================================================
--- trunk/libs/geometry/doc/concept/segment.qbk (original)
+++ trunk/libs/geometry/doc/concept/segment.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -10,9 +10,26 @@
   http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================/]
 
-[section:concept_segment Segment]
+[section:concept_segment Segment Concept]
 
 [heading Description]
-Stub
+[concept Segment..segment]
+
+
+[heading Concept Definition]
+
+* there must be a specialization of `traits::tag` defining `segment_tag` as type
+* there must be a specialization of `traits::point_type` to define the underlying point type
+ (even if it does not consist of points, it should define this type, to indicate the points it can work with)
+* there must be a specialization of `traits::indexed_access`, per index and per dimension, with two functions:
+ * `get` to get a coordinate value
+ * `set` to set a coordinate value (this one is not checked for ConstSegment)
+
+[note The segment concept is similar to the box concept, defining using another tag.
+However, the box concept assumes the index as `min_corner`, `max_corner`, while for the segment concept, there is no assumption.]
+
+[heading Available Models]
+* [link geometry.reference.models.model_segment model::segment]
+* [link geometry.reference.models.model_referring_segment referring segment]
 
 [endsect]

Modified: trunk/libs/geometry/doc/doxy/Doxyfile
==============================================================================
--- trunk/libs/geometry/doc/doxy/Doxyfile (original)
+++ trunk/libs/geometry/doc/doxy/Doxyfile 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -37,10 +37,8 @@
 # \tparam* for various template parameters
 # \param* for various parameters
 # \return* for various return cases
-ALIASES = qbk{2}="\xmlonly <qbk.\1>\2</qbk.\1> \endxmlonly" \
- qbk{1}="\xmlonly <qbk>\1</qbk> \endxmlonly" \
- qbk_begin="\xmlonly <qbk>" \
- qbk_end="</qbk> \endxmlonly" \
+ALIASES = qbk{1}="\xmlonly <qbk>\1</qbk> \endxmlonly" \
+ qbk{2}="\xmlonly <qbk.\1>\2</qbk.\1> \endxmlonly" \
                         brief_calc{1}="Calculates the \1 of a geometry" \
                         brief_calc2{1}="Calculate the \1 of two geometries" \
                         brief_calc2{2}="Calculate the \1 \2 two geometries" \
@@ -56,10 +54,14 @@
                         tparam_point="Any type fulfilling a Point Concept" \
                         tparam_box="Any type fulfilling a Box Concept" \
                         tparam_strategy{1}="Any type fulfilling a \1 Strategy Concept" \
- tparam_numeric="Numerical type (int, double, ttmath, ...)" \
- tparam_calculation="optional, numeric type for calculation (e.g. high precision)" \
- tparam_optional_second_point="optional, second point type, defaults to first point type" \
- tparam_optional_segment_point="optional, segment point type, defaults to point type" \
+ tparam_numeric="numerical type (int, double, ttmath, ...)" \
+ tparam_calculation="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" \
+ tparam_point="point type" \
+ tparam_first_point="first point type" \
+ tparam_second_point="second point type" \
+ tparam_segment_point="segment point type" \
+ tparam_container="container type, for example std::vector, std::deque" \
+ tparam_allocator="container-allocator-type" \
                         tparam_out{1}="A valid output iterator type, accepting geometries of \1 Concept" \
                         param_geometry="A model of the specified concept" \
                         param_box="A model of the specified Box Concept" \
@@ -72,6 +74,8 @@
                         param_macro_coorsystem="Coordinate system (e.g. cs::cartesian)" \
                         param_macro_member{1}="Member containing \1 coordinate" \
                         param_macro_getset{2}="Method to \1 the \2 coordinate" \
+ constructor_default{1}="Default constructor, creating an empty \1" \
+ constructor_begin_end{1}="Constructor with begin and end, filling the \1" \
                         details_calc{2}="The free function \1 calculates the \2 of a geometry" \
                         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" \

Modified: trunk/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_pages.hpp
==============================================================================
--- trunk/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_pages.hpp (original)
+++ trunk/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_pages.hpp 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -257,7 +257,7 @@
 - \ref boost::geometry::model::linestring "linestring": Sequence of point values with linear interpolation
 between points. Note that library users does not have to use this type. Algorithms works on iterators, so
 all algorithms also accept iterators on a vector (or other container) of points.
-- \ref boost::geometry::model::linear_ring "linear_ring": Sequence of point values with linear interpolation
+- \ref boost::geometry::model::ring "linear_ring": Sequence of point values with linear interpolation
 between points, which is closed and not self-intersecting
 - \ref boost::geometry::model::polygon "polygon": Plane figure, consisting of an outer ring and zero or more
 inner rings. So basically a polygon which might have holes.

Modified: trunk/libs/geometry/doc/geometry.qbk
==============================================================================
--- trunk/libs/geometry/doc/geometry.qbk (original)
+++ trunk/libs/geometry/doc/geometry.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -53,6 +53,9 @@
 [template qbk_ret[what] Returns [what]]
 [template qbk_out[what] GeometryOut is a [what]]
 
+[template concept[name type] The [name] Concept describes the requirements for a [type] type.
+All algorithms in Boost.Geometry will check any geometry arguments against the concept requirements.]
+
 
 [def __boost_geometry__ Boost.Geometry]
 [def __boost_gil__ [@http://www.boost.org/libs/gil/ Boost.GIL]]

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -127,7 +127,7 @@
 model_to_quickbook("multi__linestring", "multi_linestring")
 model_to_quickbook("multi__point", "multi_point")
 model_to_quickbook("multi__polygon", "multi_polygon")
-model_to_quickbook("linear__ring", "ring")
+model_to_quickbook("ring", "ring")
 model_to_quickbook("referring__segment", "referring_segment")
 
 

Modified: trunk/libs/geometry/doc/quickref.xml
==============================================================================
--- trunk/libs/geometry/doc/quickref.xml (original)
+++ trunk/libs/geometry/doc/quickref.xml 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -83,16 +83,17 @@
     <entry valign="top">
     <bridgehead renderas="sect3">1-dimensional</bridgehead>
     <simplelist type="vert" columns="1">
- <member><link linkend="geometry.reference.models.model_segment">segment</link></member>
      <member><link linkend="geometry.reference.models.model_linestring">linestring</link></member>
      <member><link linkend="geometry.reference.models.model_multi_linestring">multi_linestring</link></member>
+ <member><link linkend="geometry.reference.models.model_segment">segment</link></member>
+ <member><link linkend="geometry.reference.models.model_referring_segment">referring_segment</link></member>
     </simplelist>
    </entry>
    <entry valign="top">
     <bridgehead renderas="sect3">2-dimensional</bridgehead>
     <simplelist type="vert" columns="1">
      <member><link linkend="geometry.reference.models.model_box">box</link></member>
- <member><link linkend="geometry.reference.models.model_linear_ring">linear_ring</link></member>
+ <member><link linkend="geometry.reference.models.model_ring">ring</link></member>
      <member><link linkend="geometry.reference.models.model_polygon">polygon</link></member>
      <member><link linkend="geometry.reference.models.model_multi_polygon">multi_polygon</link></member>
     </simplelist>

Modified: trunk/libs/geometry/doc/reference.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference.qbk (original)
+++ trunk/libs/geometry/doc/reference.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -207,6 +207,7 @@
 [include reference/box.qbk]
 [include reference/ring.qbk]
 [include reference/segment.qbk]
+[include reference/referring_segment.qbk]
 [endsect]
 
 [section:register Adaption and adapted models]

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -51,10 +51,11 @@
 [area_with_strategy]
 [area_with_strategy_output]
 
-[heading Available strategies]
+[heading Available Strategies]
 * [link geometry.reference.strategies.strategy_area_surveyor Surveyor (cartesian)]
 * [link geometry.reference.strategies.strategy_area_huiller Huiller (spherical)]
 
+
 [endsect]
 
 [section:area_1 area]
@@ -96,5 +97,6 @@
 [heading Examples]
 [area] [area_output]
 
+
 [endsect]
 

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -27,9 +27,9 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename PointOfSegment] [point type of segments of rings/polygons ]]
-[[typename CalculationType] [optional, numeric type for calculation (e.g. high precision) ]]
+[[Parameter] [Default] [Description]]
+[[typename PointOfSegment] [] [point type of segments of rings/polygons ]]
+[[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 Constructor(s)]
@@ -60,7 +60,7 @@
 
 
 ]]
-[[`` result (excess_sum const &state) const ``
+[[``return_type result (excess_sum const &state) const ``
 
 ] [] [[* const &]: ['state]:
 
@@ -80,5 +80,6 @@
 
 [heading See also]
 [link geometry.reference.algorithms.area.area_2_with_strategy area]
+
 [endsect]
 

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -47,13 +47,13 @@
 [heading Member Function(s)]
 [table
 [[Function] [Description] [Parameters] [Returns] ]
-[[`` begin () const ``
+[[``const_iterator begin () const ``
 
 ] [] [
 
 
 ]]
-[[`` end () const ``
+[[``const_iterator end () const ``
 
 ] [] [
 

Modified: trunk/libs/geometry/doc/reference/buffer.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/buffer.qbk (original)
+++ trunk/libs/geometry/doc/reference/buffer.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -30,8 +30,8 @@
 [[Type] [Concept] [Name] [Description] ]
 [[Input const &] [Any type fulfilling a Geometry Concept ] [geometry_in] [A model of the specified concept ]]
 [[Output &] [Any type fulfilling a Geometry Concept ] [geometry_out] [A model of the specified concept ]]
-[[Distance const &] [Numerical type (int, double, ttmath, ...) ] [distance] [The distance to be used for the buffer ]]
-[[Distance const &] [Numerical type (int, double, ttmath, ...) ] [chord_length] [(optional) The length of the chord's in the generated arcs around points or bends ]]
+[[Distance const &] [numerical type (int, double, ttmath, ...) ] [distance] [The distance to be used for the buffer ]]
+[[Distance const &] [numerical type (int, double, ttmath, ...) ] [chord_length] [(optional) The length of the chord's in the generated arcs around points or bends ]]
 ]
 
 
@@ -46,6 +46,7 @@
 
 [include ref/algorithms/buffer.qbk]
 
+
 [endsect]
 
 [section:make_buffer make_buffer]
@@ -64,7 +65,7 @@
 [table
 [[Type] [Concept] [Name] [Description] ]
 [[Output] [Any type fulfilling a Geometry Concept ] [ - ] [Must be specified]]
-[[Distance] [Numerical type (int, double, ttmath, ...) ] [ - ] [Must be specified]]
+[[Distance] [numerical type (int, double, ttmath, ...) ] [ - ] [Must be specified]]
 [[Input const &] [Any type fulfilling a Geometry Concept ] [geometry] [A model of the specified concept ]]
 [[T const &] [] [distance] [The distance to be used for the buffer ]]
 [[T const &] [] [chord_length] [(optional) The length of the chord's in the generated arcs around points or bends ]]

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -29,7 +29,7 @@
 [table
 [[Type] [Concept] [Name] [Description] ]
 [[Geometry const &] [Any type fulfilling a Geometry Concept ] [geometry] [A model of the specified concept ]]
-[[Point &] [Any type fulfilling a Point Concept ] [c] [the calculated centroid will be assigned to this point reference]]
+[[Point &] [point type ] [c] [the calculated centroid will be assigned to this point reference]]
 ]
 
 
@@ -44,6 +44,7 @@
 
 [include ref/algorithms/centroid.qbk]
 
+
 [endsect]
 
 [section:centroid_3_with_strategy centroid (with strategy)]
@@ -62,7 +63,7 @@
 [table
 [[Type] [Concept] [Name] [Description] ]
 [[Geometry const &] [Any type fulfilling a Geometry Concept ] [geometry] [A model of the specified concept ]]
-[[Point &] [Any type fulfilling a Point Concept ] [c] [A model of the specified Point Concept which is set to the centroid ]]
+[[Point &] [point type ] [c] [A model of the specified Point Concept which is set to the centroid ]]
 [[Strategy const &] [Any type fulfilling a Centroid Strategy Concept ] [strategy] [The strategy which will be used for centroid calculations]]
 ]
 
@@ -78,6 +79,7 @@
 
 [include ref/algorithms/centroid.qbk]
 
+
 [endsect]
 
 [section:make_centroid_2_with_strategy make_centroid (with strategy)]
@@ -95,7 +97,7 @@
 
 [table
 [[Type] [Concept] [Name] [Description] ]
-[[Point] [Any type fulfilling a Point Concept ] [ - ] [Must be specified]]
+[[Point] [point type ] [ - ] [Must be specified]]
 [[Geometry const &] [Any type fulfilling a Geometry Concept ] [geometry] [A model of the specified concept ]]
 [[Strategy const &] [Any type fulfilling a centroid Strategy Concept ] [strategy] [The strategy which will be used for centroid calculations ]]
 ]
@@ -115,6 +117,7 @@
 
 [include ref/algorithms/centroid.qbk]
 
+
 [endsect]
 
 [section:make_centroid_1 make_centroid]
@@ -132,13 +135,13 @@
 
 [table
 [[Type] [Concept] [Name] [Description] ]
-[[Point] [Any type fulfilling a Point Concept ] [ - ] [Must be specified]]
+[[Point] [point type ] [ - ] [Must be specified]]
 [[Geometry const &] [Any type fulfilling a Geometry Concept ] [geometry] [A model of the specified concept ]]
 ]
 
 
 [heading Returns]
-The calculated centroid
+The calculated centroid [include ref/algorithms/centroid.qbk]
 
 [heading Header]
 Either

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -27,9 +27,9 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename PointCentroid] []]
-[[typename Point] []]
+[[Parameter] [Default] [Description]]
+[[typename PointCentroid] [] []]
+[[typename Point] [PointCentroid] []]
 ]
 
 [heading Member Function(s)]

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -36,10 +36,10 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename Point] [point type of centroid to calculate ]]
-[[typename PointOfSegment] [point type of segments, defaults to Point ]]
-[[typename CalculationType] []]
+[[Parameter] [Default] [Description]]
+[[typename Point] [] [point type of centroid to calculate ]]
+[[typename PointOfSegment] [Point] [point type of segments, defaults to Point ]]
+[[typename CalculationType] [void] []]
 ]
 
 [heading Member Function(s)]

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -63,7 +63,7 @@
 [heading Member Function(s)]
 [table
 [[Function] [Description] [Parameters] [Returns] ]
-[[``< Range > & operator= (closing_iterator< Range > const &source)``
+[[``closing_iterator< Range > & operator= (closing_iterator< Range > const &source)``
 
 ] [] [[* < Range > const &]: ['source]:
 

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -94,7 +94,7 @@
 [[Type] [Concept] [Name] [Description] ]
 [[Geometry1 const &] [Any type fulfilling a Geometry Concept ] [geometry1] [A model of the specified concept ]]
 [[Geometry2 const &] [Any type fulfilling a Geometry Concept ] [geometry2] [A model of the specified concept ]]
-[[Strategy const &] [Any type fulfilling a distance Strategy Concept ] [strategy] [The strategy which will be used for distance calculations ]]
+[[Strategy const &] [Any type fulfilling a Distance Strategy Concept ] [strategy] [The strategy which will be used for distance calculations ]]
 ]
 
 
@@ -110,11 +110,13 @@
 
 `#include <boost/geometry/algorithms/distance.hpp>`
 
-[heading Available strategies]
+[heading Available Strategies]
 * [link geometry.reference.strategies.strategy_distance_pythagoras Pythagoras (cartesian)]
 * [link geometry.reference.strategies.strategy_distance_haversine Haversine (spherical)]
 * [link geometry.reference.strategies.strategy_distance_cross_track Cross track (spherical, point-to-segment)]
 * [link geometry.reference.strategies.strategy_distance_projected_point Projected point (cartesian, point-to-segment)]
+* more (currently extensions): Vincenty, Andoyer (geographic)
+
 
 [endsect]
 

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -30,11 +30,11 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename Point] [point type ]]
-[[typename PointOfSegment] [optional, segment point type, defaults to point type ]]
-[[typename CalculationType] [optional, numeric type for calculation (e.g. high precision) ]]
-[[typename Strategy] [strategy, optional, underlying point-point distance strategy, defaults to haversine]]
+[[Parameter] [Default] [Description]]
+[[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]]
 ]
 
 [heading Constructor(s)]
@@ -67,7 +67,7 @@
 [heading Member Function(s)]
 [table
 [[Function] [Description] [Parameters] [Returns] ]
-[[`` apply (Point const &p, PointOfSegment const &sp1, PointOfSegment const &sp2) const ``
+[[``return_type apply (Point const &p, PointOfSegment const &sp1, PointOfSegment const &sp2) const ``
 
 ] [] [[* Point const &]: ['p]:
 
@@ -79,7 +79,7 @@
 
 
 ]]
-[[`` radius () const ``
+[[``return_type radius () const ``
 
 ] [] [
 
@@ -92,5 +92,6 @@
 
 [heading See also]
 [link geometry.reference.algorithms.distance.distance_3_with_strategy distance]
+
 [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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -27,10 +27,10 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename Point1] [first point type ]]
-[[typename Point2] [optional, second point type, defaults to first point type ]]
-[[typename CalculationType] [optional, numeric type for calculation (e.g. high precision) ]]
+[[Parameter] [Default] [Description]]
+[[typename Point1] [] [first point type ]]
+[[typename Point2] [Point1] [second 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 Constructor(s)]
@@ -49,7 +49,7 @@
 [heading Member Function(s)]
 [table
 [[Function] [Description] [Parameters] [Returns] ]
-[[`` apply (Point1 const &p1, Point2 const &p2) const ``
+[[``calculation_type apply (Point1 const &p1, Point2 const &p2) const ``
 
 ] [applies the distance calculation ] [[* Point1 const &]: ['p1]: first point
 
@@ -62,7 +62,7 @@
 
 
 ]]
-[[`` radius () const ``
+[[``calculation_type radius () const ``
 
 ] [access to radius value ] [
 
@@ -78,5 +78,6 @@
 
 [heading See also]
 [link geometry.reference.algorithms.distance.distance_3_with_strategy distance]
+
 [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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -30,17 +30,17 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename Point] [point type ]]
-[[typename PointOfSegment] [optional, segment point type, defaults to point type ]]
-[[typename CalculationType] [optional, numeric type for calculation (e.g. high precision) ]]
-[[typename Strategy] [strategy, optional, underlying point-point distance strategy, defaults to pythagoras ]]
+[[Parameter] [Default] [Description]]
+[[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 ]]
 ]
 
 [heading Member Function(s)]
 [table
 [[Function] [Description] [Parameters] [Returns] ]
-[[`` apply (Point const &p, PointOfSegment const &p1, PointOfSegment const &p2) const ``
+[[``calculation_type apply (Point const &p, PointOfSegment const &p1, PointOfSegment const &p2) const ``
 
 ] [] [[* Point const &]: ['p]:
 
@@ -59,5 +59,6 @@
 
 [heading See also]
 [link geometry.reference.algorithms.distance.distance_3_with_strategy distance]
+
 [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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -27,16 +27,16 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename Point1] [first point type ]]
-[[typename Point2] [optional, second point type, defaults to first point type ]]
-[[typename CalculationType] [optional, numeric type for calculation (e.g. high precision)]]
+[[Parameter] [Default] [Description]]
+[[typename Point1] [] [first point type ]]
+[[typename Point2] [Point1] [second 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] ]
-[[`` apply (Point1 const &p1, Point2 const &p2)``
+[[``calculation_type apply (Point1 const &p1, Point2 const &p2)``
 
 ] [applies the distance calculation using pythagoras ] [[* Point1 const &]: ['p1]: first point
 
@@ -58,5 +58,6 @@
 [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]
+
 [endsect]
 

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -47,25 +47,25 @@
 [heading Member Function(s)]
 [table
 [[Function] [Description] [Parameters] [Returns] ]
-[[`` begin () const ``
+[[``const_iterator begin () const ``
 
 ] [] [
 
 
 ]]
-[[`` end () const ``
+[[``const_iterator end () const ``
 
 ] [] [
 
 
 ]]
-[[`` begin ()``
+[[``iterator begin ()``
 
 ] [] [
 
 
 ]]
-[[`` end ()``
+[[``iterator end ()``
 
 ] [] [
 

Modified: trunk/libs/geometry/doc/reference/intersection.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/intersection.qbk (original)
+++ trunk/libs/geometry/doc/reference/intersection.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -45,6 +45,7 @@
 
 [include ref/algorithms/intersection.qbk]
 
+
 [endsect]
 
 [section:intersection_inserter_3 intersection_inserter]
@@ -77,6 +78,7 @@
 
 [include ref/algorithms/intersection.qbk]
 
+
 [endsect]
 
 [section:intersection_inserter_4_with_strategy intersection_inserter (with strategy)]
@@ -110,5 +112,6 @@
 
 [include ref/algorithms/intersection.qbk]
 
+
 [endsect]
 

Modified: trunk/libs/geometry/doc/reference/intersects.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/intersects.qbk (original)
+++ trunk/libs/geometry/doc/reference/intersects.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -44,6 +44,7 @@
 
 [include ref/algorithms/intersects.qbk]
 
+
 [endsect]
 
 [section:intersects_1_one_geometry intersects (one geometry)]
@@ -76,5 +77,6 @@
 
 [include ref/algorithms/intersects.qbk]
 
+
 [endsect]
 

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -48,6 +48,7 @@
 [include ref/algorithms/length.qbk]
 [length_with_strategy] [length_with_strategy_output]
 
+
 [endsect]
 
 [section:length_1 length]
@@ -84,5 +85,6 @@
 [include ref/algorithms/length.qbk]
 [length] [length_output]
 
+
 [endsect]
 

Modified: trunk/libs/geometry/doc/reference/linestring.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/linestring.qbk (original)
+++ trunk/libs/geometry/doc/reference/linestring.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -15,7 +15,10 @@
 [/ Generated from doxy/doxygen_output/xml/classboost_1_1geometry_1_1model_1_1linestring.xml]
 [section:model_linestring model::linestring]
 
-Allocator linestring (named so by OGC) is a collection (default a vector) of points.
+A linestring (named so by OGC) is a collection (default a vector) of points.
+
+[heading Model of]
+[link geometry.reference.concepts.concept_linestring Linestring Concept]
 
 [heading Synopsis]
 ``template<typename Point, template< typename, typename > class Container, template< typename > class Allocator>
@@ -27,10 +30,10 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename Point] [point type ]]
-[[template< typename, typename > class Container] [optional container type, for example std::vector, std::list, std::deque ]]
-[[template< typename > class Allocator] [optional container-allocator-type (see ]]
+[[Parameter] [Default] [Description]]
+[[typename Point] [] [point type ]]
+[[template< typename, typename > class Container] [std::vector] [container type, for example std::vector, std::deque ]]
+[[template< typename > class Allocator] [std::allocator] [container-allocator-type]]
 ]
 
 [heading Constructor(s)]
@@ -38,14 +41,14 @@
 [[Function] [Description] [Parameters] ]
 [[``linestring ()``
 
-] [] [
+] [Default constructor, creating an empty linestring. ] [
 
 
 ]]
 [[``template<typename Iterator>
 linestring (Iterator begin, Iterator end)``
 
-] [] [[* Iterator]: ['begin]:
+] [Constructor with begin and end, filling the linestring. ] [[* Iterator]: ['begin]:
 
 [* Iterator]: ['end]:
 

Modified: trunk/libs/geometry/doc/reference/multi_linestring.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/multi_linestring.qbk (original)
+++ trunk/libs/geometry/doc/reference/multi_linestring.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -18,10 +18,13 @@
 multi_line, a collection of linestring
 
 [heading Description]
-Multi-linestring can be used to group lines belonging to each other, e.g. a highway (with interruptions)
+Multi-linestring can be used to group lines belonging to each other, e.g. a highway (with interruptions)
+
+[heading Model of]
+[link geometry.reference.concepts.concept_multi_linestring MultiLineString Concept]
 
 [heading Synopsis]
-``template<typename L, template< typename, typename > class V, template< typename > class A>
+``template<typename LineString, template< typename, typename > class Container, template< typename > class Allocator>
 class model::multi_linestring
 {
   // ...
@@ -30,10 +33,10 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename L] []]
-[[template< typename, typename > class V] []]
-[[template< typename > class A] []]
+[[Parameter] [Default] [Description]]
+[[typename LineString] [] []]
+[[template< typename, typename > class Container] [std::vector] []]
+[[template< typename > class Allocator] [std::allocator] []]
 ]
 
 [heading Header]

Modified: trunk/libs/geometry/doc/reference/multi_point.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/multi_point.qbk (original)
+++ trunk/libs/geometry/doc/reference/multi_point.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -17,11 +17,11 @@
 
 multi_point, a collection of points
 
-[heading Description]
-Multipoint can be used to group points belonging to each other, e.g. a constellation
+[heading Model of]
+[link geometry.reference.concepts.concept_multi_point MultiPoint Concept]
 
 [heading Synopsis]
-``template<typename P, template< typename, typename > class V, template< typename > class A>
+``template<typename Point, template< typename, typename > class Container, template< typename > class Allocator>
 class model::multi_point
 {
   // ...
@@ -30,10 +30,32 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename P] []]
-[[template< typename, typename > class V] []]
-[[template< typename > class A] []]
+[[Parameter] [Default] [Description]]
+[[typename Point] [] [point type ]]
+[[template< typename, typename > class Container] [std::vector] [container type, for example std::vector, std::deque ]]
+[[template< typename > class Allocator] [std::allocator] [container-allocator-type]]
+]
+
+[heading Constructor(s)]
+[table
+[[Function] [Description] [Parameters] ]
+[[``multi_point ()``
+
+] [Default constructor, creating an empty multi_point. ] [
+
+
+]]
+[[``template<typename Iterator>
+multi_point (Iterator begin, Iterator end)``
+
+] [Constructor with begin and end, filling the multi_point. ] [[* Iterator]: ['begin]:
+
+[* Iterator]: ['end]:
+
+
+
+
+]]
 ]
 
 [heading Header]

Modified: trunk/libs/geometry/doc/reference/multi_polygon.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/multi_polygon.qbk (original)
+++ trunk/libs/geometry/doc/reference/multi_polygon.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -18,10 +18,13 @@
 multi_polygon, a collection of polygons
 
 [heading Description]
-Multi-polygon can be used to group polygons belonging to each other, e.g. Hawaii
+Multi-polygon can be used to group polygons belonging to each other, e.g. Hawaii
+
+[heading Model of]
+[link geometry.reference.concepts.concept_multi_polygon MultiPolygon Concept]
 
 [heading Synopsis]
-``template<typename P, template< typename, typename > class V, template< typename > class A>
+``template<typename Polygon, template< typename, typename > class Container, template< typename > class Allocator>
 class model::multi_polygon
 {
   // ...
@@ -30,10 +33,10 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename P] []]
-[[template< typename, typename > class V] []]
-[[template< typename > class A] []]
+[[Parameter] [Default] [Description]]
+[[typename Polygon] [] []]
+[[template< typename, typename > class Container] [std::vector] []]
+[[template< typename > class Allocator] [std::allocator] []]
 ]
 
 [heading Header]

Modified: trunk/libs/geometry/doc/reference/num_geometries.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/num_geometries.qbk (original)
+++ trunk/libs/geometry/doc/reference/num_geometries.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -46,5 +46,6 @@
 
 [include ref/algorithms/num_geometries.qbk]
 
+
 [endsect]
 

Modified: trunk/libs/geometry/doc/reference/num_interior_rings.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/num_interior_rings.qbk (original)
+++ trunk/libs/geometry/doc/reference/num_interior_rings.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -46,5 +46,6 @@
 
 [include ref/algorithms/num_interior_rings.qbk]
 
+
 [endsect]
 

Modified: trunk/libs/geometry/doc/reference/num_points.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/num_points.qbk (original)
+++ trunk/libs/geometry/doc/reference/num_points.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -47,5 +47,6 @@
 
 [include ref/algorithms/num_points.qbk]
 
+
 [endsect]
 

Modified: trunk/libs/geometry/doc/reference/perimeter.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/perimeter.qbk (original)
+++ trunk/libs/geometry/doc/reference/perimeter.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -47,6 +47,7 @@
 
 [include ref/algorithms/perimeter.qbk]
 
+
 [endsect]
 
 [section:perimeter_1 perimeter]
@@ -82,5 +83,6 @@
 
 [include ref/algorithms/perimeter.qbk]
 
+
 [endsect]
 

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -18,7 +18,10 @@
 Basic point class, having coordinates defined in a neutral way.
 
 [heading Description]
-Defines a neutral point class, fulfilling the Point Concept. Library users can use this point class, or use their own point classes. This point class is used in most of the samples and tests of Boost.Geometry This point class is used occasionally within the library, where a temporary point class is necessary.
+Defines a neutral point class, fulfilling the Point Concept. Library users can use this point class, or use their own point classes. This point class is used in most of the samples and tests of Boost.Geometry This point class is used occasionally within the library, where a temporary point class is necessary.
+
+[heading Model of]
+[link geometry.reference.concepts.concept_point Point Concept]
 
 [heading Synopsis]
 ``template<typename CoordinateType, std::size_t DimensionCount, typename CoordinateSystem>
@@ -31,7 +34,7 @@
 [heading Template parameter(s)]
 [table
 [[Parameter] [Description]]
-[[typename CoordinateType] [Numerical type (int, double, ttmath, ...) ]]
+[[typename CoordinateType] [numerical type (int, double, ttmath, ...) ]]
 [[std::size_t DimensionCount] [number of coordinates, usually 2 or 3 ]]
 [[typename CoordinateSystem] [coordinate system, for example cs::cartesian]]
 ]
@@ -93,5 +96,6 @@
 `#include <boost/geometry/geometries/point.hpp>`
 
 [include ref/geometries/point.qbk]
+
 [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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -17,6 +17,9 @@
 
 2D point in Cartesian coordinate system
 
+[heading Model of]
+[link geometry.reference.concepts.concept_point Point Concept]
+
 [heading Synopsis]
 ``template<typename CoordinateType, typename CoordinateSystem>
 class model::d2::point_xy
@@ -27,9 +30,9 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename CoordinateType] [numeric type, for example, double, float, int ]]
-[[typename CoordinateSystem] [coordinate system, defaults to cs::cartesian]]
+[[Parameter] [Default] [Description]]
+[[typename CoordinateType] [] [numeric type, for example, double, float, int ]]
+[[typename CoordinateSystem] [cs::cartesian] [coordinate system, defaults to cs::cartesian]]
 ]
 
 [heading Constructor(s)]

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -15,10 +15,13 @@
 [/ Generated from doxy/doxygen_output/xml/classboost_1_1geometry_1_1model_1_1polygon.xml]
 [section:model_polygon model::polygon]
 
-The
+The polygon contains an outer ring and zero or more inner rings.
+
+[heading Model of]
+[link geometry.reference.concepts.concept_polygon Polygon Concept]
 
 [heading Synopsis]
-``template<typename Point, bool ClockWise, bool Closed, template< typename, typename > class PointList, template< typename, typename > class RingList, template< typename > class PointAlloc, template< typename > class RingAlloc, >
+``template<typename Point, bool ClockWise, bool Closed, template< typename, typename > class PointList, template< typename, typename > class RingList, template< typename > class PointAlloc, template< typename > class RingAlloc>
 class model::polygon
 {
   // ...
@@ -27,39 +30,38 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename Point] []]
-[[bool ClockWise] [optional parameter, true for clockwise direction, false for CounterClockWise direction ]]
-[[bool Closed] [optional parameter, true for closed polygons (last point == first point), false open points ]]
-[[template< typename, typename > class PointList] [optional container type for points, for example std::vector, std::list, std::deque ]]
-[[template< typename, typename > class RingList] [optional container type for inner rings, for example std::vector, std::list, std::deque ]]
-[[template< typename > class PointAlloc] [container-allocator-type ]]
-[[template< typename > class RingAlloc] [container-allocator-type ]]
-[[] [point type ]]
+[[Parameter] [Default] [Description]]
+[[typename Point] [] [point type ]]
+[[bool ClockWise] [true] [true for clockwise direction, false for CounterClockWise direction ]]
+[[bool Closed] [true] [true for closed polygons (last point == first point), false open points ]]
+[[template< typename, typename > class PointList] [std::vector] [container type for points, for example std::vector, std::list, std::deque ]]
+[[template< typename, typename > class RingList] [std::vector] [container type for inner rings, for example std::vector, std::list, std::deque ]]
+[[template< typename > class PointAlloc] [std::allocator] [container-allocator-type, for the points ]]
+[[template< typename > class RingAlloc] [std::allocator] [container-allocator-type, for the rings ]]
 ]
 
 [heading Member Function(s)]
 [table
 [[Function] [Description] [Parameters] [Returns] ]
-[[`` const & outer () const ``
+[[``ring_type const & outer () const ``
 
 ] [] [
 
 
 ]]
-[[`` const & inners () const ``
+[[``inner_container_type const & inners () const ``
 
 ] [] [
 
 
 ]]
-[[`` & outer ()``
+[[``ring_type & outer ()``
 
 ] [] [
 
 
 ]]
-[[`` & inners ()``
+[[``inner_container_type & inners ()``
 
 ] [] [
 

Modified: trunk/libs/geometry/doc/reference/register.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/register.qbk (original)
+++ trunk/libs/geometry/doc/reference/register.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -40,6 +40,7 @@
 
 [include ref/geometries/register/point.qbk]
 
+
 [endsect]
 
 [section:boost_geometry_register_point_2d_const BOOST_GEOMETRY_REGISTER_POINT_2D_CONST]

Modified: trunk/libs/geometry/doc/reference/ring.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/ring.qbk (original)
+++ trunk/libs/geometry/doc/reference/ring.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -12,14 +12,17 @@
 
 
 [/ Generated by doxygen_xml2qbk, don't change, will be overwritten automatically]
-[/ Generated from doxy/doxygen_output/xml/classboost_1_1geometry_1_1model_1_1linear__ring.xml]
-[section:model_linear_ring model::linear_ring]
+[/ Generated from doxy/doxygen_output/xml/classboost_1_1geometry_1_1model_1_1ring.xml]
+[section:model_ring model::ring]
 
-A linear_ring (linear linear_ring) is a closed line which should not be selfintersecting.
+A ring (aka linear ring) is a closed line which should not be selfintersecting.
+
+[heading Model of]
+[link geometry.reference.concepts.concept_ring Ring Concept]
 
 [heading Synopsis]
 ``template<typename Point, bool ClockWise, bool Closed, template< typename, typename > class Container, template< typename > class Allocator>
-class model::linear_ring
+class model::ring
 {
   // ...
 };
@@ -27,27 +30,27 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename Point] [point type ]]
-[[bool ClockWise] []]
-[[bool Closed] []]
-[[template< typename, typename > class Container] [optional container type, for example std::vector, std::list, std::deque ]]
-[[template< typename > class Allocator] [optional container-allocator-type ]]
+[[Parameter] [Default] [Description]]
+[[typename Point] [] [point type ]]
+[[bool ClockWise] [true] [true for clockwise direction, false for CounterClockWise direction ]]
+[[bool Closed] [true] [true for closed polygons (last point == first point), false open points ]]
+[[template< typename, typename > class Container] [std::vector] [container type, for example std::vector, std::deque ]]
+[[template< typename > class Allocator] [std::allocator] [container-allocator-type]]
 ]
 
 [heading Constructor(s)]
 [table
 [[Function] [Description] [Parameters] ]
-[[``linear_ring ()``
+[[``ring ()``
 
-] [] [
+] [Default constructor, creating an empty ring. ] [
 
 
 ]]
 [[``template<typename Iterator>
-linear_ring (Iterator begin, Iterator end)``
+ring (Iterator begin, Iterator end)``
 
-] [] [[* Iterator]: ['begin]:
+] [Constructor with begin and end, filling the ring. ] [[* Iterator]: ['begin]:
 
 [* Iterator]: ['end]:
 
@@ -64,7 +67,7 @@
 
 Or
 
-`#include <boost/geometry/geometries/linear_ring.hpp>`
+`#include <boost/geometry/geometries/ring.hpp>`
 
 [endsect]
 

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -47,13 +47,13 @@
 [heading Member Function(s)]
 [table
 [[Function] [Description] [Parameters] [Returns] ]
-[[`` begin () const ``
+[[``const_iterator begin () const ``
 
 ] [] [
 
 
 ]]
-[[`` end () const ``
+[[``const_iterator end () 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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -63,7 +63,7 @@
 [heading Member Function(s)]
 [table
 [[Function] [Description] [Parameters] [Returns] ]
-[[``< Segment > & operator= (segment_range_iterator< Segment > const &source)``
+[[``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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -30,8 +30,8 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename CalculationType] [CalculationType ]]
+[[Parameter] [Default] [Description]]
+[[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)]

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -30,8 +30,8 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename CalculationType] [CalculationType ]]
+[[Parameter] [Default] [Description]]
+[[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)]

Modified: trunk/libs/geometry/doc/reference/simplify.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/simplify.qbk (original)
+++ trunk/libs/geometry/doc/reference/simplify.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -27,7 +27,7 @@
 [[Type] [Concept] [Name] [Description] ]
 [[Geometry const &] [Any type fulfilling a Geometry Concept ] [geometry] [input geometry, to be simplified ]]
 [[Geometry &] [Any type fulfilling a Geometry Concept ] [out] [output geometry, simplified version of the input geometry ]]
-[[Distance const &] [Numerical type (int, double, ttmath, ...) ] [max_distance] [distance (in units of input coordinates) of a vertex to other segments to be removed]]
+[[Distance const &] [numerical type (int, double, ttmath, ...) ] [max_distance] [distance (in units of input coordinates) of a vertex to other segments to be removed]]
 ]
 
 
@@ -42,6 +42,7 @@
 
 [include ref/algorithms/simplify.qbk]
 
+
 [endsect]
 
 [section:simplify_4_with_strategy simplify (with strategy)]
@@ -104,6 +105,7 @@
 
 [include ref/algorithms/simplify_inserter.qbk]
 
+
 [endsect]
 
 [section:simplify_inserter_4_with_strategy simplify_inserter (with strategy)]
@@ -136,5 +138,6 @@
 
 [include ref/algorithms/simplify.qbk]
 
+
 [endsect]
 

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -27,13 +27,13 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename P1] [first point type ]]
-[[typename P2] [second point type ]]
-[[bool Mirror] [if true map is mirrored upside-down (in most cases pixels are from top to bottom, while map is from bottom to top) ]]
-[[bool SameScale] []]
-[[std::size_t Dimension1] []]
-[[std::size_t Dimension2] []]
+[[Parameter] [Default] [Description]]
+[[typename P1] [] [first point type ]]
+[[typename P2] [] [second point type ]]
+[[bool Mirror] [false] [if true map is mirrored upside-down (in most cases pixels are from top to bottom, while map is from bottom to top) ]]
+[[bool SameScale] [true] []]
+[[std::size_t Dimension1] [dimension<P1>::type::value] []]
+[[std::size_t Dimension2] [dimension<P2>::type::value] []]
 ]
 
 [heading Constructor(s)]

Modified: trunk/libs/geometry/doc/reference/transform_scale_transformer.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/transform_scale_transformer.qbk (original)
+++ trunk/libs/geometry/doc/reference/transform_scale_transformer.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -30,11 +30,11 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename P1] [first point type ]]
-[[typename P2] [second point type ]]
-[[std::size_t Dimension1] [number of dimensions to transform to second point, optional ]]
-[[std::size_t Dimension2] []]
+[[Parameter] [Default] [Description]]
+[[typename P1] [] [first point type ]]
+[[typename P2] [P1] [second point type ]]
+[[std::size_t Dimension1] [geometry::dimension<P1>::type::value] [number of dimensions to transform to second point ]]
+[[std::size_t Dimension2] [geometry::dimension<P2>::type::value] []]
 ]
 
 [heading Header]

Modified: trunk/libs/geometry/doc/reference/transform_translate_transformer.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/transform_translate_transformer.qbk (original)
+++ trunk/libs/geometry/doc/reference/transform_translate_transformer.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -30,11 +30,11 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename P1] [first point type ]]
-[[typename P2] [second point type ]]
-[[std::size_t Dimension1] [number of dimensions to transform to second point, optional ]]
-[[std::size_t Dimension2] []]
+[[Parameter] [Default] [Description]]
+[[typename P1] [] [first point type ]]
+[[typename P2] [] [second point type ]]
+[[std::size_t Dimension1] [geometry::dimension<P1>::type::value] [number of dimensions to transform to second point ]]
+[[std::size_t Dimension2] [geometry::dimension<P2>::type::value] []]
 ]
 
 [heading Header]

Modified: trunk/libs/geometry/doc/reference/transform_ublas_transformer.qbk
==============================================================================
--- trunk/libs/geometry/doc/reference/transform_ublas_transformer.qbk (original)
+++ trunk/libs/geometry/doc/reference/transform_ublas_transformer.qbk 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -33,7 +33,7 @@
 [[Parameter] [Description]]
 [[typename P1] [first point type (source) ]]
 [[typename P2] [second point type (target) ]]
-[[std::size_t Dimension1] [number of dimensions to transform to second point, optional ]]
+[[std::size_t Dimension1] [number of dimensions to transform to second point ]]
 [[std::size_t Dimension2] []]
 ]
 

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -27,10 +27,10 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename Point] []]
-[[typename PointOfSegment] []]
-[[typename CalculationType] []]
+[[Parameter] [Default] [Description]]
+[[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 ]]
 ]
 
 [heading Member Function(s)]

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -27,10 +27,10 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename Point] []]
-[[typename PointOfSegment] []]
-[[typename CalculationType] []]
+[[Parameter] [Default] [Description]]
+[[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 ]]
 ]
 
 [heading Member Function(s)]

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -27,10 +27,10 @@
 
 [heading Template parameter(s)]
 [table
-[[Parameter] [Description]]
-[[typename Point] [point type of point to examine ]]
-[[typename PointOfSegment] [point type of segments, defaults to Point ]]
-[[typename CalculationType] []]
+[[Parameter] [Default] [Description]]
+[[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 ]]
 ]
 
 [heading Member Function(s)]

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -15,27 +15,46 @@
 
 
 // contains (template)parameter
-struct param
+struct parameter
 {
     std::string name;
     std::string description;
     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 markup
 {
- int code;
     std::string value;
+ markup_order_type order;
+ markup_type type;
+
+ markup(std::string const& v = "")
+ : value(v)
+ , order(markup_any)
+ , type(markup_default)
+ {
+ init();
+ }
 
- markup(int c = 0, std::string const& v = "")
- : code(c)
- , value(v)
+ markup(markup_order_type o, markup_type t, std::string const& v = "")
+ : value(v)
+ , order(o)
+ , type(t)
+ {
+ init();
+ }
+
+ void init()
     {
         boost::trim(value);
         boost::replace_all(value, "\\*", "*");
     }
-
 };
 
 // Basic element, base of a class/struct, function, define
@@ -54,8 +73,8 @@
     // Filled with: \qbk{distinguish,<A discerning description>}
     std::string additional_description;
 
- std::vector<param> template_parameters;
- std::vector<param> parameters;
+ std::vector<parameter> template_parameters;
+ std::vector<parameter> parameters;
 
     element()
         : line(0)

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -47,10 +47,10 @@
 
 int main(int argc, char** argv)
 {
+ std::string filename;
     try
     {
         configuration config;
- std::string filename;
         std::string copyright_filename;
 
         // Read/get configuration
@@ -168,11 +168,18 @@
     }
     catch(std::exception const& e)
     {
- std::cerr << "Exception: " << e.what() << std::endl;
+ std::cerr << "Exception in doxygen_xml2qbk: " << std::endl
+ << " Message: " << e.what() << std::endl
+ << " File: " << filename << std::endl
+ << " Type: " << typeid(e).name() << std::endl
+ << std::endl;
+ return 1;
     }
     catch(...)
     {
- std::cerr << "Unknown exception!" << std::endl;
+ std::cerr << "Unknown exception in doxygen_xml2qbk"
+ << std::endl;
+ return 1;
     }
     return 0;
 }

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -34,9 +34,9 @@
 
 
 
-static inline void add_or_set(std::vector<param>& parameters, param const& p)
+static inline void add_or_set(std::vector<parameter>& parameters, parameter const& p)
 {
- std::vector<param>::iterator it = std::find_if(parameters.begin(), parameters.end(), par_by_name(p.name));
+ 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;
@@ -49,8 +49,16 @@
     }
 }
 
-// -------------------------------------------------------------
-// -------------------------------------------------------------
+/// Parses a "para" element
+/*
+This is used for different purposes within Doxygen.
+- Either a detailed description, possibly containing several sections (para's)
+ -> so parse next siblings
+- Or a detailed description also containing qbk records
+
+So we have to list explicitly either where to recurse, or where not to...
+
+*/
 static void parse_para(rapidxml::xml_node<>* node, std::string& contents, bool first = true)
 {
     if (node != NULL)
@@ -59,13 +67,15 @@
         {
             //std::cout << "ELEMENT: " << node->name() << "=" << node->value() << std::endl;
             std::string name = node->name();
- if (! boost::equals(name, "para")
- && ! boost::equals(name, "ref")
- && ! boost::equals(name, "verbatim"))
- {
- return;
- }
- if (boost::equals(name, "para") && ! first)
+ if (! (
+ (boost::equals(name, "para") && first)
+ || boost::equals(name, "ref")
+ || boost::equals(name, "defval")
+ || boost::equals(name, "verbatim")
+ || boost::equals(name, "bold")
+ || boost::equals(name, "emphasis")
+ || boost::equals(name, "linebreak")
+ ))
             {
                 return;
             }
@@ -85,8 +95,11 @@
 }
 
 
-static void parse_parameter(rapidxml::xml_node<>* node, param& p)
+static void parse_parameter(rapidxml::xml_node<>* node, parameter& p)
 {
+ // #define: <param><defname>Point</defname></param>
+ // template: <param><type>typename</type><declname>CoordinateType</declname><defname>CoordinateType</defname></param>
+ // template with default: <param><type>typename</type><declname>CoordinateSystem</declname><defname>CoordinateSystem</defname><defval><ref ....>cs::cartesian</ref></defval></param>
     if (node != NULL)
     {
         std::string name = node->name();
@@ -102,8 +115,11 @@
         }
         else if (name == "declname") p.name = node->value();
         else if (name == "parametername") p.name = node->value();
- // Define: <param><defname>Point</defname></param>
- else if (name == "defname") p.name = node->value(); // for defines
+ else if (name == "defname") p.name = node->value();
+ else if (name == "defval")
+ {
+ parse_para(node, p.default_value);
+ }
         else if (name == "para")
         {
              parse_para(node, p.description);
@@ -124,12 +140,12 @@
 
         if (name == "parameteritem")
         {
- param p;
+ parameter p;
             parse_parameter(node->first_node(), p);
             if (! p.name.empty())
             {
                 // Copy its description
- std::vector<param>::iterator it = std::find_if(parameters.begin(),
+ std::vector<parameter>::iterator it = std::find_if(parameters.begin(),
                     parameters.end(), par_by_name(p.name));
                 if (it != parameters.end())
                 {
@@ -144,7 +160,7 @@
         else if (name == "param")
         {
             // Element of 'templateparamlist.param (.type,.declname,.defname)'
- param p;
+ parameter p;
             parse_parameter(node->first_node(), p);
 
             // Doxygen handles templateparamlist param's differently:
@@ -215,11 +231,15 @@
         }
         else if (full == ".detaileddescription.para.qbk")
         {
- el.qbk_markup.push_back(markup(0, node->value()));
+ el.qbk_markup.push_back(markup(node->value()));
+ }
+ else if (full == ".detaileddescription.para.qbk.after.synopsis")
+ {
+ el.qbk_markup.push_back(markup(markup_after, markup_synopsis, node->value()));
         }
- else if (full == ".detaileddescription.para.qbk.include")
+ else if (full == ".detaileddescription.para.qbk.before.synopsis")
         {
- el.qbk_markup.push_back(markup(1, node->value()));
+ el.qbk_markup.push_back(markup(markup_before, markup_synopsis, node->value()));
         }
         else if (full == ".detaileddescription.para.qbk.distinguish")
         {
@@ -267,13 +287,13 @@
         }
         else if (full == ".param")
         {
- param p;
+ parameter p;
             parse_parameter(node->first_node(), p);
             add_or_set(f.parameters, p);
         }
         else if (full == ".type")
         {
- f.return_type = node->value();
+ get_contents(node->first_node(), f.return_type);
         }
         else if (full == ".detaileddescription.para.simplesect")
         {

Modified: trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/parameter_predicates.hpp
==============================================================================
--- trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/parameter_predicates.hpp (original)
+++ trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/parameter_predicates.hpp 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -22,7 +22,7 @@
         : m_name(n)
     {}
 
- inline bool operator()(param const& p)
+ inline bool operator()(parameter const& p)
     {
         return p.name == m_name;
     }
@@ -38,7 +38,7 @@
         : m_type(n)
     {}
 
- inline bool operator()(param const& p)
+ inline bool operator()(parameter const& p)
     {
         return p.type == m_type;
     }

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-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -19,13 +19,13 @@
 #include <parameter_predicates.hpp>
 
 
-void quickbook_template_parameter_list(std::vector<param> const& parameters, std::ostream& out, bool name = false)
+void quickbook_template_parameter_list(std::vector<parameter> const& parameters, std::ostream& out, bool name = false)
 {
     if (!parameters.empty())
     {
         out << "template<" ;
         bool first = true;
- BOOST_FOREACH(param const& p, parameters)
+ BOOST_FOREACH(parameter const& p, parameters)
         {
             out << (first ? "" : ", ") << p.fulltype;
             first = false;
@@ -54,7 +54,7 @@
             {
                 out << "#define " << f.name;
                 bool first = true;
- BOOST_FOREACH(param const& p, f.parameters)
+ BOOST_FOREACH(parameter const& p, f.parameters)
                 {
                     out << (first ? "(" : ", ") << p.name;
                     first = false;
@@ -73,7 +73,8 @@
     {
         out << " " << f.argsstring;
     }
- out << "``" << std::endl
+ out << "``"
+ << std::endl
         << std::endl;
 }
 
@@ -136,26 +137,28 @@
 }
 
 
-void quickbook_markup(std::vector<markup> const& qbk_markup, std::ostream& out)
+void quickbook_markup(std::vector<markup> const& qbk_markup,
+ markup_order_type order, markup_type type,
+ std::ostream& out)
 {
+ bool has_output = false;
     BOOST_FOREACH(markup const& inc, qbk_markup)
     {
- switch(inc.code)
+ if (inc.type == type && inc.order == order)
         {
- case 0 :
- // Verbatim
- out << inc.value << std::endl;
- break;
- case 1 :
- out << "[include " << inc.value << "]" << std::endl;
- break;
+ out << inc.value << std::endl;
+ has_output = true;
         }
     }
+ if (has_output)
+ {
+ out << std::endl;
+ }
 }
 
 
 
-void quickbook_heading_string(std::string const& heading,
+void quickbook_string_with_heading_if_present(std::string const& heading,
             std::string const& contents, std::ostream& out)
 {
     if (! contents.empty())
@@ -206,10 +209,14 @@
     out << f.brief_description << std::endl;
     out << std::endl;
 
- quickbook_heading_string("Description", f.detailed_description, out);
+ quickbook_string_with_heading_if_present("Description", f.detailed_description, out);
 
+ // Synopsis
+ quickbook_markup(f.qbk_markup, markup_before, markup_synopsis, out);
     out << "[heading Synopsis]" << std::endl;
     quickbook_synopsis(f, out);
+ quickbook_markup(f.qbk_markup, markup_after, markup_synopsis, out);
+
 
     out << "[heading Parameters]" << std::endl
         << std::endl;
@@ -222,9 +229,9 @@
     out << "[Name] [Description] ]" << std::endl;
 
     // First: output any template parameter which is NOT used in the normal parameter list
- BOOST_FOREACH(param const& tp, f.template_parameters)
+ BOOST_FOREACH(parameter const& tp, f.template_parameters)
     {
- std::vector<param>::const_iterator it = std::find_if(f.parameters.begin(), f.parameters.end(), par_by_type(tp.name));
+ std::vector<parameter>::const_iterator it = std::find_if(f.parameters.begin(), f.parameters.end(), par_by_type(tp.name));
 
         if (it == f.parameters.end())
         {
@@ -233,10 +240,10 @@
 
     }
 
- BOOST_FOREACH(param const& p, f.parameters)
+ BOOST_FOREACH(parameter const& p, f.parameters)
     {
         out << "[";
- std::vector<param>::const_iterator it = std::find_if(f.template_parameters.begin(),
+ std::vector<parameter>::const_iterator it = std::find_if(f.template_parameters.begin(),
             f.template_parameters.end(), par_by_name(p.type));
 
         if (f.type != function_define)
@@ -254,10 +261,10 @@
         << std::endl
         << std::endl;
 
- quickbook_heading_string("Returns", f.return_description, out);
+ quickbook_string_with_heading_if_present("Returns", f.return_description, out);
 
     quickbook_header(f.location, config, out);
- quickbook_markup(f.qbk_markup, out);
+ quickbook_markup(f.qbk_markup, markup_any, markup_default, out);
 
     out << std::endl;
     out << "[endsect]" << std::endl;
@@ -267,7 +274,7 @@
 
 void quickbook_short_output(function const& f, std::ostream& out)
 {
- BOOST_FOREACH(param const& p, f.parameters)
+ BOOST_FOREACH(parameter const& p, f.parameters)
     {
         out << "[* " << p.fulltype << "]: ['" << p.name << "]: " << p.description << std::endl << std::endl;
     }
@@ -298,8 +305,9 @@
     out << cos.brief_description << std::endl;
     out << std::endl;
 
- quickbook_heading_string("Description", cos.detailed_description, out);
+ quickbook_string_with_heading_if_present("Description", cos.detailed_description, out);
 
+ quickbook_markup(cos.qbk_markup, markup_before, markup_synopsis, out);
     out << "[heading Synopsis]" << std::endl
         << "``";
     quickbook_template_parameter_list(cos.template_parameters, out);
@@ -308,16 +316,38 @@
         << " // ..." << std::endl
         << "};" << std::endl
         << "``" << std::endl << std::endl;
+ quickbook_markup(cos.qbk_markup, markup_after, markup_synopsis, out);
+
+
 
     if (! cos.template_parameters.empty())
     {
+ bool has_default = false;
+ BOOST_FOREACH(parameter const& p, cos.template_parameters)
+ {
+ if (! p.default_value.empty())
+ {
+ has_default = true;
+ }
+ }
+
         out << "[heading Template parameter(s)]" << std::endl
             << "[table" << std::endl
- << "[[Parameter] [Description]]" << std::endl;
+ << "[[Parameter]";
+ if (has_default)
+ {
+ out << " [Default]";
+ }
+ out << " [Description]]" << std::endl;
 
- BOOST_FOREACH(param const& p, cos.template_parameters)
+ BOOST_FOREACH(parameter const& p, cos.template_parameters)
         {
- out << "[[" << p.fulltype << "] [" << p.description << "]]" << std::endl;
+ out << "[[" << p.fulltype;
+ if (has_default)
+ {
+ out << "] [" << p.default_value;
+ }
+ out << "] [" << p.description << "]]" << std::endl;
         }
         out << "]" << std::endl
             << std::endl;
@@ -373,7 +403,7 @@
     }
 
     quickbook_header(cos.location, config, out);
- quickbook_markup(cos.qbk_markup, out);
+ quickbook_markup(cos.qbk_markup, markup_any, markup_default, out);
 
     out << "[endsect]" << std::endl
         << std::endl;

Modified: trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/rapidxml_util.hpp
==============================================================================
--- trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/rapidxml_util.hpp (original)
+++ trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/rapidxml_util.hpp 2011-01-23 10:58:04 EST (Sun, 23 Jan 2011)
@@ -45,9 +45,21 @@
 
 inline void get_contents(rapidxml::xml_node<>* node, std::string& contents)
 {
- if (node != NULL && node->type() == rapidxml::node_element)
+ if (node != NULL)
     {
- contents += node->value();
+ if (node->type() == rapidxml::node_element)
+ {
+ //std::cout << "ELEMENT: " << node->name() << "=" << node->value() << std::endl;
+ }
+ else if (node->type() == rapidxml::node_data)
+ {
+ contents += node->value();
+ //std::cout << "DATA: " << node->name() << "=" << node->value() << std::endl;
+ }
+ else
+ {
+ //std::cout << "OTHER: " << node->name() << "=" << node->value() << std::endl;
+ }
         get_contents(node->first_node(), contents);
         get_contents(node->next_sibling(), contents);
     }


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