[mapguide-commits] r5151 - in trunk/MgDev/Common: MdfModel MdfParser Schema Stylization

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Sat Sep 18 03:34:36 EDT 2010


Author: waltweltonlair
Date: 2010-09-18 07:34:36 +0000 (Sat, 18 Sep 2010)
New Revision: 5151

Modified:
   trunk/MgDev/Common/MdfModel/TileWatermarkPosition.h
   trunk/MgDev/Common/MdfModel/VectorLayerDefinition.h
   trunk/MgDev/Common/MdfModel/WatermarkAppearance.h
   trunk/MgDev/Common/MdfModel/WatermarkDefinition.cpp
   trunk/MgDev/Common/MdfModel/WatermarkDefinition.h
   trunk/MgDev/Common/MdfModel/WatermarkInstance.h
   trunk/MgDev/Common/MdfModel/WatermarkPosition.h
   trunk/MgDev/Common/MdfModel/WatermarkXOffset.h
   trunk/MgDev/Common/MdfModel/WatermarkYOffset.h
   trunk/MgDev/Common/MdfModel/XYWatermarkPosition.h
   trunk/MgDev/Common/MdfParser/IOCompoundSymbolDefinition.cpp
   trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.cpp
   trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.h
   trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.cpp
   trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.h
   trunk/MgDev/Common/MdfParser/IOLabel.cpp
   trunk/MgDev/Common/MdfParser/IOLineRule.cpp
   trunk/MgDev/Common/MdfParser/IOMapDefinition.cpp
   trunk/MgDev/Common/MdfParser/IOMapDefinition.h
   trunk/MgDev/Common/MdfParser/IOMapLayerGroupCommon.cpp
   trunk/MgDev/Common/MdfParser/IOMapLayerGroupCommon.h
   trunk/MgDev/Common/MdfParser/IOSimpleSymbolDefinition.cpp
   trunk/MgDev/Common/MdfParser/IOTileWatermarkPosition.cpp
   trunk/MgDev/Common/MdfParser/IOTileWatermarkPosition.h
   trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.cpp
   trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.h
   trunk/MgDev/Common/MdfParser/IOWatermarkAppearance.cpp
   trunk/MgDev/Common/MdfParser/IOWatermarkAppearance.h
   trunk/MgDev/Common/MdfParser/IOWatermarkDefinition.cpp
   trunk/MgDev/Common/MdfParser/IOWatermarkDefinition.h
   trunk/MgDev/Common/MdfParser/IOWatermarkInstance.cpp
   trunk/MgDev/Common/MdfParser/IOWatermarkInstance.h
   trunk/MgDev/Common/MdfParser/IOWatermarkOffsetUnit.cpp
   trunk/MgDev/Common/MdfParser/IOWatermarkOffsetUnit.h
   trunk/MgDev/Common/MdfParser/IOWatermarkXOffset.cpp
   trunk/MgDev/Common/MdfParser/IOWatermarkXOffset.h
   trunk/MgDev/Common/MdfParser/IOWatermarkYOffset.cpp
   trunk/MgDev/Common/MdfParser/IOWatermarkYOffset.h
   trunk/MgDev/Common/MdfParser/IOXYWatermarkPosition.cpp
   trunk/MgDev/Common/MdfParser/IOXYWatermarkPosition.h
   trunk/MgDev/Common/Schema/LayerDefinition-1.4.0.xsd
   trunk/MgDev/Common/Schema/MapDefinition-1.1.0.xsd
   trunk/MgDev/Common/Schema/WatermarkDefinition-1.0.0.xsd
   trunk/MgDev/Common/Stylization/StylizationEngine.cpp
Log:
Additional watermark cleanup

Schema updates:
* Improved documentation in the new schemas.
* The WatermarkDefinitionType element has a WatermarkSource child element that contains the content for the watermark.  I've renamed WatermarkSource to just Content.
* The WatermarkType element has child elements named AppearanceOverrides and PositionOverrides, but these names are wrong since in each case there's only a single object overriding things.  So I renamed the elements to AppearanceOverride and PositionOverride.  The MdfModel and MdfParser code was already using the new names.
* A couple elements defined ExtendedData child elements.  I renamed the child elements to ExtendedData1 to be consistent with other uses of extended data in our schemas.

MdfModel updates:
* Updated WatermarkDefinition to account for the WatermarkSource => Content renaming.
* Many of the new classes did not inherit from MdfRootObject.  This based class provides support for handling unknown XML / extended data, and all MdfModel classes should inherit from it.

MdfParser updates:
* The new IOWatermark classes were incorrectly deleting references to MdfModel objects in their destructors.  The lifetime of these MdfModel objects is controlled by the MdfModel classes, and not the IO classes.
* Serialization of numerous optional schema properties / elements was not being done correctly.  The code needs to only serialize these properties / elements if they differ from the default value.
* IOWatermarkInstance and IOWatermarkDefinition were not handling extended data correctly.
* IOWatermarkDefinition::Write was not checking handling the case where the supplied version parameter was NULL.
* Added additional comments to the new classes.


Modified: trunk/MgDev/Common/MdfModel/TileWatermarkPosition.h
===================================================================
--- trunk/MgDev/Common/MdfModel/TileWatermarkPosition.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfModel/TileWatermarkPosition.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -31,7 +31,7 @@
     // It will repeat the source both in X and Y dimension.  Tile is the unit of repeat.
     // Within tile it uses X-Y as the position of watermark.
     //------------------------------------------------------------------------
-    class MDFMODEL_API TileWatermarkPosition: public WatermarkPosition
+    class MDFMODEL_API TileWatermarkPosition : public WatermarkPosition
     {
     public:
         // Construction, destruction, initialization.

Modified: trunk/MgDev/Common/MdfModel/VectorLayerDefinition.h
===================================================================
--- trunk/MgDev/Common/MdfModel/VectorLayerDefinition.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfModel/VectorLayerDefinition.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -29,7 +29,7 @@
     // Layer that specifies a wholly encapsulated data source of stylizable
     // geometric features and their associated data attributes.
     //-------------------------------------------------------------------------
-    class MDFMODEL_API VectorLayerDefinition :public LayerDefinition
+    class MDFMODEL_API VectorLayerDefinition : public LayerDefinition
     {
     public:
 

Modified: trunk/MgDev/Common/MdfModel/WatermarkAppearance.h
===================================================================
--- trunk/MgDev/Common/MdfModel/WatermarkAppearance.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfModel/WatermarkAppearance.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -19,6 +19,7 @@
 #define WATERMARKAPPEARANCE_H_
 
 #include "MdfModel.h"
+#include "MdfRootObject.h"
 
 BEGIN_NAMESPACE_MDFMODEL
 
@@ -26,7 +27,7 @@
     // DESCRIPTION:
     // The WatermarkAppearance class is to define the appearance of watermark.
     //------------------------------------------------------------------------
-    class MDFMODEL_API WatermarkAppearance
+    class MDFMODEL_API WatermarkAppearance : public MdfRootObject
     {
     public:
         // Construction, destruction, initialization.

Modified: trunk/MgDev/Common/MdfModel/WatermarkDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfModel/WatermarkDefinition.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfModel/WatermarkDefinition.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -19,7 +19,7 @@
 // DESCRIPTION:
 // The WatermarkDefinition class implementation.
 //
-// All the data objects in the WatermarkDefinition (Source, Appearance,
+// All the data objects in the WatermarkDefinition (Content, Appearance,
 // Position, etc.) are accessible.  While unfettered access to all the stored
 // objects is provided, these data are still owned by the WatermarkDefinition
 // object.
@@ -43,7 +43,7 @@
 //-------------------------------------------------------------------------
 WatermarkDefinition::WatermarkDefinition()
 {
-    this->m_source = NULL;
+    this->m_content = NULL;
     this->m_appearance = NULL;
     this->m_position = NULL;
 }
@@ -53,57 +53,57 @@
 //-------------------------------------------------------------------------
 WatermarkDefinition::~WatermarkDefinition()
 {
-    delete this->m_source;
+    delete this->m_content;
     delete this->m_appearance;
     delete this->m_position;
 }
 
 //-------------------------------------------------------------------------
-// PURPOSE: Accessor method for the source property.
+// PURPOSE: Accessor method for the content property.
 //          The SymbolDefinition is the type of source content used in watermark.
 // RETURNS: The pointer of symbol definition.
 //-------------------------------------------------------------------------
-const SymbolDefinition* WatermarkDefinition::GetSource() const
+const SymbolDefinition* WatermarkDefinition::GetContent() const
 {
-    return this->m_source;
+    return this->m_content;
 }
 
 //-------------------------------------------------------------------------
-// PURPOSE: Accessor method for the source property.
+// PURPOSE: Accessor method for the content property.
 //          The SymbolDefinition is the type of source content used in watermark.
 // RETURNS: The pointer of symbol definition.
 //-------------------------------------------------------------------------
-SymbolDefinition* WatermarkDefinition::GetSource()
+SymbolDefinition* WatermarkDefinition::GetContent()
 {
-    return this->m_source;
+    return this->m_content;
 }
 
 //-------------------------------------------------------------------------
-// PURPOSE: Accessor method for the source property.
+// PURPOSE: Accessor method for the content property.
 //          The SymbolDefinition is the type of source content used in watermark.
 // PARAMETERS:
 //        Input:
-//          pSource - Adopted SymbolDefinition object that is created on the heap.
+//          pContent - Adopted SymbolDefinition object that is created on the heap.
 //                             It may be NULL.
 //-------------------------------------------------------------------------
-void WatermarkDefinition::AdoptSource(SymbolDefinition* pSource)
+void WatermarkDefinition::AdoptContent(SymbolDefinition* pContent)
 {
-    if (this->m_source != pSource)
+    if (this->m_content != pContent)
     {
-        delete this->m_source;
-        this->m_source = pSource;
+        delete this->m_content;
+        this->m_content = pContent;
     }
 }
 
 //-------------------------------------------------------------------------
-// PURPOSE: Accessor method for the source property.
+// PURPOSE: Accessor method for the content property.
 //          The SymbolDefinition is the type of source content used in watermark.
 // RETURNS: The pointer to the orphaned SymbolDefinition object. It may be NULL.
 //-------------------------------------------------------------------------
-SymbolDefinition* WatermarkDefinition::OrphanSource()
+SymbolDefinition* WatermarkDefinition::OrphanContent()
 {
-    SymbolDefinition* pRet = this->m_source;
-    this->m_source = NULL;
+    SymbolDefinition* pRet = this->m_content;
+    this->m_content = NULL;
     return pRet;
 }
 

Modified: trunk/MgDev/Common/MdfModel/WatermarkDefinition.h
===================================================================
--- trunk/MgDev/Common/MdfModel/WatermarkDefinition.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfModel/WatermarkDefinition.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -31,7 +31,7 @@
     // The WatermarkDefinition class is the root document node of the MdfModel. Through its
     // interface, one can get access to all the data in the WatermarkDefinition.
     //------------------------------------------------------------------------
-    class MDFMODEL_API WatermarkDefinition: public MdfRootObject
+    class MDFMODEL_API WatermarkDefinition : public MdfRootObject
     {
     public:
         // Construction, destruction, initialization.
@@ -40,11 +40,11 @@
 
         // Operations
         
-        // Property: Source
-        const SymbolDefinition* GetSource() const;
-        SymbolDefinition* GetSource();
-        void AdoptSource(SymbolDefinition* pSource);
-        SymbolDefinition* OrphanSource();
+        // Property: Content
+        const SymbolDefinition* GetContent() const;
+        SymbolDefinition* GetContent();
+        void AdoptContent(SymbolDefinition* pContent);
+        SymbolDefinition* OrphanContent();
         
         // Property: Appearance
         const WatermarkAppearance* GetAppearance() const;
@@ -72,7 +72,7 @@
 
         // Data members
         // See corresponding properties for descriptions
-        SymbolDefinition* m_source;
+        SymbolDefinition* m_content;
         WatermarkAppearance* m_appearance;
         WatermarkPosition* m_position;
     };

Modified: trunk/MgDev/Common/MdfModel/WatermarkInstance.h
===================================================================
--- trunk/MgDev/Common/MdfModel/WatermarkInstance.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfModel/WatermarkInstance.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -19,6 +19,7 @@
 #define WATERMARKINSTANCE_H_
 
 #include "MdfModel.h"
+#include "MdfRootObject.h"
 #include "MdfOwnerCollection.h"
 #include "WatermarkDefinition.h"
 #include "WatermarkAppearance.h"
@@ -33,7 +34,7 @@
     // reference of a WatermarkDefinition object. It is the user's responsibility to ensure
     // that duplicated WatermarkDefinitions are deleted.
     //------------------------------------------------------------------------
-    class MDFMODEL_API WatermarkInstance
+    class MDFMODEL_API WatermarkInstance : public MdfRootObject
     {
     public:
 

Modified: trunk/MgDev/Common/MdfModel/WatermarkPosition.h
===================================================================
--- trunk/MgDev/Common/MdfModel/WatermarkPosition.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfModel/WatermarkPosition.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -19,6 +19,7 @@
 #define WATERMARKPOSITION_H_
 
 #include "MdfModel.h"
+#include "MdfRootObject.h"
 
 BEGIN_NAMESPACE_MDFMODEL
 
@@ -27,7 +28,7 @@
     // The WatermarkPosition class is the abstract class of position.
     // It doesn't contain any field inside itself.
     //------------------------------------------------------------------------
-    class MDFMODEL_API WatermarkPosition
+    class MDFMODEL_API WatermarkPosition : public MdfRootObject
     {
     public:
         // Destruction

Modified: trunk/MgDev/Common/MdfModel/WatermarkXOffset.h
===================================================================
--- trunk/MgDev/Common/MdfModel/WatermarkXOffset.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfModel/WatermarkXOffset.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -19,6 +19,7 @@
 #define WATERMARKXOFFSET_H_
 
 #include "MdfModel.h"
+#include "MdfRootObject.h"
 #include "WatermarkOffsetUnit.h"
 
 BEGIN_NAMESPACE_MDFMODEL
@@ -27,7 +28,7 @@
     // DESCRIPTION:
     // The WatermarkXOffest class is to define the offset in X-axis of the watermark.
     //------------------------------------------------------------------------
-    class MDFMODEL_API WatermarkXOffset
+    class MDFMODEL_API WatermarkXOffset : public MdfRootObject
     {
     public:
 
@@ -36,7 +37,7 @@
         {
             Left,
             Center,
-            Right,
+            Right
         };
 
         // Construction, destruction, initialization.

Modified: trunk/MgDev/Common/MdfModel/WatermarkYOffset.h
===================================================================
--- trunk/MgDev/Common/MdfModel/WatermarkYOffset.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfModel/WatermarkYOffset.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -19,6 +19,7 @@
 #define WATERMARKYOFFSET_H_
 
 #include "MdfModel.h"
+#include "MdfRootObject.h"
 #include "WatermarkOffsetUnit.h"
 
 BEGIN_NAMESPACE_MDFMODEL
@@ -27,7 +28,7 @@
     // DESCRIPTION:
     // The WatermarkYOffest class is to define the offset in Y-axis of the watermark.
     //------------------------------------------------------------------------
-    class MDFMODEL_API WatermarkYOffset
+    class MDFMODEL_API WatermarkYOffset : public MdfRootObject
     {
     public:
 

Modified: trunk/MgDev/Common/MdfModel/XYWatermarkPosition.h
===================================================================
--- trunk/MgDev/Common/MdfModel/XYWatermarkPosition.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfModel/XYWatermarkPosition.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -30,7 +30,7 @@
     // The XYWatermarkPosition class is one concrete implementation of WatermarkPosition.
     // It uses X-Y as the position of watermark.
     //------------------------------------------------------------------------
-    class MDFMODEL_API XYWatermarkPosition: public WatermarkPosition
+    class MDFMODEL_API XYWatermarkPosition : public WatermarkPosition
     {
     public:
         // Construction, destruction, initialization.

Modified: trunk/MgDev/Common/MdfParser/IOCompoundSymbolDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOCompoundSymbolDefinition.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOCompoundSymbolDefinition.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -84,13 +84,13 @@
 {
     if (writeAsRootElement)
     {
-        // verify the LDF version
+        // verify the SymbolDefinition version
         MdfString strVersion;
         if (version)
         {
             if ((*version >= Version(1, 0, 0)) && (*version <= Version(1, 1, 0)))
             {
-                // SymbolDefinition in MapGuide 2008 / 2009
+                // SymbolDefinition in MapGuide 2008 - current
                 strVersion = version->ToString();
             }
             else

Modified: trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -69,12 +69,12 @@
     case eWatermark:
         {
             Version wdVersion;
-            if (!IODrawingLayerDefinition::GetWatermarkVersion(&this->m_version, wdVersion))
+            if (!IODrawingLayerDefinition::GetWatermarkDefinitionVersion(&this->m_version, wdVersion))
                 return;
 
-            WatermarkInstance* layerWatermark = new WatermarkInstance(L"", L"");
-            this->m_layer->GetWatermarks()->Adopt(layerWatermark);
-            IOWatermarkInstance* IO = new IOWatermarkInstance(layerWatermark, wdVersion);
+            WatermarkInstance* watermark = new WatermarkInstance(L"", L"");
+            this->m_layer->GetWatermarks()->Adopt(watermark);
+            IOWatermarkInstance* IO = new IOWatermarkInstance(watermark, wdVersion);
             handlerStack->push(IO);
             IO->StartElement(name, handlerStack);
         }
@@ -143,9 +143,9 @@
 // Determine which WatermarkDefinition schema version to use based
 // on the supplied LDF version:
 // * LDF version <= 1.4.0  =>  WD version 1.0.0
-bool IODrawingLayerDefinition::GetWatermarkVersion(Version* ldfVersion, Version& wmVersion)
+bool IODrawingLayerDefinition::GetWatermarkDefinitionVersion(Version* ldfVersion, Version& wdVersion)
 {
-    wmVersion = Version(1, 0, 0);
+    wdVersion = Version(1, 0, 0);
     return true;
 }
 
@@ -163,7 +163,7 @@
         }
         else if ((*version >= Version(1, 0, 0)) && (*version <= Version(1, 4, 0)))
         {
-            // LDF in MapGuide 2007 - 2012
+            // LDF in MapGuide 2007 - current
             strVersion = version->ToString();
         }
         else
@@ -201,13 +201,13 @@
         fd << endStr(sOpacity) << std::endl;
     }
 
-    // Property: LayerWatermark (Optional)
+    // Property: Watermarks (optional)
     int watermarkCount = drawingLayer->GetWatermarks()->GetCount();
     if (watermarkCount != 0)
     {
         if (!version || (*version >= Version(1, 4, 0)))
         {
-            // only write LayerWatermark if the LDF version is 1.4.0 or greater
+            // only write Watermarks if the LDF version is 1.4.0 or greater
             fd << tab() << startStr(sWatermarks) << std::endl;
             inctab();
             for (int i=0; i<watermarkCount; ++i)
@@ -217,7 +217,7 @@
         }
         else if (*version >= Version(1, 0, 0))
         {
-            // save LayerWatermark as extended data for LDF versions 1.0.0, 1.1.0, and 1.2.0
+            // save Watermarks as extended data for LDF versions 1.0.0, 1.1.0, and 1.2.0
             inctab();
 
             fdExtData << tab() << startStr(sWatermarks) << std::endl;

Modified: trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.h
===================================================================
--- trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -41,7 +41,7 @@
         static void Write(MdfStream& fd, DrawingLayerDefinition* drawingLayer, Version* version);
 
     private:
-        static bool GetWatermarkVersion(Version* ldfVersion, Version& wmVersion);
+        static bool GetWatermarkDefinitionVersion(Version* ldfVersion, Version& wdVersion);
         DrawingLayerDefinition* m_layer;
 };
 

Modified: trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -69,12 +69,12 @@
     case eWatermark:
         {
             Version wdVersion;
-            if (!IOGridLayerDefinition::GetWatermarkVersion(&this->m_version, wdVersion))
+            if (!IOGridLayerDefinition::GetWatermarkDefinitionVersion(&this->m_version, wdVersion))
                 return;
 
-            WatermarkInstance* layerWatermark = new WatermarkInstance(L"", L"");
-            this->m_layer->GetWatermarks()->Adopt(layerWatermark);
-            IOWatermarkInstance* IO = new IOWatermarkInstance(layerWatermark, wdVersion);
+            WatermarkInstance* watermark = new WatermarkInstance(L"", L"");
+            this->m_layer->GetWatermarks()->Adopt(watermark);
+            IOWatermarkInstance* IO = new IOWatermarkInstance(watermark, wdVersion);
             handlerStack->push(IO);
             IO->StartElement(name, handlerStack);
         }
@@ -147,9 +147,9 @@
 // Determine which WatermarkDefinition schema version to use based
 // on the supplied LDF version:
 // * LDF version <= 1.4.0  =>  WD version 1.0.0
-bool IOGridLayerDefinition::GetWatermarkVersion(Version* ldfVersion, Version& wmVersion)
+bool IOGridLayerDefinition::GetWatermarkDefinitionVersion(Version* ldfVersion, Version& wdVersion)
 {
-    wmVersion = Version(1, 0, 0);
+    wdVersion = Version(1, 0, 0);
     return true;
 }
 
@@ -167,7 +167,7 @@
         }
         else if ((*version >= Version(1, 0, 0)) && (*version <= Version(1, 4, 0)))
         {
-            // LDF in MapGuide 2007 - 2012
+            // LDF in MapGuide 2007 - current
             strVersion = version->ToString();
         }
         else
@@ -205,13 +205,13 @@
         fd << endStr(sOpacity) << std::endl;
     }
 
-    // Property: LayerWatermark (Optional)
+    // Property: Watermarks (optional)
     int watermarkCount = gridLayer->GetWatermarks()->GetCount();
     if (watermarkCount != 0)
     {
         if (!version || (*version >= Version(1, 4, 0)))
         {
-            // only write LayerWatermark if the LDF version is 1.4.0 or greater
+            // only write Watermarks if the LDF version is 1.4.0 or greater
             fd << tab() << startStr(sWatermarks) << std::endl;
             inctab();
             for (int i=0; i<watermarkCount; ++i)
@@ -221,7 +221,7 @@
         }
         else if (*version >= Version(1, 0, 0))
         {
-            // save LayerWatermark as extended data for LDF versions 1.0.0, 1.1.0, and 1.2.0
+            // save Watermarks as extended data for LDF versions 1.0.0, 1.1.0, and 1.2.0
             inctab();
 
             fdExtData << tab() << startStr(sWatermarks) << std::endl;

Modified: trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.h
===================================================================
--- trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -41,7 +41,7 @@
         static void Write(MdfStream& fd, GridLayerDefinition* gridLayer, Version* version);
 
     private:
-        static bool GetWatermarkVersion(Version* ldfVersion, Version& wmVersion);
+        static bool GetWatermarkDefinitionVersion(Version* ldfVersion, Version& wdVersion);
         GridLayerDefinition* m_layer;
 };
 

Modified: trunk/MgDev/Common/MdfParser/IOLabel.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOLabel.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOLabel.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -322,7 +322,7 @@
             fd << endStr(sUnderlined) << std::endl;
         }
 
-        // Property: AdvancePlacement
+        // Property: AdvancedPlacement
         fd << tab() << startStr(sAdvancedPlacement) << std::endl;
         inctab();
         fd << tab() << startStr(sScaleLimit);

Modified: trunk/MgDev/Common/MdfParser/IOLineRule.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOLineRule.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOLineRule.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -132,6 +132,7 @@
     fd << tab() << startStr(sLineRule) << std::endl;
     inctab();
 
+    // Property: LegendLabel
     fd << tab() << startStr(sLegendLabel);
     fd << EncodeString(lineRule->GetLegendLabel());
     fd << endStr(sLegendLabel) << std::endl;

Modified: trunk/MgDev/Common/MdfParser/IOMapDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOMapDefinition.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOMapDefinition.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -77,12 +77,12 @@
         else if (this->m_currElemName == L"Watermark") // NOXLATE
         {
             Version wdVersion;
-            if (!IOMapDefinition::GetWatermarkVersion(&this->m_version, wdVersion))
+            if (!IOMapDefinition::GetWatermarkDefinitionVersion(&this->m_version, wdVersion))
                 return;
 
-            WatermarkInstance* mapWatermark = new WatermarkInstance(L"", L"");
-            this->m_map->GetWatermarks()->Adopt(mapWatermark);
-            IOWatermarkInstance* IO = new IOWatermarkInstance(mapWatermark, wdVersion);
+            WatermarkInstance* watermark = new WatermarkInstance(L"", L"");
+            this->m_map->GetWatermarks()->Adopt(watermark);
+            IOWatermarkInstance* IO = new IOWatermarkInstance(watermark, wdVersion);
             handlerStack->push(IO);
             IO->StartElement(name, handlerStack);
         }
@@ -124,9 +124,9 @@
 // Determine which WatermarkDefinition schema version to use based
 // on the supplied MDF version:
 // * MDF version <= 1.1.0  =>  WD version 1.0.0
-bool IOMapDefinition::GetWatermarkVersion(Version* mdfVersion, Version& wmVersion)
+bool IOMapDefinition::GetWatermarkDefinitionVersion(Version* mdfVersion, Version& wdVersion)
 {
-    wmVersion = Version(1, 0, 0);
+    wdVersion = Version(1, 0, 0);
     return true;
 }
 
@@ -139,7 +139,7 @@
     {
         if ((*version >= Version(1, 0, 0)) && (*version <= Version(1, 1, 0)))
         {
-            // MDF in MapGuide 2007 - 2012
+            // MDF in MapGuide 2006 - current
             strVersion = version->ToString();
         }
         else
@@ -167,6 +167,7 @@
     fd << EncodeString(map->GetName());
     fd << "</Name>" << std::endl; // NOXLATE
 
+    // Property: CoordinateSystem
     fd << tab() << "<CoordinateSystem>"; // NOXLATE
     fd << EncodeString(map->GetCoordinateSystem());
     fd << "</CoordinateSystem>" << std::endl; // NOXLATE
@@ -199,10 +200,11 @@
     if (map->GetFiniteDisplayScales()->GetCount() > 0)
         IOBaseMapDefinition::Write(fd, map, version);
 
-    // Property: MapWatermark (Optional)
+    // Property: Watermarks (optional)
     int watermarkCount = map->GetWatermarks()->GetCount();
     if (watermarkCount != 0)
     {
+        // only write Watermarks if the MDF version is 1.1.0 or greater
         if (*version >= Version(1, 1, 0))
         {
             fd << tab() << startStr("Watermarks") << std::endl; // NOXLATE

Modified: trunk/MgDev/Common/MdfParser/IOMapDefinition.h
===================================================================
--- trunk/MgDev/Common/MdfParser/IOMapDefinition.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOMapDefinition.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -41,7 +41,7 @@
         static void Write(MdfStream& fd, MapDefinition* map, Version* version);
 
     private:
-        static bool GetWatermarkVersion(Version* mdfVersion, Version& wmVersion);
+        static bool GetWatermarkDefinitionVersion(Version* mdfVersion, Version& wdVersion);
         MapDefinition* m_map;
 };
 

Modified: trunk/MgDev/Common/MdfParser/IOMapLayerGroupCommon.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOMapLayerGroupCommon.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOMapLayerGroupCommon.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -42,14 +42,6 @@
 }
 
 
-void IOMapLayerGroupCommon::StartElement(const wchar_t* name, HandlerStack* handlerStack)
-{
-#ifdef _NDEBUG
-    _ASSERT(false);
-#endif
-}
-
-
 void IOMapLayerGroupCommon::ElementChars(const wchar_t* ch)
 {
     if (this->m_currElemName == L"Name") // NOXLATE
@@ -65,14 +57,6 @@
 }
 
 
-void IOMapLayerGroupCommon::EndElement(const wchar_t* name, HandlerStack* handlerStack)
-{
-#ifdef _NDEBUG
-    _ASSERT(false);
-#endif
-}
-
-
 void IOMapLayerGroupCommon::Write(MdfStream& fd, MapLayerGroupCommon* layerGroup, Version* version)
 {
     // Property: Name

Modified: trunk/MgDev/Common/MdfParser/IOMapLayerGroupCommon.h
===================================================================
--- trunk/MgDev/Common/MdfParser/IOMapLayerGroupCommon.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOMapLayerGroupCommon.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -37,9 +37,7 @@
         IOMapLayerGroupCommon(MapDefinition* map, Version& version);
         virtual ~IOMapLayerGroupCommon();
 
-        virtual void StartElement(const wchar_t* name, HandlerStack* handlerStack);
         virtual void ElementChars(const wchar_t* ch);
-        virtual void EndElement(const wchar_t* name, HandlerStack* handlerStack);
 
         static void Write(MdfStream& fd, MapLayerGroupCommon* layerGroup, Version* version);
 

Modified: trunk/MgDev/Common/MdfParser/IOSimpleSymbolDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOSimpleSymbolDefinition.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOSimpleSymbolDefinition.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -119,13 +119,13 @@
 {
     if (writeAsRootElement)
     {
-        // verify the LDF version
+        // verify the SymbolDefinition version
         MdfString strVersion;
         if (version)
         {
             if ((*version >= Version(1, 0, 0)) && (*version <= Version(1, 1, 0)))
             {
-                // SymbolDefinition in MapGuide 2008 / 2009
+                // SymbolDefinition in MapGuide 2008 - current
                 strVersion = version->ToString();
             }
             else

Modified: trunk/MgDev/Common/MdfParser/IOTileWatermarkPosition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOTileWatermarkPosition.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOTileWatermarkPosition.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser
@@ -26,26 +26,26 @@
 
 CREATE_ELEMENT_MAP;
 ELEM_MAP_ENTRY(1, TilePosition);
-ELEM_MAP_ENTRY(2, HorizontalPosition);
-ELEM_MAP_ENTRY(3, VerticalPosition);
-ELEM_MAP_ENTRY(4, TileWidth);
-ELEM_MAP_ENTRY(5, TileHeight);
+ELEM_MAP_ENTRY(2, TileWidth);
+ELEM_MAP_ENTRY(3, TileHeight);
+ELEM_MAP_ENTRY(4, HorizontalPosition);
+ELEM_MAP_ENTRY(5, VerticalPosition);
 
-IOTileWatermarkPosition::IOTileWatermarkPosition(Version& version)
-: SAX2ElementHandler(version), m_position(NULL)
+
+IOTileWatermarkPosition::IOTileWatermarkPosition(Version& version) : SAX2ElementHandler(version)
 {
+    this->m_position = NULL;
 }
 
 
-IOTileWatermarkPosition::IOTileWatermarkPosition(TileWatermarkPosition* position, Version& version)
-: SAX2ElementHandler(version), m_position(position)
+IOTileWatermarkPosition::IOTileWatermarkPosition(TileWatermarkPosition* position, Version& version) : SAX2ElementHandler(version)
 {
+    this->m_position = position;
 }
 
 
 IOTileWatermarkPosition::~IOTileWatermarkPosition()
 {
-    delete this->m_position;
 }
 
 
@@ -59,24 +59,30 @@
     case eTilePosition:
         this->m_startElemName = name;
         break;
+
     case eHorizontalPosition:
         {
-            WatermarkXOffset* horizontalOffset = new WatermarkXOffset();
-            this->m_position->AdoptHorizontalPosition(horizontalOffset);
-            IOWatermarkXOffset* IO = new IOWatermarkXOffset(horizontalOffset, this->m_version);
+            WatermarkXOffset* xOffset = new WatermarkXOffset();
+            this->m_position->AdoptHorizontalPosition(xOffset);
+            IOWatermarkXOffset* IO = new IOWatermarkXOffset(xOffset, this->m_version);
             handlerStack->push(IO);
             IO->StartElement(name, handlerStack);
         }
         break;
+
     case eVerticalPosition:
         {
-            WatermarkYOffset* verticalOffset = new WatermarkYOffset();
-            this->m_position->AdoptVerticalPosition(verticalOffset);
-            IOWatermarkYOffset* IO = new IOWatermarkYOffset(verticalOffset, this->m_version);
+            WatermarkYOffset* yOffset = new WatermarkYOffset();
+            this->m_position->AdoptVerticalPosition(yOffset);
+            IOWatermarkYOffset* IO = new IOWatermarkYOffset(yOffset, this->m_version);
             handlerStack->push(IO);
             IO->StartElement(name, handlerStack);
         }
         break;
+
+    case eUnknown:
+        ParseUnknownXml(name, handlerStack);
+        break;
     }
 }
 
@@ -100,6 +106,8 @@
 {
     if (this->m_startElemName == name)
     {
+        this->m_position->SetUnknownXml(this->m_unknownXml);
+
         this->m_position = NULL;
         this->m_startElemName = L"";
         handlerStack->pop();
@@ -113,16 +121,22 @@
     fd << tab() << startStr(sTilePosition) << std::endl;
     inctab();
 
+    // Property: TileWidth
     fd << tab() << startStr(sTileWidth);
     fd << DoubleToStr(position->GetTileWidth());
     fd << endStr(sTileWidth) << std::endl;
+
+    // Property: TileHeight
     fd << tab() << startStr(sTileHeight);
     fd << DoubleToStr(position->GetTileHeight());
     fd << endStr(sTileHeight) << std::endl;
 
-    IOWatermarkXOffset::Write(fd, position->GetHorizontalPosition(), version, sHorizontalPosition);
-    IOWatermarkYOffset::Write(fd, position->GetVerticalPosition(), version, sVerticalPosition);
+    // Property: HorizontalPosition
+    IOWatermarkXOffset::Write(fd, position->GetHorizontalPosition(), sHorizontalPosition, version);
 
+    // Property: VerticalPosition
+    IOWatermarkYOffset::Write(fd, position->GetVerticalPosition(), sVerticalPosition, version);
+
     dectab();
     fd << tab() << endStr(sTilePosition) << std::endl;
 }

Modified: trunk/MgDev/Common/MdfParser/IOTileWatermarkPosition.h
===================================================================
--- trunk/MgDev/Common/MdfParser/IOTileWatermarkPosition.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOTileWatermarkPosition.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser

Modified: trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -74,12 +74,12 @@
     case eWatermark:
         {
             Version wdVersion;
-            if (!IOVectorLayerDefinition::GetWatermarkVersion(&this->m_version, wdVersion))
+            if (!IOVectorLayerDefinition::GetWatermarkDefinitionVersion(&this->m_version, wdVersion))
                 return;
 
-            WatermarkInstance* layerWatermark = new WatermarkInstance(L"", L"");
-            this->m_layer->GetWatermarks()->Adopt(layerWatermark);
-            IOWatermarkInstance* IO = new IOWatermarkInstance(layerWatermark, wdVersion);
+            WatermarkInstance* watermark = new WatermarkInstance(L"", L"");
+            this->m_layer->GetWatermarks()->Adopt(watermark);
+            IOWatermarkInstance* IO = new IOWatermarkInstance(watermark, wdVersion);
             handlerStack->push(IO);
             IO->StartElement(name, handlerStack);
         }
@@ -175,9 +175,9 @@
 // Determine which WatermarkDefinition schema version to use based
 // on the supplied LDF version:
 // * LDF version <= 1.4.0  =>  WD version 1.0.0
-bool IOVectorLayerDefinition::GetWatermarkVersion(Version* ldfVersion, Version& wmVersion)
+bool IOVectorLayerDefinition::GetWatermarkDefinitionVersion(Version* ldfVersion, Version& wdVersion)
 {
-    wmVersion = Version(1, 0, 0);
+    wdVersion = Version(1, 0, 0);
     return true;
 }
 
@@ -195,7 +195,7 @@
         }
         else if ((*version >= Version(1, 0, 0)) && (*version <= Version(1, 4, 0)))
         {
-            // LDF in MapGuide 2007 - 2012
+            // LDF in MapGuide 2007 - current
             strVersion = version->ToString();
         }
         else
@@ -233,13 +233,13 @@
         fd << endStr(sOpacity) << std::endl;
     }
 
-    // Property: LayerWatermark (Optional)
+    // Property: Watermarks (optional)
     int watermarkCount = vectorLayer->GetWatermarks()->GetCount();
     if (watermarkCount != 0)
     {
         if (!version || (*version >= Version(1, 4, 0)))
         {
-            // only write LayerWatermark if the LDF version is 1.4.0 or greater
+            // only write Watermarks if the LDF version is 1.4.0 or greater
             fd << tab() << startStr(sWatermarks) << std::endl;
             inctab();
             for (int i=0; i<watermarkCount; ++i)
@@ -249,7 +249,7 @@
         }
         else if (*version >= Version(1, 0, 0))
         {
-            // save LayerWatermark as extended data for LDF versions 1.0.0, 1.1.0, and 1.2.0
+            // save Watermarks as extended data for LDF versions 1.0.0, 1.1.0, and 1.2.0
             inctab();
 
             fdExtData << tab() << startStr(sWatermarks) << std::endl;

Modified: trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.h
===================================================================
--- trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -41,7 +41,7 @@
         static void Write(MdfStream& fd, VectorLayerDefinition* vectorLayer, Version* version);
 
     private:
-        static bool GetWatermarkVersion(Version* ldfVersion, Version& wmVersion);
+        static bool GetWatermarkDefinitionVersion(Version* ldfVersion, Version& wdVersion);
         VectorLayerDefinition* m_layer;
 };
 

Modified: trunk/MgDev/Common/MdfParser/IOWatermarkAppearance.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOWatermarkAppearance.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOWatermarkAppearance.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser
@@ -28,21 +28,21 @@
 ELEM_MAP_ENTRY(3, Transparency);
 ELEM_MAP_ENTRY(4, Rotation);
 
-IOWatermarkAppearance::IOWatermarkAppearance(Version& version)
-: SAX2ElementHandler(version), m_appearance(NULL)
+
+IOWatermarkAppearance::IOWatermarkAppearance(Version& version) : SAX2ElementHandler(version)
 {
+    this->m_appearance = NULL;
 }
 
 
-IOWatermarkAppearance::IOWatermarkAppearance(WatermarkAppearance* appearance, Version& version)
-: SAX2ElementHandler(version), m_appearance(appearance)
+IOWatermarkAppearance::IOWatermarkAppearance(WatermarkAppearance* appearance, Version& version) : SAX2ElementHandler(version)
 {
+    this->m_appearance = appearance;
 }
 
 
 IOWatermarkAppearance::~IOWatermarkAppearance()
 {
-    delete this->m_appearance;
 }
 
 
@@ -56,9 +56,14 @@
     case eAppearance:
         this->m_startElemName = name;
         break;
+
     case eAppearanceOverride:
         this->m_startElemName = name;
         break;
+
+    case eUnknown:
+        ParseUnknownXml(name, handlerStack);
+        break;
     }
 }
 
@@ -82,6 +87,8 @@
 {
     if (this->m_startElemName == name)
     {
+        this->m_appearance->SetUnknownXml(this->m_unknownXml);
+
         this->m_appearance = NULL;
         this->m_startElemName = L"";
         handlerStack->pop();
@@ -94,12 +101,23 @@
 {
     fd << tab() << startStr(name) << std::endl;
     inctab();
-    fd << tab() << startStr(sTransparency);
-    fd << DoubleToStr(appearance->GetTransparency());
-    fd << endStr(sTransparency) << std::endl;
-    fd << tab() << startStr(sRotation);
-    fd << DoubleToStr(appearance->GetRotation());
-    fd << endStr(sRotation) << std::endl;
+
+    // Property: Transparency (optional)
+    if (appearance->GetTransparency() != 0.0)
+    {
+        fd << tab() << startStr(sTransparency);
+        fd << DoubleToStr(appearance->GetTransparency());
+        fd << endStr(sTransparency) << std::endl;
+    }
+
+    // Property: Rotation (optional)
+    if (appearance->GetRotation() != 0.0)
+    {
+        fd << tab() << startStr(sRotation);
+        fd << DoubleToStr(appearance->GetRotation());
+        fd << endStr(sRotation) << std::endl;
+    }
+
     dectab();
     fd << tab() << endStr(name) << std::endl;
 }

Modified: trunk/MgDev/Common/MdfParser/IOWatermarkAppearance.h
===================================================================
--- trunk/MgDev/Common/MdfParser/IOWatermarkAppearance.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOWatermarkAppearance.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser

Modified: trunk/MgDev/Common/MdfParser/IOWatermarkDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOWatermarkDefinition.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOWatermarkDefinition.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser
@@ -22,6 +22,7 @@
 #include "IOWatermarkAppearance.h"
 #include "IOXYWatermarkPosition.h"
 #include "IOTileWatermarkPosition.h"
+#include "IOUnknown.h"
 
 using namespace XERCES_CPP_NAMESPACE;
 using namespace MDFMODEL_NAMESPACE;
@@ -29,30 +30,30 @@
 
 CREATE_ELEMENT_MAP;
 ELEM_MAP_ENTRY(1, WatermarkDefinition);
-ELEM_MAP_ENTRY(2, WatermarkSource);
+ELEM_MAP_ENTRY(2, Content);
 ELEM_MAP_ENTRY(3, SimpleSymbolDefinition);
 ELEM_MAP_ENTRY(4, CompoundSymbolDefinition);
 ELEM_MAP_ENTRY(5, Appearance);
 ELEM_MAP_ENTRY(6, Position);
 ELEM_MAP_ENTRY(7, XYPosition);
 ELEM_MAP_ENTRY(8, TilePosition);
-ELEM_MAP_ENTRY(9, ExtendedData);
+ELEM_MAP_ENTRY(9, ExtendedData1);
 
-IOWatermarkDefinition::IOWatermarkDefinition(Version& version) 
-: SAX2ElementHandler(version), m_watermark(NULL)
+
+IOWatermarkDefinition::IOWatermarkDefinition(Version& version) : SAX2ElementHandler(version)
 {
+    this->m_watermark = NULL;
 }
 
 
-IOWatermarkDefinition::IOWatermarkDefinition(WatermarkDefinition* watermark, Version& version)
-: SAX2ElementHandler(version), m_watermark(watermark)
+IOWatermarkDefinition::IOWatermarkDefinition(WatermarkDefinition* watermark, Version& version) : SAX2ElementHandler(version)
 {
+    this->m_watermark = watermark;
 }
 
 
 IOWatermarkDefinition::~IOWatermarkDefinition()
 {
-    delete this->m_watermark;
 }
 
 
@@ -67,67 +68,65 @@
         this->m_startElemName = name;
         break;
 
-        //TODO: Other elements
     case eSimpleSymbolDefinition:
         {
             Version sdVersion;
-            if (!IOWatermarkDefinition::GetSymbolDefinitionVersion(
-                &this->m_version, sdVersion))
+            if (!IOWatermarkDefinition::GetSymbolDefinitionVersion(&this->m_version, sdVersion))
                 return;
 
             SimpleSymbolDefinition* simpleSymbol = new SimpleSymbolDefinition();
-            this->m_watermark->AdoptSource(simpleSymbol);
+            this->m_watermark->AdoptContent(simpleSymbol);
             IOSimpleSymbolDefinition* IO = new IOSimpleSymbolDefinition(simpleSymbol, sdVersion);
             handlerStack->push(IO);
             IO->StartElement(name, handlerStack);
         }
         break;
+
     case eCompoundSymbolDefinition:
         {
             Version sdVersion;
-            if (!IOWatermarkDefinition::GetSymbolDefinitionVersion(
-                &this->m_version, sdVersion))
+            if (!IOWatermarkDefinition::GetSymbolDefinitionVersion(&this->m_version, sdVersion))
                 return;
+
             CompoundSymbolDefinition* compoundSymbol = new CompoundSymbolDefinition();
-            this->m_watermark->AdoptSource(compoundSymbol);
-            IOCompoundSymbolDefinition* IO = new IOCompoundSymbolDefinition(
-                compoundSymbol, sdVersion);
+            this->m_watermark->AdoptContent(compoundSymbol);
+            IOCompoundSymbolDefinition* IO = new IOCompoundSymbolDefinition(compoundSymbol, sdVersion);
             handlerStack->push(IO);
             IO->StartElement(name, handlerStack);
         }
         break;
+
     case eAppearance:
         {
             WatermarkAppearance* appearance = new WatermarkAppearance();
             this->m_watermark->AdoptAppearance(appearance);
-            IOWatermarkAppearance* IO = new IOWatermarkAppearance(
-                appearance, this->m_version);
+            IOWatermarkAppearance* IO = new IOWatermarkAppearance(appearance, this->m_version);
             handlerStack->push(IO);
             IO->StartElement(name, handlerStack);
         }
         break;
+
     case eXYPosition:
         {
             XYWatermarkPosition* position = new XYWatermarkPosition();
             this->m_watermark->AdoptPosition(position);
-            IOXYWatermarkPosition* IO = new IOXYWatermarkPosition(
-                position, this->m_version);
+            IOXYWatermarkPosition* IO = new IOXYWatermarkPosition(position, this->m_version);
             handlerStack->push(IO);
             IO->StartElement(name, handlerStack);
         }
         break;
+
     case eTilePosition:
         {
             TileWatermarkPosition* position = new TileWatermarkPosition();
             this->m_watermark->AdoptPosition(position);
-            IOTileWatermarkPosition* IO = new IOTileWatermarkPosition(
-                position, this->m_version);
+            IOTileWatermarkPosition* IO = new IOTileWatermarkPosition(position, this->m_version);
             handlerStack->push(IO);
             IO->StartElement(name, handlerStack);
         }
         break;
 
-    case eExtendedData:
+    case eExtendedData1:
         this->m_procExtData = true;
         break;
 
@@ -154,16 +153,17 @@
         handlerStack->pop();
         delete this;
     }
-    else if (eExtendedData == _ElementIdFromName(name))
+    else if (eExtendedData1 == _ElementIdFromName(name))
     {
         this->m_procExtData = false;
     }
 }
 
+
 // Determine which SymbolDefinition schema version to use based
-// on the supplied WDF version:
-// * WDF version <= 1.0.0  =>  SD version 1.1.0
-bool IOWatermarkDefinition::GetSymbolDefinitionVersion(Version* wmVersion, Version& sdVersion)
+// on the supplied WaterDefinition version:
+// * WD version <= 1.0.0  =>  SD version 1.1.0
+bool IOWatermarkDefinition::GetSymbolDefinitionVersion(Version* wdVersion, Version& sdVersion)
 {
     sdVersion = Version(1, 1, 0);
     return true;
@@ -172,14 +172,37 @@
 
 void IOWatermarkDefinition::Write(MdfStream& fd, WatermarkDefinition* watermark, Version* version)
 {
-    MdfString strVersion = version->ToString();
+    // verify the WatermarkDefinition version
+    MdfString strVersion;
+    if (version)
+    {
+        if (*version == Version(1, 0, 0))
+        {
+            // WatermarkDefinition in MapGuide 2012
+            strVersion = version->ToString();
+        }
+        else
+        {
+            // unsupported WatermarkDefinition version
+            // TODO - need a way to return error information
+            _ASSERT(false);
+            return;
+        }
+    }
+    else
+    {
+        // use the current highest version
+        strVersion = L"1.0.0";
+    }
+
     fd << tab() << "<WatermarkDefinition xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"WatermarkDefinition-" << EncodeString(strVersion) << ".xsd\" version=\"" << EncodeString(strVersion) << "\">" << std::endl; // NOXLATE
     inctab();
 
-    fd << tab() << startStr(sWatermarkSource) << std::endl;
+    // Property: Content
+    fd << tab() << startStr(sContent) << std::endl;
     inctab();
 
-    SymbolDefinition* symbol = watermark->GetSource();
+    SymbolDefinition* symbol = watermark->GetContent();
     Version sdVersion;
     if (IOWatermarkDefinition::GetSymbolDefinitionVersion(version, sdVersion))
     {
@@ -193,10 +216,12 @@
     }
 
     dectab();
-    fd << endStr(sWatermarkSource) << std::endl;
+    fd << endStr(sContent) << std::endl;
 
+    // Property: Appearance
     IOWatermarkAppearance::Write(fd, watermark->GetAppearance(), version, sAppearance);
 
+    // Property: Position
     fd << tab() << startStr(sPosition) << std::endl;
     inctab();
 
@@ -212,7 +237,8 @@
     dectab();
     fd << endStr(sPosition) << std::endl;
 
-    //Position
+    // Write any unknown XML / extended data
+    IOUnknown::Write(fd, watermark->GetUnknownXml(), version);
 
     dectab();
     fd << tab() << "</WatermarkDefinition>" << std::endl; // NOXLATE

Modified: trunk/MgDev/Common/MdfParser/IOWatermarkDefinition.h
===================================================================
--- trunk/MgDev/Common/MdfParser/IOWatermarkDefinition.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOWatermarkDefinition.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser
@@ -41,7 +41,7 @@
         static void Write(MdfStream& fd, WatermarkDefinition* watermark, Version* version);
 
     private:
-        static bool GetSymbolDefinitionVersion(Version* wdfVersion, Version& sdVersion);
+        static bool GetSymbolDefinitionVersion(Version* wdVersion, Version& sdVersion);
 
     private:
         WatermarkDefinition* m_watermark;

Modified: trunk/MgDev/Common/MdfParser/IOWatermarkInstance.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOWatermarkInstance.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOWatermarkInstance.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser
@@ -20,6 +20,7 @@
 #include "IOWatermarkAppearance.h"
 #include "IOXYWatermarkPosition.h"
 #include "IOTileWatermarkPosition.h"
+#include "IOUnknown.h"
 
 using namespace XERCES_CPP_NAMESPACE;
 using namespace MDFMODEL_NAMESPACE;
@@ -34,22 +35,23 @@
 ELEM_MAP_ENTRY(6, PositionOverride);
 ELEM_MAP_ENTRY(7, XYPosition);
 ELEM_MAP_ENTRY(8, TilePosition);
-ELEM_MAP_ENTRY(9, ExtendedData);
+ELEM_MAP_ENTRY(9, ExtendedData1);
 
-IOWatermarkInstance::IOWatermarkInstance(Version& version)
-: SAX2ElementHandler(version), m_watermark(NULL)
+
+IOWatermarkInstance::IOWatermarkInstance(Version& version) : SAX2ElementHandler(version)
 {
+    this->m_watermark = NULL;
 }
 
 
-IOWatermarkInstance::IOWatermarkInstance(WatermarkInstance* watermark, Version& version) : SAX2ElementHandler(version), m_watermark(watermark)
+IOWatermarkInstance::IOWatermarkInstance(WatermarkInstance* watermark, Version& version) : SAX2ElementHandler(version)
 {
+    this->m_watermark = watermark;
 }
 
 
 IOWatermarkInstance::~IOWatermarkInstance()
 {
-    delete this->m_watermark;
 }
 
 
@@ -63,6 +65,7 @@
     case eWatermark:
         this->m_startElemName = name;
         break;
+
     case eAppearanceOverride:
         {
             WatermarkAppearance* appearance = new WatermarkAppearance();
@@ -72,6 +75,7 @@
             IO->StartElement(name, handlerStack);
         }
         break;
+
     case eXYPosition:
         {
             XYWatermarkPosition* position = new XYWatermarkPosition();
@@ -81,6 +85,7 @@
             IO->StartElement(name, handlerStack);
         }
         break;
+
     case eTilePosition:
         {
             TileWatermarkPosition* position = new TileWatermarkPosition();
@@ -90,12 +95,18 @@
             IO->StartElement(name, handlerStack);
         }
         break;
-    case eExtendedData:
+
+    case eExtendedData1:
         this->m_procExtData = true;
         break;
+
+    case eUnknown:
+        ParseUnknownXml(name, handlerStack);
+        break;
     }
 }
 
+
 void IOWatermarkInstance::ElementChars(const wchar_t* ch)
 {
     switch (this->m_currElemId)
@@ -107,13 +118,14 @@
     case eResourceId:
         this->m_watermark->SetResourceId(ch);
         break;
+
     case eUsage:
         if (::wcscmp(ch, L"WMS") == 0) // NOXLATE
             this->m_watermark->SetUsage(WatermarkInstance::WMS);
         else if (::wcscmp(ch, L"Viewer") == 0) // NOXLATE
             this->m_watermark->SetUsage(WatermarkInstance::Viewer);
         else
-            this->m_watermark->SetUsage(WatermarkInstance::All);  //Treat as "All" if string is incorrect
+            this->m_watermark->SetUsage(WatermarkInstance::All); // treat as "All" if string is incorrect
         break;
     }
 }
@@ -123,11 +135,17 @@
 {
     if (this->m_startElemName == name)
     {
+        this->m_watermark->SetUnknownXml(this->m_unknownXml);
+
         this->m_watermark = NULL;
         this->m_startElemName = L"";
         handlerStack->pop();
         delete this;
     }
+    else if (eExtendedData1 == _ElementIdFromName(name))
+    {
+        this->m_procExtData = false;
+    }
 }
 
 
@@ -136,31 +154,36 @@
     fd << tab() << startStr(sWatermark) << std::endl;
     inctab();
 
+    // Property: Name
     fd << tab() << startStr(sName);
     fd << EncodeString(watermark->GetName());
     fd << endStr(sName) << std::endl;
+
+    // Property: ResourceId
     fd << tab() << startStr(sResourceId);
     fd << EncodeString(watermark->GetResourceId());
     fd << endStr(sResourceId) << std::endl;
 
-    fd << tab() << startStr(sUsage);
+    // Property: Usage (optional)
     WatermarkInstance::Usage usage = watermark->GetUsage();
-    if(usage == WatermarkInstance::WMS)
-        fd << "WMS"; // NOXLATE
-    else if(usage == WatermarkInstance::Viewer)
-        fd << "Viewer"; // NOXLATE
-    else
-        fd << "ALL";     //Treat "ALL" as default value
-    fd << endStr(sUsage) << std::endl;
+    if (usage != WatermarkInstance::All)
+    {
+        fd << tab() << startStr(sUsage);
+        if (usage == WatermarkInstance::WMS)
+            fd << "WMS"; // NOXLATE
+        else if (usage == WatermarkInstance::Viewer)
+            fd << "Viewer"; // NOXLATE
+        fd << endStr(sUsage) << std::endl;
+    }
 
+    // Property: AppearanceOverride (optional)
     WatermarkAppearance* appearanceOverride = watermark->GetAppearanceOverride();
-    if(appearanceOverride)
-    {
+    if (appearanceOverride)
         IOWatermarkAppearance::Write(fd, appearanceOverride, version, sAppearanceOverride);
-    }
     
+    // Property: PositionOverride (optional)
     WatermarkPosition* positionOverride = watermark->GetPositionOverride();
-    if(positionOverride)
+    if (positionOverride)
     {
         fd << tab() << startStr(sPositionOverride) << std::endl;
         inctab();
@@ -177,6 +200,9 @@
         fd << endStr(sPositionOverride) << std::endl;
     }
 
+    // Write any unknown XML / extended data
+    IOUnknown::Write(fd, watermark->GetUnknownXml(), version);
+
     dectab();
     fd << tab() << endStr(sWatermark) << std::endl;
 }

Modified: trunk/MgDev/Common/MdfParser/IOWatermarkInstance.h
===================================================================
--- trunk/MgDev/Common/MdfParser/IOWatermarkInstance.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOWatermarkInstance.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser

Modified: trunk/MgDev/Common/MdfParser/IOWatermarkOffsetUnit.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOWatermarkOffsetUnit.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOWatermarkOffsetUnit.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser
@@ -23,8 +23,7 @@
 using namespace MDFPARSER_NAMESPACE;
 
 
-WatermarkOffset::WatermarkOffsetUnit IOWatermarkOffsetUnit::ParseWatermarkOffsetUnit(
-    const wchar_t* ch)
+WatermarkOffset::WatermarkOffsetUnit IOWatermarkOffsetUnit::ParseWatermarkOffsetUnit(const wchar_t* ch)
 {
     if (::wcscmp(ch, L"Inches") == 0) // NOXLATE
         return WatermarkOffset::Inches;
@@ -34,14 +33,16 @@
         return WatermarkOffset::Millimeters;
     else if (::wcscmp(ch, L"Points") == 0) // NOXLATE
         return WatermarkOffset::Points;
-    else    // Treat as "Pixels" if string is incorrect
+    else // treat as "Pixels" if string is incorrect
         return WatermarkOffset::Pixels;    
 }
 
+
 void IOWatermarkOffsetUnit::Write(MdfStream& fd, WatermarkOffset::WatermarkOffsetUnit offsetUnit)
 {
+    // Property: Unit
     fd << tab() << startStr("Unit"); // NOXLATE
-    if(offsetUnit == WatermarkOffset::Inches)
+    if (offsetUnit == WatermarkOffset::Inches)
         fd << "Inches"; // NOXLATE
     else if (offsetUnit == WatermarkOffset::Centimeters)
         fd << "Centimeters"; // NOXLATE
@@ -49,7 +50,7 @@
         fd << "Millimeters"; // NOXLATE
     else if (offsetUnit == WatermarkOffset::Points)
         fd << "Points"; // NOXLATE
-    else    // Treat "Pixels" as default one
+    else  // treat "Pixels" as default value
         fd << "Pixels"; // NOXLATE
     fd << endStr("Unit") << std::endl; // NOXLATE
 }

Modified: trunk/MgDev/Common/MdfParser/IOWatermarkOffsetUnit.h
===================================================================
--- trunk/MgDev/Common/MdfParser/IOWatermarkOffsetUnit.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOWatermarkOffsetUnit.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser
@@ -18,9 +18,7 @@
 #ifndef _IOWATERMARKOFFSETUNIT_H
 #define _IOWATERMARKOFFSETUNIT_H
 
-#include "SAX2ElementHandler.h"
 #include "WatermarkOffsetUnit.h"
-#include "Version.h"
 
 using namespace XERCES_CPP_NAMESPACE;
 using namespace MDFMODEL_NAMESPACE;
@@ -30,8 +28,7 @@
 class IOWatermarkOffsetUnit
 {
     public:
-        static WatermarkOffset::WatermarkOffsetUnit ParseWatermarkOffsetUnit(
-            const wchar_t* ch);
+        static WatermarkOffset::WatermarkOffsetUnit ParseWatermarkOffsetUnit(const wchar_t* ch);
 
         static void Write(MdfStream& fd, WatermarkOffset::WatermarkOffsetUnit offsetUnit);
 };

Modified: trunk/MgDev/Common/MdfParser/IOWatermarkXOffset.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOWatermarkXOffset.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOWatermarkXOffset.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser
@@ -30,21 +30,21 @@
 ELEM_MAP_ENTRY(4, Unit);
 ELEM_MAP_ENTRY(5, Alignment);
 
-IOWatermarkXOffset::IOWatermarkXOffset(Version& version)
-: SAX2ElementHandler(version), m_XOffset(NULL)
+
+IOWatermarkXOffset::IOWatermarkXOffset(Version& version) : SAX2ElementHandler(version)
 {
+    this->m_XOffset = NULL;
 }
 
 
-IOWatermarkXOffset::IOWatermarkXOffset(WatermarkXOffset* xOffset, Version& version)
-: SAX2ElementHandler(version), m_XOffset(xOffset)
+IOWatermarkXOffset::IOWatermarkXOffset(WatermarkXOffset* xOffset, Version& version) : SAX2ElementHandler(version)
 {
+    this->m_XOffset = xOffset;
 }
 
 
 IOWatermarkXOffset::~IOWatermarkXOffset()
 {
-    delete this->m_XOffset;
 }
 
 
@@ -58,9 +58,14 @@
     case eXPosition:
         this->m_startElemName = name;
         break;
+
     case eHorizontalPosition:
         this->m_startElemName = name;
         break;
+
+    case eUnknown:
+        ParseUnknownXml(name, handlerStack);
+        break;
     }
 }
 
@@ -73,18 +78,18 @@
         this->m_XOffset->SetOffset(wstrToDouble(ch));
         break;
 
+    case eUnit:
+        this->m_XOffset->SetUnit(IOWatermarkOffsetUnit::ParseWatermarkOffsetUnit(ch));
+        break;
+
     case eAlignment:
         if (::wcscmp(ch, L"Left") == 0) // NOXLATE
             this->m_XOffset->SetAlignment(WatermarkXOffset::Left);
         else if (::wcscmp(ch, L"Right") == 0) // NOXLATE
             this->m_XOffset->SetAlignment(WatermarkXOffset::Right);
         else
-            this->m_XOffset->SetAlignment(WatermarkXOffset::Center);  //Treat as "Center" if string is incorrect
+            this->m_XOffset->SetAlignment(WatermarkXOffset::Center); // treat as "Center" if string is incorrect
         break;
-    
-    case eUnit:
-        this->m_XOffset->SetUnit(IOWatermarkOffsetUnit::ParseWatermarkOffsetUnit(ch));
-        break;
     }
 }
 
@@ -93,6 +98,8 @@
 {
     if (this->m_startElemName == name)
     {
+        this->m_XOffset->SetUnknownXml(this->m_unknownXml);
+
         this->m_XOffset = NULL;
         this->m_startElemName = L"";
         handlerStack->pop();
@@ -101,25 +108,28 @@
 }
 
 
-void IOWatermarkXOffset::Write(MdfStream& fd, WatermarkXOffset* xOffset, Version* version, const std::string& name)
+void IOWatermarkXOffset::Write(MdfStream& fd, WatermarkXOffset* xOffset, const std::string& name, Version* version)
 {
     fd << tab() << startStr(name) << std::endl;
     inctab();
 
+    // Property: Offset
     fd << tab() << startStr(sOffset);
     fd << DoubleToStr(xOffset->GetOffset());
     fd << endStr(sOffset) << std::endl;
 
+    // Property: Unit
     IOWatermarkOffsetUnit::Write(fd, xOffset->GetUnit());
 
+    // Property: Alignment
     fd << tab() << startStr(sAlignment);
     WatermarkXOffset::HorizontalAlignment alignment = xOffset->GetAlignment();
-    if(alignment == WatermarkXOffset::Left)
+    if (alignment == WatermarkXOffset::Left)
         fd << "Left"; // NOXLATE
-    else if(alignment == WatermarkXOffset::Right)
+    else if (alignment == WatermarkXOffset::Right)
         fd << "Right"; // NOXLATE
-    else    //Treat "Center" as default value
-        fd << "Center";      // NOXLATE
+    else // treat "Center" as default value
+        fd << "Center"; // NOXLATE
     fd << endStr(sAlignment) << std::endl;
 
     dectab();

Modified: trunk/MgDev/Common/MdfParser/IOWatermarkXOffset.h
===================================================================
--- trunk/MgDev/Common/MdfParser/IOWatermarkXOffset.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOWatermarkXOffset.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser
@@ -38,7 +38,7 @@
         virtual void ElementChars(const wchar_t* ch);
         virtual void EndElement(const wchar_t* name, HandlerStack* handlerStack);
 
-        static void Write(MdfStream& fd, WatermarkXOffset* xOffset, Version* version, const std::string& name);
+        static void Write(MdfStream& fd, WatermarkXOffset* xOffset, const std::string& name, Version* version);
 
     private:
         WatermarkXOffset* m_XOffset;

Modified: trunk/MgDev/Common/MdfParser/IOWatermarkYOffset.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOWatermarkYOffset.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOWatermarkYOffset.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser
@@ -30,21 +30,21 @@
 ELEM_MAP_ENTRY(4, Unit);
 ELEM_MAP_ENTRY(5, Alignment);
 
-IOWatermarkYOffset::IOWatermarkYOffset(Version& version)
-: SAX2ElementHandler(version), m_YOffset(NULL)
+
+IOWatermarkYOffset::IOWatermarkYOffset(Version& version) : SAX2ElementHandler(version)
 {
+    this->m_YOffset = NULL;
 }
 
 
-IOWatermarkYOffset::IOWatermarkYOffset(WatermarkYOffset* yOffset, Version& version)
-: SAX2ElementHandler(version), m_YOffset(yOffset)
+IOWatermarkYOffset::IOWatermarkYOffset(WatermarkYOffset* yOffset, Version& version) : SAX2ElementHandler(version)
 {
+    this->m_YOffset = yOffset;
 }
 
 
 IOWatermarkYOffset::~IOWatermarkYOffset()
 {
-    delete this->m_YOffset;
 }
 
 
@@ -58,9 +58,14 @@
     case eYPosition:
         this->m_startElemName = name;
         break;
+
     case eVerticalPosition:
         this->m_startElemName = name;
         break;
+
+    case eUnknown:
+        ParseUnknownXml(name, handlerStack);
+        break;
     }
 }
 
@@ -73,18 +78,18 @@
         this->m_YOffset->SetOffset(wstrToDouble(ch));
         break;
 
+    case eUnit:
+        this->m_YOffset->SetUnit(IOWatermarkOffsetUnit::ParseWatermarkOffsetUnit(ch));
+        break;
+
     case eAlignment:
         if (::wcscmp(ch, L"Top") == 0) // NOXLATE
             this->m_YOffset->SetAlignment(WatermarkYOffset::Top);
         else if (::wcscmp(ch, L"Bottom") == 0) // NOXLATE
             this->m_YOffset->SetAlignment(WatermarkYOffset::Bottom);
         else
-            this->m_YOffset->SetAlignment(WatermarkYOffset::Center);  //Treat as "Center" if string is incorrect
+            this->m_YOffset->SetAlignment(WatermarkYOffset::Center); // treat as "Center" if string is incorrect
         break;
-    
-    case eUnit:
-        this->m_YOffset->SetUnit(IOWatermarkOffsetUnit::ParseWatermarkOffsetUnit(ch));
-        break;
     }
 }
 
@@ -93,6 +98,8 @@
 {
     if (this->m_startElemName == name)
     {
+        this->m_YOffset->SetUnknownXml(this->m_unknownXml);
+
         this->m_YOffset = NULL;
         this->m_startElemName = L"";
         handlerStack->pop();
@@ -101,24 +108,27 @@
 }
 
 
-void IOWatermarkYOffset::Write(MdfStream& fd, WatermarkYOffset* yOffset, Version* version, const std::string& name)
+void IOWatermarkYOffset::Write(MdfStream& fd, WatermarkYOffset* yOffset, const std::string& name, Version* version)
 {
     fd << tab() << startStr(name) << std::endl;
     inctab();
 
+    // Property: Offset
     fd << tab() << startStr(sOffset);
     fd << DoubleToStr(yOffset->GetOffset());
     fd << endStr(sOffset) << std::endl;
 
+    // Property: Unit
     IOWatermarkOffsetUnit::Write(fd, yOffset->GetUnit());
 
+    // Property: Alignment
     fd << tab() << startStr(sAlignment);
     WatermarkYOffset::VerticalAlignment alignment = yOffset->GetAlignment();
-    if(alignment == WatermarkYOffset::Top)
+    if (alignment == WatermarkYOffset::Top)
         fd << "Top"; // NOXLATE
-    else if(alignment == WatermarkYOffset::Bottom)
+    else if (alignment == WatermarkYOffset::Bottom)
         fd << "Bottom"; // NOXLATE
-    else     //Treat "Center" as default value
+    else // treat "Center" as default value
         fd << "Center"; // NOXLATE
     fd << endStr(sAlignment) << std::endl;
 

Modified: trunk/MgDev/Common/MdfParser/IOWatermarkYOffset.h
===================================================================
--- trunk/MgDev/Common/MdfParser/IOWatermarkYOffset.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOWatermarkYOffset.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser
@@ -38,7 +38,7 @@
         virtual void ElementChars(const wchar_t* ch);
         virtual void EndElement(const wchar_t* name, HandlerStack* handlerStack);
 
-        static void Write(MdfStream& fd, WatermarkYOffset* xOffset, Version* version, const std::string& name);
+        static void Write(MdfStream& fd, WatermarkYOffset* xOffset, const std::string& name, Version* version);
 
     private:
         WatermarkYOffset* m_YOffset;

Modified: trunk/MgDev/Common/MdfParser/IOXYWatermarkPosition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOXYWatermarkPosition.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOXYWatermarkPosition.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser
@@ -29,21 +29,21 @@
 ELEM_MAP_ENTRY(2, XPosition);
 ELEM_MAP_ENTRY(3, YPosition);
 
-IOXYWatermarkPosition::IOXYWatermarkPosition(Version& version)
-: SAX2ElementHandler(version), m_position(NULL)
+
+IOXYWatermarkPosition::IOXYWatermarkPosition(Version& version) : SAX2ElementHandler(version)
 {
+    this->m_position = NULL;
 }
 
 
-IOXYWatermarkPosition::IOXYWatermarkPosition(XYWatermarkPosition* position, Version& version)
-: SAX2ElementHandler(version), m_position(position)
+IOXYWatermarkPosition::IOXYWatermarkPosition(XYWatermarkPosition* position, Version& version) : SAX2ElementHandler(version)
 {
+    this->m_position = position;
 }
 
 
 IOXYWatermarkPosition::~IOXYWatermarkPosition()
 {
-    delete this->m_position;
 }
 
 
@@ -57,6 +57,7 @@
     case eXYPosition:
         this->m_startElemName = name;
         break;
+
     case eXPosition:
         {
             WatermarkXOffset* xOffset = new WatermarkXOffset();
@@ -66,6 +67,7 @@
             IO->StartElement(name, handlerStack);
         }
         break;
+
     case eYPosition:
         {
             WatermarkYOffset* yOffset = new WatermarkYOffset();
@@ -75,6 +77,10 @@
             IO->StartElement(name, handlerStack);
         }
         break;
+
+    case eUnknown:
+        ParseUnknownXml(name, handlerStack);
+        break;
     }
 }
 
@@ -88,6 +94,8 @@
 {
     if (this->m_startElemName == name)
     {
+        this->m_position->SetUnknownXml(this->m_unknownXml);
+
         this->m_position = NULL;
         this->m_startElemName = L"";
         handlerStack->pop();
@@ -101,9 +109,12 @@
     fd << tab() << startStr(sXYPosition) << std::endl;
     inctab();
 
-    IOWatermarkXOffset::Write(fd, position->GetXPosition(), version, sXPosition);
-    IOWatermarkYOffset::Write(fd, position->GetYPosition(), version, sYPosition);
+    // Property: XPosition
+    IOWatermarkXOffset::Write(fd, position->GetXPosition(), sXPosition, version);
 
+    // Property: YPosition
+    IOWatermarkYOffset::Write(fd, position->GetYPosition(), sYPosition, version);
+
     dectab();
     fd << tab() << endStr(sXYPosition) << std::endl;
 }

Modified: trunk/MgDev/Common/MdfParser/IOXYWatermarkPosition.h
===================================================================
--- trunk/MgDev/Common/MdfParser/IOXYWatermarkPosition.h	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/MdfParser/IOXYWatermarkPosition.h	2010-09-18 07:34:36 UTC (rev 5151)
@@ -1,5 +1,5 @@
 //
-//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//  Copyright (C) 2010 by Autodesk, Inc.
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of version 2.1 of the GNU Lesser

Modified: trunk/MgDev/Common/Schema/LayerDefinition-1.4.0.xsd
===================================================================
--- trunk/MgDev/Common/Schema/LayerDefinition-1.4.0.xsd	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/Schema/LayerDefinition-1.4.0.xsd	2010-09-18 07:34:36 UTC (rev 5151)
@@ -63,7 +63,7 @@
       </xs:element>
       <xs:element name="Watermarks" type="WatermarkInstanceCollectionType" minOccurs="0">
         <xs:annotation>
-          <xs:documentation>A group of watermarks that is used in the current map.</xs:documentation>
+          <xs:documentation>The collection of watermarks used in the layer.</xs:documentation>
         </xs:annotation>
       </xs:element>
     </xs:sequence>

Modified: trunk/MgDev/Common/Schema/MapDefinition-1.1.0.xsd
===================================================================
--- trunk/MgDev/Common/Schema/MapDefinition-1.1.0.xsd	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/Schema/MapDefinition-1.1.0.xsd	2010-09-18 07:34:36 UTC (rev 5151)
@@ -211,7 +211,7 @@
       </xs:element>
       <xs:element name="Watermarks" type="WatermarkInstanceCollectionType" minOccurs="0">
         <xs:annotation>
-          <xs:documentation>A group of watermarks that is used in the current map.</xs:documentation>
+          <xs:documentation>The collection of watermarks used in the map.</xs:documentation>
         </xs:annotation>
       </xs:element>
     </xs:sequence>

Modified: trunk/MgDev/Common/Schema/WatermarkDefinition-1.0.0.xsd
===================================================================
--- trunk/MgDev/Common/Schema/WatermarkDefinition-1.0.0.xsd	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/Schema/WatermarkDefinition-1.0.0.xsd	2010-09-18 07:34:36 UTC (rev 5151)
@@ -3,7 +3,7 @@
   <xs:include schemaLocation="SymbolDefinition-1.1.0.xsd"/>
   <xs:element name="WatermarkDefinition">
     <xs:annotation>
-      <xs:documentation>The specification of the watermark.</xs:documentation>
+      <xs:documentation>The specification of a watermark.</xs:documentation>
     </xs:annotation>
     <xs:complexType>
       <xs:complexContent>
@@ -15,7 +15,7 @@
   </xs:element>
   <xs:simpleType name="UnitType">
     <xs:annotation>
-      <xs:documentation>Unit for a watermark.</xs:documentation>
+      <xs:documentation>Enumerates the allowed length units for a watermark position.</xs:documentation>
     </xs:annotation>
     <xs:restriction base="xs:string">
       <xs:enumeration value="Inches"/>
@@ -27,7 +27,7 @@
   </xs:simpleType>
   <xs:simpleType name="HorizontalAlignmentType">
     <xs:annotation>
-      <xs:documentation>Horizontal alignment for a watermark.</xs:documentation>
+      <xs:documentation>Enumerates the allowed horizontal alignment values for a watermark position.</xs:documentation>
     </xs:annotation>
     <xs:restriction base="xs:string">
       <xs:enumeration value="Left"/>
@@ -37,29 +37,29 @@
   </xs:simpleType>
   <xs:complexType name="HorizontalPositionType">
     <xs:annotation>
-      <xs:documentation>Horizontal position of a watermark.</xs:documentation>
+      <xs:documentation>Defines the horizontal position of a watermark.</xs:documentation>
     </xs:annotation>
     <xs:sequence>
-      <xs:element name="Offset" type="xs:double" default="0">
+      <xs:element name="Offset" type="xs:double" default="0.0">
         <xs:annotation>
-          <xs:documentation>Horizontal offset</xs:documentation>
+          <xs:documentation>The horizontal offset for the position.</xs:documentation>
         </xs:annotation>
       </xs:element>
       <xs:element name="Unit" type="UnitType" default="Points">
         <xs:annotation>
-          <xs:documentation>Unit for horizontal offset</xs:documentation>
+          <xs:documentation>The unit for the offset.</xs:documentation>
         </xs:annotation>
       </xs:element>
       <xs:element name="Alignment" type="HorizontalAlignmentType" default="Center">
         <xs:annotation>
-          <xs:documentation>Horizontal alignment</xs:documentation>
+          <xs:documentation>The horizontal alignment for the position.</xs:documentation>
         </xs:annotation>
       </xs:element>
     </xs:sequence>
   </xs:complexType>
   <xs:simpleType name="VerticalAlignmentType">
     <xs:annotation>
-      <xs:documentation>Vertical alignment for a watermark.</xs:documentation>
+      <xs:documentation>Enumerates the allowed vertical alignments for a watermark position.</xs:documentation>
     </xs:annotation>
     <xs:restriction base="xs:string">
       <xs:enumeration value="Top"/>
@@ -69,48 +69,48 @@
   </xs:simpleType>
   <xs:complexType name="VerticalPositionType">
     <xs:annotation>
-      <xs:documentation>Vertical position of a watermark.</xs:documentation>
+      <xs:documentation>Defines the vertical position of a watermark.</xs:documentation>
     </xs:annotation>
     <xs:sequence>
-      <xs:element name="Offset" type="xs:double" default="0">
+      <xs:element name="Offset" type="xs:double" default="0.0">
         <xs:annotation>
-          <xs:documentation>Vertical offset</xs:documentation>
+          <xs:documentation>The vertical offset for the position.</xs:documentation>
         </xs:annotation>
       </xs:element>
       <xs:element name="Unit" type="UnitType" default="Points">
         <xs:annotation>
-          <xs:documentation>Unit for vertical offset</xs:documentation>
+          <xs:documentation>The unit for the offset.</xs:documentation>
         </xs:annotation>
       </xs:element>
       <xs:element name="Alignment" type="VerticalAlignmentType"  default="Center">
         <xs:annotation>
-          <xs:documentation>Vertical alignment</xs:documentation>
+          <xs:documentation>The vertical alignment for the position.</xs:documentation>
         </xs:annotation>
       </xs:element>
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="PositionType" abstract="true">
     <xs:annotation>
-      <xs:documentation>Abstract position type for a watermark.</xs:documentation>
+      <xs:documentation>Abstract base type used with all watermark positions.</xs:documentation>
     </xs:annotation>
     <xs:sequence>
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="XYPositionType">
     <xs:annotation>
-      <xs:documentation>X/Y position</xs:documentation>
+      <xs:documentation>Positions a watermark at a single X/Y location.</xs:documentation>
     </xs:annotation>
     <xs:complexContent>
       <xs:extension base="PositionType">
         <xs:sequence>
           <xs:element name="XPosition" type="HorizontalPositionType">
             <xs:annotation>
-              <xs:documentation>X position</xs:documentation>
+              <xs:documentation>The position along the X-axis.</xs:documentation>
             </xs:annotation>
           </xs:element>
           <xs:element name="YPosition" type="VerticalPositionType">
             <xs:annotation>
-              <xs:documentation>Y position</xs:documentation>
+              <xs:documentation>The position along the Y-axis.</xs:documentation>
             </xs:annotation>
           </xs:element>
         </xs:sequence>
@@ -119,29 +119,29 @@
   </xs:complexType>
   <xs:complexType name="TilePositionType">
     <xs:annotation>
-      <xs:documentation>TiledPosition</xs:documentation>
+      <xs:documentation>Positions a watermark according to a regular grid.</xs:documentation>
     </xs:annotation>
     <xs:complexContent>
       <xs:extension base="PositionType">
         <xs:sequence>
-          <xs:element name="TileWidth" type="xs:double" default="150">
+          <xs:element name="TileWidth" type="xs:double" default="150.0">
             <xs:annotation>
-              <xs:documentation>Width of tile</xs:documentation>
+              <xs:documentation>The width of each tile in the grid.</xs:documentation>
             </xs:annotation>
           </xs:element>
-          <xs:element name="TileHeight" type="xs:double" default="150">
+          <xs:element name="TileHeight" type="xs:double" default="150.0">
             <xs:annotation>
-              <xs:documentation>Height of tile</xs:documentation>
+              <xs:documentation>The height of each tile in the grid.</xs:documentation>
             </xs:annotation>
           </xs:element>
           <xs:element name="HorizontalPosition" type="HorizontalPositionType">
             <xs:annotation>
-              <xs:documentation>Horizontal position within tile</xs:documentation>
+              <xs:documentation>The horizontal position of the watermark within a tile.</xs:documentation>
             </xs:annotation>
           </xs:element>
           <xs:element name="VerticalPosition" type="VerticalPositionType">
             <xs:annotation>
-              <xs:documentation>Vertical position within tile</xs:documentation>
+              <xs:documentation>The vertical position of the watermark within a tile.</xs:documentation>
             </xs:annotation>
           </xs:element>
         </xs:sequence>
@@ -150,28 +150,28 @@
   </xs:complexType>
   <xs:complexType name="WatermarkAppearanceType">
     <xs:annotation>
-      <xs:documentation>Appearance of a watermark.</xs:documentation>
+      <xs:documentation>Defines the appearance of a watermark.</xs:documentation>
     </xs:annotation>
     <xs:sequence>
-      <xs:element name="Transparency" minOccurs="0" default="0">
+      <xs:element name="Transparency" minOccurs="0" default="0.0">
         <xs:annotation>
-          <xs:documentation>The transparency of a watermark (0-100).  The default value is 0 (opaque).</xs:documentation>
+          <xs:documentation>The transparency of the watermark in the range 0-100.  The default value is 0 (opaque).</xs:documentation>
         </xs:annotation>
         <xs:simpleType>
           <xs:restriction base="xs:double">
-            <xs:minInclusive value="0"/>
-            <xs:maxInclusive value="100"/>
+            <xs:minInclusive value="0.0"/>
+            <xs:maxInclusive value="100.0"/>
           </xs:restriction>
         </xs:simpleType>
       </xs:element>
-      <xs:element name="Rotation" minOccurs="0" default="0">
+      <xs:element name="Rotation" minOccurs="0" default="0.0">
         <xs:annotation>
-          <xs:documentation>The rotation of a watermark (0-360), in degrees.  The default value is 0</xs:documentation>
+          <xs:documentation>The rotation of the watermark, in degrees, in the range 0-360.  The default value is 0.</xs:documentation>
         </xs:annotation>
         <xs:simpleType>
           <xs:restriction base="xs:double">
-            <xs:minInclusive value="0"/>
-            <xs:maxInclusive value="360"/>
+            <xs:minInclusive value="0.0"/>
+            <xs:maxInclusive value="360.0"/>
           </xs:restriction>
         </xs:simpleType>
       </xs:element>
@@ -179,25 +179,17 @@
   </xs:complexType>
   <xs:complexType name="WatermarkDefinitionType">
     <xs:annotation>
-      <xs:documentation>Watermark definition contains content and position of watermark.</xs:documentation>
+      <xs:documentation>A watermark definition containing content, appearance, and position information.</xs:documentation>
     </xs:annotation>
     <xs:sequence>
-      <xs:element name="WatermarkSource">
+      <xs:element name="Content">
         <xs:annotation>
-          <xs:documentation>Content source of watermark</xs:documentation>
+          <xs:documentation>A symbol definition defining the content of the watermark.</xs:documentation>
         </xs:annotation>
         <xs:complexType>
           <xs:choice>
-            <xs:element name="SimpleSymbolDefinition" type="SimpleSymbolDefinition">
-              <xs:annotation>
-                <xs:documentation>An inlined SimpleSymbolDefinition.</xs:documentation>
-              </xs:annotation>
-            </xs:element>
-            <xs:element name="CompoundSymbolDefinition" type="CompoundSymbolDefinition">
-              <xs:annotation>
-                <xs:documentation>An inlined CompoundSymbolDefinition.</xs:documentation>
-              </xs:annotation>
-            </xs:element>
+            <xs:element name="SimpleSymbolDefinition" type="SimpleSymbolDefinition" />
+            <xs:element name="CompoundSymbolDefinition" type="CompoundSymbolDefinition" />
           </xs:choice>
         </xs:complexType>
       </xs:element>
@@ -212,101 +204,81 @@
         </xs:annotation>
         <xs:complexType>
           <xs:choice>
-            <xs:element name="XYPosition" type="XYPositionType">
-              <xs:annotation>
-                <xs:documentation>X-Y position</xs:documentation>
-              </xs:annotation>
-            </xs:element>
-            <xs:element name="TilePosition" type="TilePositionType">
-              <xs:annotation>
-                <xs:documentation>Tile position</xs:documentation>
-              </xs:annotation>
-            </xs:element>
+            <xs:element name="XYPosition" type="XYPositionType" />
+            <xs:element name="TilePosition" type="TilePositionType" />
           </xs:choice>
         </xs:complexType>
       </xs:element>
-      <xs:element name="ExtendedData" type="ExtendedDataType" minOccurs="0"/>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
     </xs:sequence>
   </xs:complexType>
   <xs:simpleType name="UsageType">
     <xs:annotation>
-      <xs:documentation>The context in which the watermark can be used.</xs:documentation>
+      <xs:documentation>Specifies the context in which the watermark is displayed.</xs:documentation>
     </xs:annotation>
     <xs:restriction base="xs:string">
       <xs:enumeration value="WMS">
         <xs:annotation>
-          <xs:documentation>Watermark can show in WMS.</xs:documentation>
+          <xs:documentation>Watermark is displayed in WMS.</xs:documentation>
         </xs:annotation>
       </xs:enumeration>
       <xs:enumeration value="Viewer">
         <xs:annotation>
-          <xs:documentation>Watermark can show in AJAX viewer or Fusion viewer.</xs:documentation>
+          <xs:documentation>Watermark is displayed in AJAX or Fusion viewers.</xs:documentation>
         </xs:annotation>
       </xs:enumeration>
       <xs:enumeration value="All">
         <xs:annotation>
-          <xs:documentation>Watermark can show in all situations.</xs:documentation>
+          <xs:documentation>Watermark is displayed in all contexts.</xs:documentation>
         </xs:annotation>
       </xs:enumeration>
     </xs:restriction>
   </xs:simpleType>
   <xs:complexType name="WatermarkType">
     <xs:annotation>
-      <xs:documentation>Watermark instance used in map definition / layer definition.</xs:documentation>
+      <xs:documentation>A watermark instance used in a map definition or layer definition.</xs:documentation>
     </xs:annotation>
     <xs:sequence>
       <xs:element name="Name" type="xs:string">
         <xs:annotation>
-          <xs:documentation>The name of watermark.</xs:documentation>
+          <xs:documentation>The name of the watermark.</xs:documentation>
         </xs:annotation>
       </xs:element>
       <xs:element name="ResourceId" type="xs:string">
         <xs:annotation>
-          <xs:documentation>A reference to an existing watermark definition.</xs:documentation>
+          <xs:documentation>A library reference to an existing WatermarkDefinition.</xs:documentation>
         </xs:annotation>
       </xs:element>
       <xs:element name="Usage" type="UsageType" minOccurs="0" default="All">
         <xs:annotation>
-          <xs:documentation>The context in which the watermark can be used.  The default value is All.</xs:documentation>
+          <xs:documentation>The context in which the watermark is displayed.  Defaults to All.</xs:documentation>
         </xs:annotation>
       </xs:element>
-      <xs:element name="AppearanceOverrides" type="WatermarkAppearanceType" minOccurs="0">
+      <xs:element name="AppearanceOverride" type="WatermarkAppearanceType" minOccurs="0">
         <xs:annotation>
-          <xs:documentation>The configuration here will override appearance configuration in watermark definition</xs:documentation>
+          <xs:documentation>If specified, overrides the appearance of the watermark definition.</xs:documentation>
         </xs:annotation>
       </xs:element>
-      <xs:element name="PositionOverrides" minOccurs="0">
+      <xs:element name="PositionOverride" minOccurs="0">
         <xs:annotation>
-          <xs:documentation>The configuration here will override position configuration in watermark definition</xs:documentation>
+          <xs:documentation>If specified, overrides the position of the watermark definition.</xs:documentation>
         </xs:annotation>
         <xs:complexType>
           <xs:choice>
-            <xs:element name="XYPosition" type="XYPositionType">
-              <xs:annotation>
-                <xs:documentation>A X-Y position</xs:documentation>
-              </xs:annotation>
-            </xs:element>
-            <xs:element name="TilePosition" type="TilePositionType">
-              <xs:annotation>
-                <xs:documentation>Tile position.</xs:documentation>
-              </xs:annotation>
-            </xs:element>
+            <xs:element name="XYPosition" type="XYPositionType" />
+            <xs:element name="TilePosition" type="TilePositionType" />
           </xs:choice>
         </xs:complexType>
       </xs:element>
-      <xs:element name="ExtendedData" type="ExtendedDataType" minOccurs="0"/>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="WatermarkInstanceCollectionType">
     <xs:annotation>
-      <xs:documentation>A collection of watermarks used by a map or layer.</xs:documentation>
+      <xs:documentation>A collection of watermarks used by a map definition or layer definition.</xs:documentation>
     </xs:annotation>
     <xs:sequence>
-      <xs:element name="Watermark" type="WatermarkType" minOccurs="0" maxOccurs="unbounded">
-        <xs:annotation>
-          <xs:documentation>A single watermark in the map definition or layer definition.</xs:documentation>
-        </xs:annotation>
-      </xs:element>
+      <xs:element name="Watermark" type="WatermarkType" minOccurs="0" maxOccurs="unbounded" />
     </xs:sequence>
   </xs:complexType>
 </xs:schema>

Modified: trunk/MgDev/Common/Stylization/StylizationEngine.cpp
===================================================================
--- trunk/MgDev/Common/Stylization/StylizationEngine.cpp	2010-09-17 23:20:07 UTC (rev 5150)
+++ trunk/MgDev/Common/Stylization/StylizationEngine.cpp	2010-09-18 07:34:36 UTC (rev 5151)
@@ -266,7 +266,7 @@
     CompositeSymbolization symbols;
 
     std::auto_ptr<SymbolInstance> instance(new SymbolInstance());
-    instance->AdoptSymbolDefinition(watermark->GetSource());
+    instance->AdoptSymbolDefinition(watermark->GetContent());
     instance->SetUsageContext(SymbolInstance::ucPoint);
     symbols.GetSymbolCollection()->Adopt(instance.release());
 



More information about the mapguide-commits mailing list