diff options
Diffstat (limited to 'Build/source/libs/poppler/poppler-src/poppler/FontInfo.cc')
-rw-r--r-- | Build/source/libs/poppler/poppler-src/poppler/FontInfo.cc | 232 |
1 files changed, 0 insertions, 232 deletions
diff --git a/Build/source/libs/poppler/poppler-src/poppler/FontInfo.cc b/Build/source/libs/poppler/poppler-src/poppler/FontInfo.cc deleted file mode 100644 index 18f21f40aff..00000000000 --- a/Build/source/libs/poppler/poppler-src/poppler/FontInfo.cc +++ /dev/null @@ -1,232 +0,0 @@ -//======================================================================== -// -// FontInfo.cc -// -// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005-2008, 2010, 2017, 2018 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> -// Copyright (C) 2006 Kouhei Sutou <kou@cozmixng.org> -// Copyright (C) 2009 Pino Toscano <pino@kde.org> -// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2010, 2012 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2010, 2013 Thomas Freitag <Thomas.Freitag@alfa.de> -// Copyright (C) 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2012 Fabio D'Urso <fabiodurso@hotmail.it> -// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info@kdab.com>. Work sponsored by the LiMux project of the city of Munich -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -//======================================================================== -// -// Based on code from pdffonts.cc -// -// Copyright 2001-2007 Glyph & Cog, LLC -// -//======================================================================== - -#include "config.h" -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -#include <string.h> -#include <math.h> -#include "GlobalParams.h" -#include "Error.h" -#include "Object.h" -#include "Dict.h" -#include "GfxFont.h" -#include "Annot.h" -#include "PDFDoc.h" -#include "FontInfo.h" - -FontInfoScanner::FontInfoScanner(PDFDoc *docA, int firstPage) { - doc = docA; - currentPage = firstPage + 1; -} - -FontInfoScanner::~FontInfoScanner() { -} - -GooList *FontInfoScanner::scan(int nPages) { - GooList *result; - Page *page; - Dict *resDict; - Annots *annots; - int lastPage; - - if (currentPage > doc->getNumPages()) { - return nullptr; - } - - result = new GooList(); - - lastPage = currentPage + nPages; - if (lastPage > doc->getNumPages() + 1) { - lastPage = doc->getNumPages() + 1; - } - - XRef *xrefA = doc->getXRef()->copy(); - for (int pg = currentPage; pg < lastPage; ++pg) { - page = doc->getPage(pg); - if (!page) continue; - - if ((resDict = page->getResourceDictCopy(xrefA))) { - scanFonts(xrefA, resDict, result); - delete resDict; - } - annots = page->getAnnots(); - for (int i = 0; i < annots->getNumAnnots(); ++i) { - Object obj1 = annots->getAnnot(i)->getAppearanceResDict(); - if (obj1.isDict()) { - scanFonts(xrefA, obj1.getDict(), result); - } - } - } - - currentPage = lastPage; - - delete xrefA; - return result; -} - -void FontInfoScanner::scanFonts(XRef *xrefA, Dict *resDict, GooList *fontsList) { - GfxFontDict *gfxFontDict; - GfxFont *font; - - // scan the fonts in this resource dictionary - gfxFontDict = nullptr; - Object obj1 = resDict->lookupNF("Font"); - if (obj1.isRef()) { - Object obj2 = obj1.fetch(xrefA); - if (obj2.isDict()) { - Ref r = obj1.getRef(); - gfxFontDict = new GfxFontDict(xrefA, &r, obj2.getDict()); - } - } else if (obj1.isDict()) { - gfxFontDict = new GfxFontDict(xrefA, nullptr, obj1.getDict()); - } - if (gfxFontDict) { - for (int i = 0; i < gfxFontDict->getNumFonts(); ++i) { - if ((font = gfxFontDict->getFont(i))) { - Ref fontRef = *font->getID(); - - // add this font to the list if not already found - if (fonts.find(fontRef.num) == fonts.end()) { - fontsList->append(new FontInfo(font, xrefA)); - fonts.insert(fontRef.num); - } - } - } - delete gfxFontDict; - } - - // recursively scan any resource dictionaries in objects in this - // resource dictionary - const char *resTypes[] = { "XObject", "Pattern" }; - for (Guint resType = 0; resType < sizeof(resTypes) / sizeof(resTypes[0]); ++resType) { - Object objDict = resDict->lookup(resTypes[resType]); - if (objDict.isDict()) { - for (int i = 0; i < objDict.dictGetLength(); ++i) { - obj1 = objDict.dictGetValNF(i); - if (obj1.isRef()) { - // check for an already-seen object - const Ref r = obj1.getRef(); - if (visitedObjects.find(r.num) != visitedObjects.end()) { - continue; - } - - visitedObjects.insert(r.num); - } - - Object obj2 = obj1.fetch(xrefA); - if (obj2.isStream()) { - Object resObj = obj2.streamGetDict()->lookup("Resources"); - if (resObj.isDict() && resObj.getDict() != resDict) { - scanFonts(xrefA, resObj.getDict(), fontsList); - } - } - } - } - } -} - -FontInfo::FontInfo(GfxFont *font, XRef *xref) { - const GooString *origName; - - fontRef = *font->getID(); - - // font name - origName = font->getName(); - if (origName != nullptr) { - name = font->getName()->copy(); - } else { - name = nullptr; - } - - // font type - type = (FontInfo::Type)font->getType(); - - // check for an embedded font - if (font->getType() == fontType3) { - emb = gTrue; - } else { - emb = font->getEmbeddedFontID(&embRef); - } - - file = nullptr; - substituteName = nullptr; - if (!emb) - { - SysFontType dummy; - int dummy2; - GooString substituteNameAux; - file = globalParams->findSystemFontFile(font, &dummy, &dummy2, &substituteNameAux); - if (substituteNameAux.getLength() > 0) - substituteName = substituteNameAux.copy(); - } - encoding = font->getEncodingName()->copy(); - - // look for a ToUnicode map - hasToUnicode = gFalse; - Object fontObj = xref->fetch(fontRef.num, fontRef.gen); - if (fontObj.isDict()) { - hasToUnicode = fontObj.dictLookup("ToUnicode").isStream(); - } - - // check for a font subset name: capital letters followed by a '+' - // sign - subset = gFalse; - if (name) { - int i; - for (i = 0; i < name->getLength(); ++i) { - if (name->getChar(i) < 'A' || name->getChar(i) > 'Z') { - break; - } - } - subset = i > 0 && i < name->getLength() && name->getChar(i) == '+'; - } -} - -FontInfo::FontInfo(FontInfo& f) { - name = f.name ? f.name->copy() : nullptr; - file = f.file ? f.file->copy() : nullptr; - encoding = f.encoding ? f.encoding->copy() : nullptr; - substituteName = f.substituteName ? f.substituteName->copy() : nullptr; - type = f.type; - emb = f.emb; - subset = f.subset; - hasToUnicode = f.hasToUnicode; - fontRef = f.fontRef; - embRef = f.embRef; -} - -FontInfo::~FontInfo() { - delete name; - delete file; - delete encoding; - if (substituteName) - delete substituteName; -} |