Add missing operators for CFX_ByteStringC.
[pdfium.git] / core / src / fpdfapi / fpdf_parser / fpdf_parser_utility.cpp
index e5e68c2..df154ea 100644 (file)
@@ -5,15 +5,41 @@
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
 #include "../../../include/fpdfapi/fpdf_parser.h"
-extern const FX_LPCSTR _PDF_CharType =
-    "WRRRRRRRRWWRWWRRRRRRRRRRRRRRRRRR"
-    "WRRRRDRRDDRNRNNDNNNNNNNNNNRRDRDR"
-    "RRRRRRRRRRRRRRRRRRRRRRRRRRRDRDRR"
-    "RRRRRRRRRRRRRRRRRRRRRRRRRRRDRDRR"
-    "WRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"
-    "RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"
-    "RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"
-    "RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRW";
+const char PDF_CharType[256] = {
+  //NUL  SOH  STX  ETX  EOT  ENQ  ACK  BEL  BS   HT   LF   VT   FF   CR   SO   SI
+    'W', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'W', 'W', 'R', 'W', 'W', 'R', 'R',
+
+  //DLE  DC1  DC2  DC3  DC4  NAK  SYN  ETB  CAN  EM   SUB  ESC  FS   GS   RS   US
+    'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+
+  //SP    !    "    #    $    %    &    ยด    (    )    *    +    ,    -    .    /
+    'W', 'R', 'R', 'R', 'R', 'D', 'R', 'R', 'D', 'D', 'R', 'N', 'R', 'N', 'N', 'D',
+
+  // 0    1    2    3    4    5    6    7    8    9    :    ;    <    =    >    ?
+    'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'R', 'R', 'D', 'R', 'D', 'R',
+
+  // @    A    B    C    D    E    F    G    H    I    J    K    L    M    N    O
+    'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+
+  // P    Q    R    S    T    U    V    W    X    Y    Z    [    \    ]    ^    _
+    'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'D', 'R', 'D', 'R', 'R',
+
+  // `    a    b    c    d    e    f    g    h    i    j    k    l    m    n    o
+    'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+
+  // p    q    r    s    t    u    v    w    x    y    z    {    |    }    ~   DEL
+    'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'D', 'R', 'D', 'R', 'R',
+
+    'W', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+    'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+    'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+    'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+    'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+    'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+    'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+    'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'W'
+};
+
 #ifndef MAX_PATH
 #define MAX_PATH 4096
 #endif
@@ -25,7 +51,7 @@ CPDF_SimpleParser::CPDF_SimpleParser(FX_LPCBYTE pData, FX_DWORD dwSize)
 }
 CPDF_SimpleParser::CPDF_SimpleParser(FX_BSTR str)
 {
-    m_pData = str;
+    m_pData = str.GetPtr();
     m_dwSize = str.GetLength();
     m_dwCurPos = 0;
 }
@@ -41,13 +67,13 @@ void CPDF_SimpleParser::ParseWord(FX_LPCBYTE& pStart, FX_DWORD& dwSize, int& typ
             return;
         }
         ch = m_pData[m_dwCurPos++];
-        chartype = _PDF_CharType[ch];
+        chartype = PDF_CharType[ch];
         while (chartype == 'W') {
             if (m_dwSize <= m_dwCurPos) {
                 return;
             }
             ch = m_pData[m_dwCurPos++];
-            chartype = _PDF_CharType[ch];
+            chartype = PDF_CharType[ch];
         }
         if (ch != '%') {
             break;
@@ -61,7 +87,7 @@ void CPDF_SimpleParser::ParseWord(FX_LPCBYTE& pStart, FX_DWORD& dwSize, int& typ
                 break;
             }
         }
-        chartype = _PDF_CharType[ch];
+        chartype = PDF_CharType[ch];
     }
     FX_DWORD start_pos = m_dwCurPos - 1;
     pStart = m_pData + start_pos;
@@ -72,7 +98,7 @@ void CPDF_SimpleParser::ParseWord(FX_LPCBYTE& pStart, FX_DWORD& dwSize, int& typ
                     return;
                 }
                 ch = m_pData[m_dwCurPos++];
-                chartype = _PDF_CharType[ch];
+                chartype = PDF_CharType[ch];
                 if (chartype != 'R' && chartype != 'N') {
                     m_dwCurPos --;
                     dwSize = m_dwCurPos - start_pos;
@@ -117,7 +143,7 @@ void CPDF_SimpleParser::ParseWord(FX_LPCBYTE& pStart, FX_DWORD& dwSize, int& typ
             return;
         }
         ch = m_pData[m_dwCurPos++];
-        chartype = _PDF_CharType[ch];
+        chartype = PDF_CharType[ch];
         if (chartype == 'D' || chartype == 'W') {
             m_dwCurPos --;
             break;
@@ -172,7 +198,7 @@ FX_BOOL CPDF_SimpleParser::SearchToken(FX_BSTR token)
 {
     int token_len = token.GetLength();
     while (m_dwCurPos < m_dwSize - token_len) {
-        if (FXSYS_memcmp32(m_pData + m_dwCurPos, token, token_len) == 0) {
+        if (FXSYS_memcmp32(m_pData + m_dwCurPos, token.GetPtr(), token_len) == 0) {
             break;
         }
         m_dwCurPos ++;
@@ -297,8 +323,8 @@ CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig)
     int i;
     for (i = 0; i < src_len; i ++) {
         FX_BYTE ch = src_buf[i];
-        if (ch >= 0x80 || _PDF_CharType[ch] == 'W' || ch == '#' ||
-                _PDF_CharType[ch] == 'D') {
+        if (ch >= 0x80 || PDF_CharType[ch] == 'W' || ch == '#' ||
+                PDF_CharType[ch] == 'D') {
             dest_len += 3;
         } else {
             dest_len ++;
@@ -312,8 +338,8 @@ CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig)
     dest_len = 0;
     for (i = 0; i < src_len; i ++) {
         FX_BYTE ch = src_buf[i];
-        if (ch >= 0x80 || _PDF_CharType[ch] == 'W' || ch == '#' ||
-                _PDF_CharType[ch] == 'D') {
+        if (ch >= 0x80 || PDF_CharType[ch] == 'W' || ch == '#' ||
+                PDF_CharType[ch] == 'D') {
             dest_buf[dest_len++] = '#';
             dest_buf[dest_len++] = "0123456789ABCDEF"[ch / 16];
             dest_buf[dest_len++] = "0123456789ABCDEF"[ch % 16];