Merge to XFA: Remove FX_BSTR and FX_WSTR typedefs.
[pdfium.git] / core / src / fpdfdoc / doc_metadata.cpp
index e3ac9e3..21f427a 100644 (file)
-// Copyright 2014 PDFium Authors. All rights reserved.\r
-// Use of this source code is governed by a BSD-style license that can be\r
-// found in the LICENSE file.\r
\r
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
-\r
-#include "../../include/fpdfdoc/fpdf_doc.h"\r
-#include "../../include/fxcrt/fx_xml.h"\r
-typedef struct _PDFDOC_METADATA {\r
-    CPDF_Document *m_pDoc;\r
-    CXML_Element *m_pXmlElmnt;\r
-    CXML_Element *m_pElmntRdf;\r
-    CFX_CMapByteStringToPtr *m_pStringMap;\r
-} PDFDOC_METADATA, * PDFDOC_LPMETADATA;\r
-typedef PDFDOC_METADATA const * PDFDOC_LPCMETADATA;\r
-const FX_LPCSTR gs_FPDFDOC_Metadata_Titles[] = {\r
-    "Title", "title",\r
-    "Subject", "description",\r
-    "Author", "creator",\r
-    "Keywords", "Keywords",\r
-    "Producer", "Producer",\r
-    "Creator", "CreatorTool",\r
-    "CreationDate", "CreateDate",\r
-    "ModDate", "ModifyDate",\r
-    "MetadataDate", "MetadataDate"\r
-};\r
-CPDF_Metadata::CPDF_Metadata()\r
-{\r
-    m_pData = FX_Alloc(PDFDOC_METADATA, 1);\r
-    FXSYS_memset32(m_pData, 0, sizeof(PDFDOC_METADATA));\r
-    CFX_CMapByteStringToPtr *&pStringMap = ((PDFDOC_LPMETADATA)m_pData)->m_pStringMap;\r
-    pStringMap = FX_NEW(CFX_CMapByteStringToPtr);\r
-    if (pStringMap != NULL) {\r
-        CFX_ByteString bstr;\r
-        for (int i = 0; i < 18; i += 2) {\r
-            bstr = gs_FPDFDOC_Metadata_Titles[i];\r
-            pStringMap->AddValue(bstr, (void*)gs_FPDFDOC_Metadata_Titles[i + 1]);\r
-        }\r
-    }\r
-}\r
-CPDF_Metadata::~CPDF_Metadata()\r
-{\r
-    FXSYS_assert(m_pData != NULL);\r
-    CXML_Element *&p = ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;\r
-    if (p) {\r
-        delete p;\r
-    }\r
-    CFX_CMapByteStringToPtr *pStringMap = ((PDFDOC_LPMETADATA)m_pData)->m_pStringMap;\r
-    if (pStringMap) {\r
-        pStringMap->RemoveAll();\r
-        FX_Free(pStringMap);\r
-    }\r
-    FX_Free(m_pData);\r
-}\r
-void CPDF_Metadata::LoadDoc(CPDF_Document *pDoc)\r
-{\r
-    FXSYS_assert(pDoc != NULL);\r
-    ((PDFDOC_LPMETADATA)m_pData)->m_pDoc = pDoc;\r
-    CPDF_Dictionary *pRoot = pDoc->GetRoot();\r
-    CPDF_Stream *pStream = pRoot->GetStream(FX_BSTRC("Metadata"));\r
-    if (!pStream) {\r
-        return;\r
-    }\r
-    CPDF_StreamAcc acc;\r
-    acc.LoadAllData(pStream, FALSE);\r
-    int size = acc.GetSize();\r
-    FX_LPCBYTE pBuf = acc.GetData();\r
-    CXML_Element *&pXmlElmnt = ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;\r
-    pXmlElmnt = CXML_Element::Parse(pBuf, size);\r
-    if (!pXmlElmnt) {\r
-        return;\r
-    }\r
-    CXML_Element *&pElmntRdf = ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;\r
-    if (pXmlElmnt->GetTagName() == FX_BSTRC("RDF")) {\r
-        pElmntRdf = pXmlElmnt;\r
-    } else {\r
-        pElmntRdf = pXmlElmnt->GetElement(NULL, FX_BSTRC("RDF"));\r
-    }\r
-}\r
-FX_INT32 CPDF_Metadata::GetString(FX_BSTR bsItem, CFX_WideString &wsStr)\r
-{\r
-    if (!((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt) {\r
-        return -1;\r
-    }\r
-    if (!((PDFDOC_LPMETADATA)m_pData)->m_pStringMap) {\r
-        return -1;\r
-    }\r
-    void *szTag;\r
-    if (!((PDFDOC_LPMETADATA)m_pData)->m_pStringMap->Lookup(bsItem, szTag)) {\r
-        return -1;\r
-    }\r
-    CFX_ByteString bsTag = (FX_LPCSTR)szTag;\r
-    wsStr = L"";\r
-    CXML_Element *pElmntRdf = ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;\r
-    if (!pElmntRdf) {\r
-        return -1;\r
-    }\r
-    int nChild = pElmntRdf->CountChildren();\r
-    for (int i = 0; i < nChild; i++) {\r
-        CXML_Element *pTag = pElmntRdf->GetElement(NULL, FX_BSTRC("Description"), i);\r
-        if (!pTag) {\r
-            continue;\r
-        }\r
-        if (bsItem == FX_BSTRC("Title") || bsItem == FX_BSTRC("Subject")) {\r
-            CXML_Element *pElmnt = pTag->GetElement(NULL, bsTag);\r
-            if (!pElmnt) {\r
-                continue;\r
-            }\r
-            pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("Alt"));\r
-            if (!pElmnt) {\r
-                continue;\r
-            }\r
-            pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("li"));\r
-            if (!pElmnt) {\r
-                continue;\r
-            }\r
-            wsStr = pElmnt->GetContent(0);\r
-            return wsStr.GetLength();\r
-        } else if (bsItem == FX_BSTRC("Author")) {\r
-            CXML_Element *pElmnt = pTag->GetElement(NULL, bsTag);\r
-            if (!pElmnt) {\r
-                continue;\r
-            }\r
-            pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("Seq"));\r
-            if (!pElmnt) {\r
-                continue;\r
-            }\r
-            pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("li"));\r
-            if (!pElmnt) {\r
-                continue;\r
-            }\r
-            wsStr = pElmnt->GetContent(0);\r
-            return wsStr.GetLength();\r
-        } else {\r
-            CXML_Element *pElmnt = pTag->GetElement(NULL, bsTag);\r
-            if (!pElmnt) {\r
-                continue;\r
-            }\r
-            wsStr = pElmnt->GetContent(0);\r
-            return wsStr.GetLength();\r
-        }\r
-    }\r
-    return -1;\r
-}\r
-CXML_Element* CPDF_Metadata::GetRoot() const\r
-{\r
-    return ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;\r
-}\r
-CXML_Element* CPDF_Metadata::GetRDF() const\r
-{\r
-    return ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;\r
-}\r
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "../../include/fpdfdoc/fpdf_doc.h"
+#include "../../include/fxcrt/fx_xml.h"
+typedef struct _PDFDOC_METADATA {
+    CPDF_Document *m_pDoc;
+    CXML_Element *m_pXmlElmnt;
+    CXML_Element *m_pElmntRdf;
+    CFX_CMapByteStringToPtr *m_pStringMap;
+} PDFDOC_METADATA, * PDFDOC_LPMETADATA;
+typedef PDFDOC_METADATA const * PDFDOC_LPCMETADATA;
+const FX_CHAR* const gs_FPDFDOC_Metadata_Titles[] = {
+    "Title", "title",
+    "Subject", "description",
+    "Author", "creator",
+    "Keywords", "Keywords",
+    "Producer", "Producer",
+    "Creator", "CreatorTool",
+    "CreationDate", "CreateDate",
+    "ModDate", "ModifyDate",
+    "MetadataDate", "MetadataDate"
+};
+CPDF_Metadata::CPDF_Metadata()
+{
+    m_pData = FX_Alloc(PDFDOC_METADATA, 1);
+    CFX_CMapByteStringToPtr *&pStringMap = ((PDFDOC_LPMETADATA)m_pData)->m_pStringMap;
+    pStringMap = FX_NEW CFX_CMapByteStringToPtr;
+    if (pStringMap != NULL) {
+        CFX_ByteString bstr;
+        for (int i = 0; i < 18; i += 2) {
+            bstr = gs_FPDFDOC_Metadata_Titles[i];
+            pStringMap->AddValue(bstr, (void*)gs_FPDFDOC_Metadata_Titles[i + 1]);
+        }
+    }
+}
+CPDF_Metadata::~CPDF_Metadata()
+{
+    FXSYS_assert(m_pData != NULL);
+    CXML_Element *&p = ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
+    delete p;
+    CFX_CMapByteStringToPtr *pStringMap = ((PDFDOC_LPMETADATA)m_pData)->m_pStringMap;
+    if (pStringMap) {
+        pStringMap->RemoveAll();
+        delete pStringMap;
+    }
+    FX_Free(m_pData);
+}
+void CPDF_Metadata::LoadDoc(CPDF_Document *pDoc)
+{
+    FXSYS_assert(pDoc != NULL);
+    ((PDFDOC_LPMETADATA)m_pData)->m_pDoc = pDoc;
+    CPDF_Dictionary *pRoot = pDoc->GetRoot();
+    CPDF_Stream *pStream = pRoot->GetStream(FX_BSTRC("Metadata"));
+    if (!pStream) {
+        return;
+    }
+    CPDF_StreamAcc acc;
+    acc.LoadAllData(pStream, FALSE);
+    int size = acc.GetSize();
+    const uint8_t* pBuf = acc.GetData();
+    CXML_Element *&pXmlElmnt = ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
+    pXmlElmnt = CXML_Element::Parse(pBuf, size);
+    if (!pXmlElmnt) {
+        return;
+    }
+    CXML_Element *&pElmntRdf = ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
+    if (pXmlElmnt->GetTagName() == FX_BSTRC("RDF")) {
+        pElmntRdf = pXmlElmnt;
+    } else {
+        pElmntRdf = pXmlElmnt->GetElement(NULL, FX_BSTRC("RDF"));
+    }
+}
+int32_t CPDF_Metadata::GetString(const CFX_ByteStringC& bsItem, CFX_WideString &wsStr)
+{
+    if (!((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt) {
+        return -1;
+    }
+    if (!((PDFDOC_LPMETADATA)m_pData)->m_pStringMap) {
+        return -1;
+    }
+    void *szTag;
+    if (!((PDFDOC_LPMETADATA)m_pData)->m_pStringMap->Lookup(bsItem, szTag)) {
+        return -1;
+    }
+    CFX_ByteString bsTag = (const FX_CHAR*)szTag;
+    wsStr = L"";
+    CXML_Element *pElmntRdf = ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
+    if (!pElmntRdf) {
+        return -1;
+    }
+    int nChild = pElmntRdf->CountChildren();
+    for (int i = 0; i < nChild; i++) {
+        CXML_Element *pTag = pElmntRdf->GetElement(NULL, FX_BSTRC("Description"), i);
+        if (!pTag) {
+            continue;
+        }
+        if (bsItem == FX_BSTRC("Title") || bsItem == FX_BSTRC("Subject")) {
+            CXML_Element *pElmnt = pTag->GetElement(NULL, bsTag);
+            if (!pElmnt) {
+                continue;
+            }
+            pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("Alt"));
+            if (!pElmnt) {
+                continue;
+            }
+            pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("li"));
+            if (!pElmnt) {
+                continue;
+            }
+            wsStr = pElmnt->GetContent(0);
+            return wsStr.GetLength();
+        } else if (bsItem == FX_BSTRC("Author")) {
+            CXML_Element *pElmnt = pTag->GetElement(NULL, bsTag);
+            if (!pElmnt) {
+                continue;
+            }
+            pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("Seq"));
+            if (!pElmnt) {
+                continue;
+            }
+            pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("li"));
+            if (!pElmnt) {
+                continue;
+            }
+            wsStr = pElmnt->GetContent(0);
+            return wsStr.GetLength();
+        } else {
+            CXML_Element *pElmnt = pTag->GetElement(NULL, bsTag);
+            if (!pElmnt) {
+                continue;
+            }
+            wsStr = pElmnt->GetContent(0);
+            return wsStr.GetLength();
+        }
+    }
+    return -1;
+}
+CXML_Element* CPDF_Metadata::GetRoot() const
+{
+    return ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
+}
+CXML_Element* CPDF_Metadata::GetRDF() const
+{
+    return ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
+}