summaryrefslogtreecommitdiff
path: root/core/fpdfapi/fpdf_parser
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/fpdf_parser')
-rw-r--r--core/fpdfapi/fpdf_parser/cpdf_document.cpp379
-rw-r--r--core/fpdfapi/fpdf_parser/include/cpdf_document.h17
2 files changed, 0 insertions, 396 deletions
diff --git a/core/fpdfapi/fpdf_parser/cpdf_document.cpp b/core/fpdfapi/fpdf_parser/cpdf_document.cpp
index 89b41d5820..8910fa1205 100644
--- a/core/fpdfapi/fpdf_parser/cpdf_document.cpp
+++ b/core/fpdfapi/fpdf_parser/cpdf_document.cpp
@@ -220,127 +220,6 @@ CFX_ByteString FPDF_GetPSNameFromTT(HDC hDC) {
}
#endif // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
-struct FX_LANG2CS {
- uint32_t uLang;
- uint8_t uCharset;
-};
-const FX_LANG2CS gs_FXLang2CharsetTable[] = {
- {3109, 0}, {3121, 178}, {3129, 162}, {3139, 204}, {3141, 204},
- {3166, 0}, {3184, 238}, {3197, 0}, {3201, 0}, {3239, 161},
- {3241, 0}, {3246, 0}, {3247, 186}, {3248, 0}, {3259, 178},
- {3267, 0}, {3273, 0}, {3276, 0}, {3301, 0}, {3310, 1},
- {3325, 177}, {3329, 1}, {3338, 238}, {3341, 238}, {3345, 1},
- {3355, 0}, {3370, 0}, {3371, 0}, {3383, 128}, {3424, 204},
- {3427, 1}, {3428, 129}, {3436, 178}, {3464, 186}, {3466, 186},
- {3486, 204}, {3487, 0}, {3493, 1}, {3494, 0}, {3508, 0},
- {3518, 0}, {3520, 0}, {3569, 1}, {3580, 238}, {3588, 0},
- {3645, 238}, {3651, 204}, {3672, 238}, {3673, 238}, {3678, 238},
- {3679, 238}, {3683, 0}, {3684, 0}, {3693, 1}, {3697, 1},
- {3700, 222}, {3710, 162}, {3734, 204}, {3741, 178}, {3749, 162},
- {3763, 163}, {3886, 134}, {105943, 0}, {106375, 1}, {3923451837, 134},
- {3923451838, 136},
-};
-
-uint32_t FX_GetLangHashCode(const FX_CHAR* pStr) {
- ASSERT(pStr);
- int32_t iLength = FXSYS_strlen(pStr);
- const FX_CHAR* pStrEnd = pStr + iLength;
- uint32_t uHashCode = 0;
- while (pStr < pStrEnd)
- uHashCode = 31 * uHashCode + tolower(*pStr++);
- return uHashCode;
-}
-
-uint8_t FX_GetCsFromLangCode(uint32_t uCode) {
- int32_t iStart = 0;
- int32_t iEnd = FX_ArraySize(gs_FXLang2CharsetTable) - 1;
- while (iStart <= iEnd) {
- int32_t iMid = (iStart + iEnd) / 2;
- const FX_LANG2CS& charset = gs_FXLang2CharsetTable[iMid];
- if (uCode == charset.uLang)
- return charset.uCharset;
-
- if (uCode < charset.uLang)
- iEnd = iMid - 1;
- else
- iStart = iMid + 1;
- }
- return FXFONT_ANSI_CHARSET;
-}
-
-uint8_t FX_GetCharsetFromLang(const FX_CHAR* pLang, int32_t iLength) {
- ASSERT(pLang);
- if (iLength < 0)
- iLength = FXSYS_strlen(pLang);
-
- uint32_t uHash = FX_GetLangHashCode(pLang);
- return FX_GetCsFromLangCode(uHash);
-}
-
-void CFString2CFXByteString(CFStringRef src, CFX_ByteString& dest) {
- SInt32 len = CFStringGetLength(src);
- CFRange range = CFRangeMake(0, len);
- CFIndex used = 0;
- UInt8* pBuffer = (UInt8*)calloc(len + 1, sizeof(UInt8));
- CFStringGetBytes(src, range, kCFStringEncodingASCII, 0, false, pBuffer, len,
- &used);
- dest = (FX_CHAR*)pBuffer;
- free(pBuffer);
-}
-
-bool HasCharSet(CFArrayRef languages, const std::vector<uint8_t>& charsets) {
- for (int i = 0; i < CFArrayGetCount(languages); ++i) {
- CFStringRef language = (CFStringRef)CFArrayGetValueAtIndex(languages, i);
- uint8_t charset = FX_GetCharsetFromLang(
- CFStringGetCStringPtr(language, kCFStringEncodingMacRoman), -1);
- if (pdfium::ContainsValue(charsets, charset))
- return true;
- }
- return false;
-}
-
-void FX_GetCharWidth(CTFontRef font, UniChar start, UniChar end, int* width) {
- CGFloat size = CTFontGetSize(font);
- for (; start <= end; ++start) {
- CGGlyph pGlyph = 0;
- CFIndex count = 1;
- CTFontGetGlyphsForCharacters(font, &start, &pGlyph, count);
- CGSize advances;
- CTFontGetAdvancesForGlyphs(font, kCTFontDefaultOrientation, &pGlyph,
- &advances, 1);
- *width = (int)(advances.width / size * 1000);
- width++;
- }
-}
-
-void InsertWidthArray(CTFontRef font,
- int start,
- int end,
- CPDF_Array* pWidthArray) {
- int size = end - start + 1;
- int* widths = FX_Alloc(int, size);
- FX_GetCharWidth(font, start, end, widths);
- int i;
- for (i = 1; i < size; i++) {
- if (widths[i] != *widths)
- break;
- }
- if (i == size) {
- int first = pWidthArray->GetIntegerAt(pWidthArray->GetCount() - 1);
- pWidthArray->AddInteger(first + size - 1);
- pWidthArray->AddInteger(*widths);
- } else {
- CPDF_Array* pWidthArray1 = new CPDF_Array;
- pWidthArray->Add(pWidthArray1);
- for (i = 0; i < size; i++) {
- pWidthArray1->AddInteger(widths[i]);
- }
- }
- FX_Free(widths);
-}
-#endif // _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
-
void InsertWidthArray1(CFX_Font* pFont,
CFX_UnicodeEncoding* pEncoding,
FX_WCHAR start,
@@ -520,10 +399,6 @@ void CPDF_Document::LoadDocInternal() {
CPDF_Object* pInfoObj = GetOrParseIndirectObject(m_pParser->GetInfoObjNum());
if (pInfoObj)
m_pInfoDict = pInfoObj->GetDict();
- if (CPDF_Array* pIDArray = m_pParser->GetIDArray()) {
- m_ID1 = pIDArray->GetStringAt(0);
- m_ID2 = pIDArray->GetStringAt(1);
- }
}
void CPDF_Document::LoadDoc() {
@@ -736,20 +611,6 @@ uint32_t CPDF_Document::GetUserPermissions() const {
return m_pParser->GetPermissions();
}
-FX_BOOL CPDF_Document::IsFormStream(uint32_t objnum, FX_BOOL& bForm) const {
- CPDF_Object* pObj = GetIndirectObject(objnum);
- if (pObj) {
- CPDF_Stream* pStream = pObj->AsStream();
- bForm = pStream && pStream->GetDict()->GetStringBy("Subtype") == "Form";
- return TRUE;
- }
- if (!m_pParser) {
- bForm = FALSE;
- return TRUE;
- }
- return m_pParser->IsFormStream(objnum, bForm);
-}
-
CPDF_Font* CPDF_Document::LoadFont(CPDF_Dictionary* pFontDict) {
ASSERT(pFontDict);
return m_pDocPage->GetFont(pFontDict, FALSE);
@@ -782,24 +643,6 @@ CPDF_Image* CPDF_Document::LoadImageF(CPDF_Object* pObj) {
return m_pDocPage->GetImage(pObj);
}
-void CPDF_Document::RemoveColorSpaceFromPageData(CPDF_Object* pCSObj) {
- GetPageData()->ReleaseColorSpace(pCSObj);
-}
-
-void CPDF_Document::ClearPageData() {
- GetPageData()->Clear(FALSE);
-}
-
-void CPDF_Document::ClearRenderData() {
- m_pDocRender->Clear(FALSE);
-}
-
-void CPDF_Document::ClearRenderFont() {
- CFX_FontCache* pCache = m_pDocRender->GetFontCache();
- if (pCache)
- pCache->FreeCache(FALSE);
-}
-
void CPDF_Document::CreateNewDoc() {
ASSERT(!m_pRootDict && !m_pInfoDict);
m_pRootDict = new CPDF_Dictionary;
@@ -1236,225 +1079,3 @@ CPDF_Font* CPDF_Document::AddWindowsFont(LOGFONTA* pLogFont,
return LoadFont(pBaseDict);
}
#endif // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
-CPDF_Font* CPDF_Document::AddMacFont(CTFontRef pFont,
- FX_BOOL bVert,
- FX_BOOL bTranslateName) {
- CTFontRef font = (CTFontRef)pFont;
- CTFontDescriptorRef descriptor = CTFontCopyFontDescriptor(font);
- if (!descriptor)
- return nullptr;
-
- CFArrayRef languages = (CFArrayRef)CTFontDescriptorCopyAttribute(
- descriptor, kCTFontLanguagesAttribute);
- if (!languages) {
- CFRelease(descriptor);
- return nullptr;
- }
-
- bool bCJK =
- HasCharSet(languages, {FXFONT_CHINESEBIG5_CHARSET, FXFONT_GB2312_CHARSET,
- FXFONT_HANGEUL_CHARSET, FXFONT_SHIFTJIS_CHARSET});
- CFRelease(descriptor);
- CFDictionaryRef traits = (CFDictionaryRef)CTFontCopyTraits(font);
- if (!traits) {
- CFRelease(languages);
- return nullptr;
- }
-
- CFNumberRef sybolicTrait =
- (CFNumberRef)CFDictionaryGetValue(traits, kCTFontSymbolicTrait);
- CTFontSymbolicTraits trait = 0;
- CFNumberGetValue(sybolicTrait, kCFNumberSInt32Type, &trait);
- int flags = 0;
- if (trait & kCTFontItalicTrait)
- flags |= PDFFONT_ITALIC;
- if (trait & kCTFontMonoSpaceTrait)
- flags |= PDFFONT_FIXEDPITCH;
- if (trait & kCTFontModernSerifsClass)
- flags |= PDFFONT_SERIF;
- if (trait & kCTFontScriptsClass)
- flags |= PDFFONT_SCRIPT;
-
- CFNumberRef weightTrait =
- (CFNumberRef)CFDictionaryGetValue(traits, kCTFontWeightTrait);
- Float32 weight = 0;
- CFNumberGetValue(weightTrait, kCFNumberFloat32Type, &weight);
- int italicangle = CTFontGetSlantAngle(font);
- int ascend = CTFontGetAscent(font);
- int descend = CTFontGetDescent(font);
- int capheight = CTFontGetCapHeight(font);
- CGRect box = CTFontGetBoundingBox(font);
- int bbox[4];
- bbox[0] = box.origin.x;
- bbox[1] = box.origin.y;
- bbox[2] = box.origin.x + box.size.width;
- bbox[3] = box.origin.y + box.size.height;
- CFX_ByteString basefont;
- if (bTranslateName && bCJK) {
- CFStringRef postName = CTFontCopyPostScriptName(font);
- CFString2CFXByteString(postName, basefont);
- CFRelease(postName);
- }
- if (basefont.IsEmpty()) {
- CFStringRef fullName = CTFontCopyFullName(font);
- CFString2CFXByteString(fullName, basefont);
- CFRelease(fullName);
- }
- basefont.Replace(" ", "");
- CPDF_Dictionary* pBaseDict = new CPDF_Dictionary;
- CPDF_Dictionary* pFontDict = pBaseDict;
- if (!bCJK) {
- if (HasCharSet(languages, {FXFONT_ANSI_CHARSET, FXFONT_DEFAULT_CHARSET,
- FXFONT_SYMBOL_CHARSET})) {
- if (HasCharSet(languages, {FXFONT_SYMBOL_CHARSET})) {
- flags |= PDFFONT_SYMBOLIC;
- } else {
- flags |= PDFFONT_NONSYMBOLIC;
- }
- pBaseDict->SetAtName("Encoding", "WinAnsiEncoding");
- } else {
- flags |= PDFFONT_NONSYMBOLIC;
- size_t i;
- for (i = 0; i < FX_ArraySize(g_FX_CharsetUnicodes); ++i) {
- if (HasCharSet(languages, {g_FX_CharsetUnicodes[i].m_Charset}))
- break;
- }
- if (i < FX_ArraySize(g_FX_CharsetUnicodes)) {
- CPDF_Dictionary* pEncoding = new CPDF_Dictionary;
- pEncoding->SetAtName("BaseEncoding", "WinAnsiEncoding");
- CPDF_Array* pArray = new CPDF_Array;
- pArray->AddInteger(128);
- const uint16_t* pUnicodes = g_FX_CharsetUnicodes[i].m_pUnicodes;
- for (int j = 0; j < 128; j++) {
- CFX_ByteString name = PDF_AdobeNameFromUnicode(pUnicodes[j]);
- pArray->AddName(name.IsEmpty() ? ".notdef" : name);
- }
- pEncoding->SetAt("Differences", pArray);
- AddIndirectObject(pEncoding);
- pBaseDict->SetAtReference("Encoding", this, pEncoding);
- }
- }
- if (weight > 0.0 && trait & kCTFontItalicTrait)
- basefont += ",BoldItalic";
- else if (weight > 0.0)
- basefont += ",Bold";
- else if (trait & kCTFontItalicTrait)
- basefont += ",Italic";
-
- pBaseDict->SetAtName("Subtype", "TrueType");
- pBaseDict->SetAtName("BaseFont", basefont);
- pBaseDict->SetAtNumber("FirstChar", 32);
- pBaseDict->SetAtNumber("LastChar", 255);
- int char_widths[224];
- FX_GetCharWidth(font, 32, 255, char_widths);
- CPDF_Array* pWidths = new CPDF_Array;
- for (int i = 0; i < 224; i++)
- pWidths->AddInteger(char_widths[i]);
- pBaseDict->SetAt("Widths", pWidths);
- } else {
- flags |= PDFFONT_NONSYMBOLIC;
- CFX_ByteString cmap;
- CFX_ByteString ordering;
- int supplement;
- bool bFound = false;
- CPDF_Array* pWidthArray = new CPDF_Array;
- if (HasCharSet(languages, {FXFONT_CHINESEBIG5_CHARSET})) {
- cmap = bVert ? "ETenms-B5-V" : "ETenms-B5-H";
- ordering = "CNS1";
- supplement = 4;
- pWidthArray->AddInteger(1);
- InsertWidthArray(font, 0x20, 0x7e, pWidthArray);
- bFound = true;
- }
- if (!bFound && HasCharSet(languages, {FXFONT_GB2312_CHARSET})) {
- cmap = bVert ? "GBK-EUC-V" : "GBK-EUC-H";
- ordering = "GB1", supplement = 2;
- pWidthArray->AddInteger(7716);
- InsertWidthArray(font, 0x20, 0x20, pWidthArray);
- pWidthArray->AddInteger(814);
- InsertWidthArray(font, 0x21, 0x7e, pWidthArray);
- bFound = true;
- }
- if (!bFound && HasCharSet(languages, {FXFONT_HANGEUL_CHARSET})) {
- cmap = bVert ? "KSCms-UHC-V" : "KSCms-UHC-H";
- ordering = "Korea1";
- supplement = 2;
- pWidthArray->AddInteger(1);
- InsertWidthArray(font, 0x20, 0x7e, pWidthArray);
- bFound = true;
- }
- if (!bFound && HasCharSet(languages, {FXFONT_SHIFTJIS_CHARSET})) {
- cmap = bVert ? "90ms-RKSJ-V" : "90ms-RKSJ-H";
- ordering = "Japan1";
- supplement = 5;
- pWidthArray->AddInteger(231);
- InsertWidthArray(font, 0x20, 0x7d, pWidthArray);
- pWidthArray->AddInteger(326);
- InsertWidthArray(font, 0xa0, 0xa0, pWidthArray);
- pWidthArray->AddInteger(327);
- InsertWidthArray(font, 0xa1, 0xdf, pWidthArray);
- pWidthArray->AddInteger(631);
- InsertWidthArray(font, 0x7e, 0x7e, pWidthArray);
- }
- pBaseDict->SetAtName("Subtype", "Type0");
- pBaseDict->SetAtName("BaseFont", basefont);
- pBaseDict->SetAtName("Encoding", cmap);
-
- pFontDict = new CPDF_Dictionary;
- pFontDict->SetAt("W", pWidthArray);
- pFontDict->SetAtName("Type", "Font");
- pFontDict->SetAtName("Subtype", "CIDFontType2");
- pFontDict->SetAtName("BaseFont", basefont);
- CPDF_Dictionary* pCIDSysInfo = new CPDF_Dictionary;
- pCIDSysInfo->SetAtString("Registry", "Adobe");
- pCIDSysInfo->SetAtString("Ordering", ordering);
- pCIDSysInfo->SetAtInteger("Supplement", supplement);
- pFontDict->SetAt("CIDSystemInfo", pCIDSysInfo);
- CPDF_Array* pArray = new CPDF_Array;
- pBaseDict->SetAt("DescendantFonts", pArray);
- AddIndirectObject(pFontDict);
- pArray->AddReference(this, pFontDict);
- }
- AddIndirectObject(pBaseDict);
- CPDF_Dictionary* pFontDesc = new CPDF_Dictionary;
- pFontDesc->SetAtName("Type", "FontDescriptor");
- pFontDesc->SetAtName("FontName", basefont);
- pFontDesc->SetAtInteger("Flags", flags);
- CPDF_Array* pBBox = new CPDF_Array;
- for (int i = 0; i < 4; i++)
- pBBox->AddInteger(bbox[i]);
-
- pFontDesc->SetAt("FontBBox", pBBox);
- pFontDesc->SetAtInteger("ItalicAngle", italicangle);
- pFontDesc->SetAtInteger("Ascent", ascend);
- pFontDesc->SetAtInteger("Descent", descend);
- pFontDesc->SetAtInteger("CapHeight", capheight);
- CGFloat fStemV = 0;
- int16_t min_width = SHRT_MAX;
-
- static const UniChar stem_chars[] = {'i', 'I', '!', '1'};
- CGGlyph glyphs[FX_ArraySize(stem_chars)];
- CGRect boundingRects[FX_ArraySize(stem_chars)];
-
- const size_t count = FX_ArraySize(stem_chars);
- if (CTFontGetGlyphsForCharacters(font, stem_chars, glyphs, count)) {
- CTFontGetBoundingRectsForGlyphs(font, kCTFontHorizontalOrientation, glyphs,
- boundingRects, count);
- for (size_t i = 0; i < count; i++) {
- int16_t width = boundingRects[i].size.width;
- if (width > 0 && width < min_width) {
- min_width = width;
- fStemV = min_width;
- }
- }
- }
- pFontDesc->SetAtInteger("StemV", fStemV);
- AddIndirectObject(pFontDesc);
- pFontDict->SetAtReference("FontDescriptor", this, pFontDesc);
- CFRelease(traits);
- CFRelease(languages);
- return LoadFont(pBaseDict);
-}
-#endif // _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
diff --git a/core/fpdfapi/fpdf_parser/include/cpdf_document.h b/core/fpdfapi/fpdf_parser/include/cpdf_document.h
index f3322425ed..2d315e9d5b 100644
--- a/core/fpdfapi/fpdf_parser/include/cpdf_document.h
+++ b/core/fpdfapi/fpdf_parser/include/cpdf_document.h
@@ -47,18 +47,11 @@ class CPDF_Document : public CPDF_IndirectObjectHolder {
CPDF_Dictionary* GetRoot() const { return m_pRootDict; }
CPDF_Dictionary* GetInfo() const { return m_pInfoDict; }
- void GetID(CFX_ByteString& id1, CFX_ByteString& id2) const {
- id1 = m_ID1;
- id2 = m_ID2;
- }
-
int GetPageCount() const;
CPDF_Dictionary* GetPage(int iPage);
int GetPageIndex(uint32_t objnum);
uint32_t GetUserPermissions() const;
CPDF_DocPageData* GetPageData() const { return m_pDocPage; }
- void ClearPageData();
- void RemoveColorSpaceFromPageData(CPDF_Object* pObject);
std::unique_ptr<JBig2_DocumentContext>* CodecContext() {
return &m_pCodecContext;
@@ -66,8 +59,6 @@ class CPDF_Document : public CPDF_IndirectObjectHolder {
std::unique_ptr<CPDF_LinkList>* LinksContext() { return &m_pLinksContext; }
CPDF_DocRenderData* GetRenderData() const { return m_pDocRender.get(); }
- void ClearRenderData();
- void ClearRenderFont();
FX_BOOL IsFormStream(uint32_t objnum, FX_BOOL& bForm) const;
@@ -102,11 +93,6 @@ class CPDF_Document : public CPDF_IndirectObjectHolder {
FX_BOOL bVert,
FX_BOOL bTranslateName = FALSE);
#endif
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- CPDF_Font* AddMacFont(CTFontRef pFont,
- FX_BOOL bVert,
- FX_BOOL bTranslateName = FALSE);
-#endif
protected:
friend class CPDF_Creator;
@@ -125,14 +111,11 @@ class CPDF_Document : public CPDF_IndirectObjectHolder {
uint32_t objnum,
int& index,
int level = 0);
- FX_BOOL CheckOCGVisible(CPDF_Dictionary* pOCG, FX_BOOL bPrinting);
CPDF_Object* ParseIndirectObject(uint32_t objnum) override;
std::unique_ptr<CPDF_Parser> m_pParser;
CPDF_Dictionary* m_pRootDict;
CPDF_Dictionary* m_pInfoDict;
- CFX_ByteString m_ID1;
- CFX_ByteString m_ID2;
bool m_bLinearized;
int m_iFirstPageNo;
uint32_t m_dwFirstPageObjNum;