]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/ifacecheck/src/xmlparser.cpp
committing current cocoa state just to be safe ...
[wxWidgets.git] / utils / ifacecheck / src / xmlparser.cpp
index c91695a4bda6d6e7696e81618ec2ae4ecec76acf..7b29c794ff21643e8d27cad9d54d6499b71d8b5c 100644 (file)
@@ -74,6 +74,15 @@ void wxType::SetTypeFromString(const wxString& t)
     m_strType.Replace(" ,", ",");
 
     m_strType = m_strType.Strip(wxString::both);
+
+    // now set the clean version
+    m_strTypeClean = m_strType;
+    m_strTypeClean.Replace("const", "");
+    m_strTypeClean.Replace("static", "");
+    m_strTypeClean.Replace("*", "");
+    m_strTypeClean.Replace("&", "");
+    m_strTypeClean.Replace("[]", "");
+    m_strTypeClean = m_strTypeClean.Strip(wxString::both);
 }
 
 bool wxType::IsOk() const
@@ -82,25 +91,14 @@ bool wxType::IsOk() const
     //     "reverse_iterator_impl<wxString::const_iterator>" type
     //     It can also contain commas, * and & operators etc
 
-    return !GetClean().IsEmpty();
-}
-
-wxString wxType::GetClean() const
-{
-    wxString ret(m_strType);
-    ret.Replace("const", "");
-    ret.Replace("static", "");
-    ret.Replace("*", "");
-    ret.Replace("&", "");
-    ret.Replace("[]", "");
-    return ret.Strip(wxString::both);
+    return !m_strTypeClean.IsEmpty();
 }
 
 bool wxType::operator==(const wxType& m) const
 {
     // brain-dead comparison:
 
-    if (GetClean() == m.GetClean() &&
+    if (m_strTypeClean == m.m_strTypeClean &&
         IsConst() == m.IsConst() &&
         IsStatic() == m.IsStatic() &&
         IsPointer() == m.IsPointer() &&
@@ -486,10 +484,10 @@ typedef std::map<unsigned long, toResolveTypeItem> wxToResolveTypeHashMap;
 bool getID(unsigned long *id, const wxStringCharType* str)
 {
     wxStringCharType *end;
-#if wxUSE_UNICODE_UTF8
-    unsigned long val = strtoul(str+1, &end, GCCXML_BASE);
-#else
+#if wxUSE_UNICODE_WCHAR
     unsigned long val = wcstoul(str+1, &end, GCCXML_BASE);
+#else
+    unsigned long val = strtoul(str+1, &end, GCCXML_BASE);
 #endif
 
     // return true only if scan was stopped by the terminating NUL and
@@ -506,10 +504,10 @@ bool getID(unsigned long *id, const wxStringCharType* str)
 // in nodes like <Class> ones... i.e. numeric values separed by " _" token
 bool getMemberIDs(wxClassMemberIdHashMap* map, wxClass* p, const wxStringCharType* str)
 {
-#if wxUSE_UNICODE_UTF8
-    size_t len = strlen(str);
-#else
+#if wxUSE_UNICODE_WCHAR
     size_t len = wcslen(str);
+#else
+    size_t len = strlen(str);
 #endif
 
     if (len == 0 || str[0] != '_')
@@ -522,10 +520,10 @@ bool getMemberIDs(wxClassMemberIdHashMap* map, wxClass* p, const wxStringCharTyp
     while (curpos < end)
     {
         // curpos always points to the underscore of the next token to parse:
-#if wxUSE_UNICODE_UTF8
-        unsigned long id = strtoul(curpos+1, &nexttoken, GCCXML_BASE);
-#else
+#if wxUSE_UNICODE_WCHAR
         unsigned long id = wcstoul(curpos+1, &nexttoken, GCCXML_BASE);
+#else
+        unsigned long id = strtoul(curpos+1, &nexttoken, GCCXML_BASE);
 #endif
         if ( *nexttoken != ' ' || errno == ERANGE || errno == EINVAL )
             return false;
@@ -565,6 +563,31 @@ bool wxXmlGccInterface::Parse(const wxString& filename)
         return false;
     }
 
+    wxString version = doc.GetRoot()->GetAttribute("cvs_revision");
+    bool old = false;
+
+#define MIN_REVISION  120
+
+    if (!version.StartsWith("1."))
+        old = true;
+    if (!old)
+    {
+        unsigned long rev = 0;
+        if (!version.Mid(2).ToULong(&rev))
+            old = true;
+        else
+            if (rev < MIN_REVISION)
+                old = true;
+    }
+
+    if (old)
+    {
+        LogError("The version of GCC-XML used for the creation of %s is too old; "
+                 "the cvs_revision attribute of the root node reports '%s', "
+                 "minimal required is 1.%d.", filename, version, MIN_REVISION);
+        return false;
+    }
+
     wxToResolveTypeHashMap toResolveTypes;
     wxClassMemberIdHashMap members;
     wxTypeIdHashMap types;
@@ -1078,6 +1101,13 @@ bool wxXmlDoxygenInterface::Parse(const wxString& filename)
         return false;
     }
 
+    /*
+        NB: we may need in future to do a version-check here if the
+            format of the XML generated by doxygen changes.
+            For now (doxygen version 1.5.5), this check is not required
+            since AFAIK the XML format never changed since it was introduced.
+    */
+
     m_classes.Alloc(ESTIMATED_NUM_CLASSES);
 
     // process files referenced by this index file