Index: core/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp |
diff --git a/core/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp b/core/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp |
deleted file mode 100644 |
index 304cb4a7e6c583ef91342086318e9f425073bd69..0000000000000000000000000000000000000000 |
--- a/core/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp |
+++ /dev/null |
@@ -1,221 +0,0 @@ |
-// 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 "core/fpdfapi/fpdf_parser/fpdf_parser_utility.h" |
- |
-#include "core/fpdfapi/fpdf_parser/cpdf_array.h" |
-#include "core/fpdfapi/fpdf_parser/cpdf_dictionary.h" |
-#include "core/fpdfapi/fpdf_parser/cpdf_number.h" |
-#include "core/fpdfapi/fpdf_parser/cpdf_reference.h" |
-#include "core/fpdfapi/fpdf_parser/cpdf_stream.h" |
-#include "core/fpdfapi/fpdf_parser/cpdf_stream_acc.h" |
-#include "core/fpdfapi/fpdf_parser/cpdf_string.h" |
-#include "core/fpdfapi/fpdf_parser/fpdf_parser_decode.h" |
-#include "core/fxcrt/fx_ext.h" |
- |
-// Indexed by 8-bit character code, contains either: |
-// 'W' - for whitespace: NUL, TAB, CR, LF, FF, SPACE, 0x80, 0xff |
-// 'N' - for numeric: 0123456789+-. |
-// 'D' - for delimiter: %()/<>[]{} |
-// 'R' - otherwise. |
-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'}; |
- |
-int32_t GetHeaderOffset(IFX_FileRead* pFile) { |
- const size_t kBufSize = 4; |
- uint8_t buf[kBufSize]; |
- for (int32_t offset = 0; offset <= 1024; ++offset) { |
- if (!pFile->ReadBlock(buf, offset, kBufSize)) |
- return -1; |
- |
- if (memcmp(buf, "%PDF", 4) == 0) |
- return offset; |
- } |
- return -1; |
-} |
- |
-int32_t GetDirectInteger(CPDF_Dictionary* pDict, const CFX_ByteString& key) { |
- CPDF_Number* pObj = ToNumber(pDict->GetObjectFor(key)); |
- return pObj ? pObj->GetInteger() : 0; |
-} |
- |
-CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& bstr) { |
- if (bstr.Find('#') == -1) |
- return CFX_ByteString(bstr); |
- |
- int size = bstr.GetLength(); |
- CFX_ByteString result; |
- FX_CHAR* pDestStart = result.GetBuffer(size); |
- FX_CHAR* pDest = pDestStart; |
- for (int i = 0; i < size; i++) { |
- if (bstr[i] == '#' && i < size - 2) { |
- *pDest++ = |
- FXSYS_toHexDigit(bstr[i + 1]) * 16 + FXSYS_toHexDigit(bstr[i + 2]); |
- i += 2; |
- } else { |
- *pDest++ = bstr[i]; |
- } |
- } |
- result.ReleaseBuffer((FX_STRSIZE)(pDest - pDestStart)); |
- return result; |
-} |
- |
-CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig) { |
- if (orig.Find('#') == -1) |
- return orig; |
- return PDF_NameDecode(orig.AsStringC()); |
-} |
- |
-CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig) { |
- uint8_t* src_buf = (uint8_t*)orig.c_str(); |
- int src_len = orig.GetLength(); |
- int dest_len = 0; |
- int i; |
- for (i = 0; i < src_len; i++) { |
- uint8_t ch = src_buf[i]; |
- if (ch >= 0x80 || PDFCharIsWhitespace(ch) || ch == '#' || |
- PDFCharIsDelimiter(ch)) { |
- dest_len += 3; |
- } else { |
- dest_len++; |
- } |
- } |
- if (dest_len == src_len) |
- return orig; |
- |
- CFX_ByteString res; |
- FX_CHAR* dest_buf = res.GetBuffer(dest_len); |
- dest_len = 0; |
- for (i = 0; i < src_len; i++) { |
- uint8_t ch = src_buf[i]; |
- if (ch >= 0x80 || PDFCharIsWhitespace(ch) || ch == '#' || |
- PDFCharIsDelimiter(ch)) { |
- dest_buf[dest_len++] = '#'; |
- dest_buf[dest_len++] = "0123456789ABCDEF"[ch / 16]; |
- dest_buf[dest_len++] = "0123456789ABCDEF"[ch % 16]; |
- } else { |
- dest_buf[dest_len++] = ch; |
- } |
- } |
- dest_buf[dest_len] = 0; |
- res.ReleaseBuffer(); |
- return res; |
-} |
- |
-CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& buf, const CPDF_Object* pObj) { |
- if (!pObj) { |
- buf << " null"; |
- return buf; |
- } |
- switch (pObj->GetType()) { |
- case CPDF_Object::NULLOBJ: |
- buf << " null"; |
- break; |
- case CPDF_Object::BOOLEAN: |
- case CPDF_Object::NUMBER: |
- buf << " " << pObj->GetString(); |
- break; |
- case CPDF_Object::STRING: |
- buf << PDF_EncodeString(pObj->GetString(), pObj->AsString()->IsHex()); |
- break; |
- case CPDF_Object::NAME: { |
- CFX_ByteString str = pObj->GetString(); |
- buf << "/" << PDF_NameEncode(str); |
- break; |
- } |
- case CPDF_Object::REFERENCE: { |
- buf << " " << pObj->AsReference()->GetRefObjNum() << " 0 R "; |
- break; |
- } |
- case CPDF_Object::ARRAY: { |
- const CPDF_Array* p = pObj->AsArray(); |
- buf << "["; |
- for (size_t i = 0; i < p->GetCount(); i++) { |
- CPDF_Object* pElement = p->GetObjectAt(i); |
- if (pElement && pElement->GetObjNum()) { |
- buf << " " << pElement->GetObjNum() << " 0 R"; |
- } else { |
- buf << pElement; |
- } |
- } |
- buf << "]"; |
- break; |
- } |
- case CPDF_Object::DICTIONARY: { |
- const CPDF_Dictionary* p = pObj->AsDictionary(); |
- buf << "<<"; |
- for (const auto& it : *p) { |
- const CFX_ByteString& key = it.first; |
- CPDF_Object* pValue = it.second; |
- buf << "/" << PDF_NameEncode(key); |
- if (pValue && pValue->GetObjNum()) { |
- buf << " " << pValue->GetObjNum() << " 0 R "; |
- } else { |
- buf << pValue; |
- } |
- } |
- buf << ">>"; |
- break; |
- } |
- case CPDF_Object::STREAM: { |
- const CPDF_Stream* p = pObj->AsStream(); |
- buf << p->GetDict() << "stream\r\n"; |
- CPDF_StreamAcc acc; |
- acc.LoadAllData(p, TRUE); |
- buf.AppendBlock(acc.GetData(), acc.GetSize()); |
- buf << "\r\nendstream"; |
- break; |
- } |
- default: |
- ASSERT(FALSE); |
- break; |
- } |
- return buf; |
-} |