Add xml:lang support to XMLObject
authorScott Cantor <cantor.2@osu.edu>
Thu, 29 Mar 2012 21:14:19 +0000 (21:14 +0000)
committerScott Cantor <cantor.2@osu.edu>
Thu, 29 Mar 2012 21:14:19 +0000 (21:14 +0000)
xmltooling/AbstractAttributeExtensibleXMLObject.cpp
xmltooling/AbstractAttributeExtensibleXMLObject.h
xmltooling/AbstractXMLObject.cpp
xmltooling/XMLObject.h

index a89d8a1..166e96c 100644 (file)
@@ -135,6 +135,13 @@ const XMLCh* AbstractAttributeExtensibleXMLObject::getAttribute(const xmltooling
     return (i != m_attributeMap.end()) ? i->second : nullptr;
 }
 
+const XMLCh* AbstractAttributeExtensibleXMLObject::getLang() const
+{
+    static const XMLCh _lang[] = UNICODE_LITERAL_4(l,a,n,g);
+    static xmltooling::QName qname(xmlconstants::XML_NS, _lang);
+    return getAttribute(qname);
+}
+
 void AbstractAttributeExtensibleXMLObject::setAttribute(const xmltooling::QName& qualifiedName, const XMLCh* value, bool ID)
 {
     map<xmltooling::QName,XMLCh*>::iterator i=m_attributeMap.find(qualifiedName);
index c09d711..3881dee 100644 (file)
@@ -54,6 +54,7 @@ namespace xmltooling {
         void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false);
         const std::map<QName,XMLCh*>& getExtensionAttributes() const;
         const XMLCh* getXMLID() const;
+        const XMLCh* getLang() const;
     
      protected:
         AbstractAttributeExtensibleXMLObject();
index cb2d7f4..4ba5d7c 100644 (file)
@@ -56,6 +56,36 @@ void XMLObject::releaseThisAndChildrenDOM() const
     releaseDOM();
 }
 
+const XMLCh* XMLObject::getLang() const
+{
+    return nullptr;
+}
+
+void XMLObject::setNil(const XMLCh* value)
+{
+    if (value) {
+        switch (*value) {
+            case xercesc::chLatin_t:
+                nil(xmlconstants::XML_BOOL_TRUE);
+                break;
+            case xercesc::chLatin_f:
+                nil(xmlconstants::XML_BOOL_FALSE);
+                break;
+            case xercesc::chDigit_1:
+                nil(xmlconstants::XML_BOOL_ONE);
+                break;
+            case xercesc::chDigit_0:
+                nil(xmlconstants::XML_BOOL_ZERO);
+                break;
+            default:
+                nil(xmlconstants::XML_BOOL_NULL);
+        }
+    }
+    else {
+        nil(xmlconstants::XML_BOOL_NULL);
+    }
+}
+
 AbstractXMLObject::AbstractXMLObject(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType)
     : m_log(logging::Category::getInstance(XMLTOOLING_LOGCAT".XMLObject")),
        m_schemaLocation(nullptr), m_noNamespaceSchemaLocation(nullptr), m_nil(xmlconstants::XML_BOOL_NULL),
@@ -105,31 +135,6 @@ const set<Namespace>& AbstractXMLObject::getNamespaces() const
     return m_namespaces;
 }
 
-void XMLObject::setNil(const XMLCh* value)
-{
-    if (value) {
-        switch (*value) {
-            case xercesc::chLatin_t:
-                nil(xmlconstants::XML_BOOL_TRUE);
-                break;
-            case xercesc::chLatin_f:
-                nil(xmlconstants::XML_BOOL_FALSE);
-                break;
-            case xercesc::chDigit_1:
-                nil(xmlconstants::XML_BOOL_ONE);
-                break;
-            case xercesc::chDigit_0:
-                nil(xmlconstants::XML_BOOL_ZERO);
-                break;
-            default:
-                nil(xmlconstants::XML_BOOL_NULL);
-        }
-    }
-    else {
-        nil(xmlconstants::XML_BOOL_NULL);
-    }
-}
-
 void AbstractXMLObject::addNamespace(const Namespace& ns) const
 {
     for (set<Namespace>::const_iterator n = m_namespaces.begin(); n != m_namespaces.end(); ++n) {
index e0391ad..8ebb607 100644 (file)
@@ -131,6 +131,13 @@ namespace xmltooling {
         virtual const XMLCh* getXMLID() const=0;
 
         /**
+         * Returns the xml:lang property of the object, if any.
+         *
+         * @return  an xml:lang value, or nullptr
+         */
+        virtual const XMLCh* getLang() const;
+
+        /**
          * Returns the xsi:nil property of the object, or false if not set.
          * 
          * @return     the xsi:nil property