From 014b012278b7438ef8d4b66730b8598c7eb4623a Mon Sep 17 00:00:00 2001 From: npm Date: Mon, 7 Nov 2016 08:42:11 -0800 Subject: Clean up fpdf_page_parsers - The code in fpdf_page_parser is only called by CPDF_StreamContentParser, so moved there. - Split fpdf_page_parser_old into its two classes - Renamed the corresponding unittests accordingly. - Moved PDF_ReplaceAbbr to namespace - Fixed few nits - Added TODO because CPDF_StreamParser has a lot of code similar to CPDF_SyntaxParser Review-Url: https://codereview.chromium.org/2474303003 --- core/fpdfapi/page/fpdf_page_parser.cpp | 158 --------------------------------- 1 file changed, 158 deletions(-) delete mode 100644 core/fpdfapi/page/fpdf_page_parser.cpp (limited to 'core/fpdfapi/page/fpdf_page_parser.cpp') diff --git a/core/fpdfapi/page/fpdf_page_parser.cpp b/core/fpdfapi/page/fpdf_page_parser.cpp deleted file mode 100644 index b6f0bc605c..0000000000 --- a/core/fpdfapi/page/fpdf_page_parser.cpp +++ /dev/null @@ -1,158 +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/page/pageint.h" - -#include -#include -#include - -#include "core/fpdfapi/edit/cpdf_creator.h" -#include "core/fpdfapi/font/cpdf_font.h" -#include "core/fpdfapi/font/cpdf_type3font.h" -#include "core/fpdfapi/page/cpdf_allstates.h" -#include "core/fpdfapi/page/cpdf_docpagedata.h" -#include "core/fpdfapi/page/cpdf_form.h" -#include "core/fpdfapi/page/cpdf_formobject.h" -#include "core/fpdfapi/page/cpdf_image.h" -#include "core/fpdfapi/page/cpdf_imageobject.h" -#include "core/fpdfapi/page/cpdf_meshstream.h" -#include "core/fpdfapi/page/cpdf_pageobject.h" -#include "core/fpdfapi/page/cpdf_pathobject.h" -#include "core/fpdfapi/page/cpdf_shadingobject.h" -#include "core/fpdfapi/page/cpdf_shadingpattern.h" -#include "core/fpdfapi/page/cpdf_textobject.h" -#include "core/fpdfapi/parser/cpdf_array.h" -#include "core/fpdfapi/parser/cpdf_dictionary.h" -#include "core/fpdfapi/parser/cpdf_document.h" -#include "core/fpdfapi/parser/cpdf_name.h" -#include "core/fpdfapi/parser/cpdf_number.h" -#include "core/fpdfapi/parser/cpdf_reference.h" -#include "core/fpdfapi/parser/cpdf_stream.h" -#include "core/fpdfapi/parser/cpdf_stream_acc.h" -#include "core/fpdfapi/parser/fpdf_parser_decode.h" -#include "core/fxcrt/fx_safe_types.h" -#include "core/fxge/cfx_graphstatedata.h" -#include "core/fxge/cfx_pathdata.h" -#include "third_party/base/ptr_util.h" - -namespace { - -struct PDF_AbbrPair { - const FX_CHAR* abbr; - const FX_CHAR* full_name; -}; - -const PDF_AbbrPair PDF_InlineKeyAbbr[] = { - {"BPC", "BitsPerComponent"}, {"CS", "ColorSpace"}, {"D", "Decode"}, - {"DP", "DecodeParms"}, {"F", "Filter"}, {"H", "Height"}, - {"IM", "ImageMask"}, {"I", "Interpolate"}, {"W", "Width"}, -}; - -const PDF_AbbrPair PDF_InlineValueAbbr[] = { - {"G", "DeviceGray"}, {"RGB", "DeviceRGB"}, - {"CMYK", "DeviceCMYK"}, {"I", "Indexed"}, - {"AHx", "ASCIIHexDecode"}, {"A85", "ASCII85Decode"}, - {"LZW", "LZWDecode"}, {"Fl", "FlateDecode"}, - {"RL", "RunLengthDecode"}, {"CCF", "CCITTFaxDecode"}, - {"DCT", "DCTDecode"}, -}; - -struct AbbrReplacementOp { - bool is_replace_key; - CFX_ByteString key; - CFX_ByteStringC replacement; -}; - -CFX_ByteStringC PDF_FindFullName(const PDF_AbbrPair* table, - size_t count, - const CFX_ByteStringC& abbr) { - auto it = std::find_if( - table, table + count, - [abbr](const PDF_AbbrPair& pair) { return pair.abbr == abbr; }); - return it != table + count ? CFX_ByteStringC(it->full_name) - : CFX_ByteStringC(); -} - -} // namespace - -CFX_ByteStringC PDF_FindKeyAbbreviationForTesting(const CFX_ByteStringC& abbr) { - return PDF_FindFullName(PDF_InlineKeyAbbr, FX_ArraySize(PDF_InlineKeyAbbr), - abbr); -} - -CFX_ByteStringC PDF_FindValueAbbreviationForTesting( - const CFX_ByteStringC& abbr) { - return PDF_FindFullName(PDF_InlineValueAbbr, - FX_ArraySize(PDF_InlineValueAbbr), abbr); -} - -void PDF_ReplaceAbbr(CPDF_Object* pObj) { - switch (pObj->GetType()) { - case CPDF_Object::DICTIONARY: { - CPDF_Dictionary* pDict = pObj->AsDictionary(); - std::vector replacements; - for (const auto& it : *pDict) { - CFX_ByteString key = it.first; - CPDF_Object* value = it.second; - CFX_ByteStringC fullname = - PDF_FindFullName(PDF_InlineKeyAbbr, FX_ArraySize(PDF_InlineKeyAbbr), - key.AsStringC()); - if (!fullname.IsEmpty()) { - AbbrReplacementOp op; - op.is_replace_key = true; - op.key = key; - op.replacement = fullname; - replacements.push_back(op); - key = fullname; - } - - if (value->IsName()) { - CFX_ByteString name = value->GetString(); - fullname = PDF_FindFullName(PDF_InlineValueAbbr, - FX_ArraySize(PDF_InlineValueAbbr), - name.AsStringC()); - if (!fullname.IsEmpty()) { - AbbrReplacementOp op; - op.is_replace_key = false; - op.key = key; - op.replacement = fullname; - replacements.push_back(op); - } - } else { - PDF_ReplaceAbbr(value); - } - } - for (const auto& op : replacements) { - if (op.is_replace_key) - pDict->ReplaceKey(op.key, CFX_ByteString(op.replacement)); - else - pDict->SetNameFor(op.key, CFX_ByteString(op.replacement)); - } - break; - } - case CPDF_Object::ARRAY: { - CPDF_Array* pArray = pObj->AsArray(); - for (size_t i = 0; i < pArray->GetCount(); i++) { - CPDF_Object* pElement = pArray->GetObjectAt(i); - if (pElement->IsName()) { - CFX_ByteString name = pElement->GetString(); - CFX_ByteStringC fullname = PDF_FindFullName( - PDF_InlineValueAbbr, FX_ArraySize(PDF_InlineValueAbbr), - name.AsStringC()); - if (!fullname.IsEmpty()) { - pArray->SetAt(i, new CPDF_Name(CFX_ByteString(fullname))); - } - } else { - PDF_ReplaceAbbr(pElement); - } - } - break; - } - default: - break; - } -} -- cgit v1.2.3