blob: ba37a742a0664dbc47cf1c2b758931a2dc64c4a1 [file] [log] [blame]
//========================================================================
//
// FontInfo.h
//
// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com>
// Copyright (C) 2005-2008, 2010, 2011, 2018, 2019, 2021, 2023 Albert Astals Cid <aacid@kde.org>
// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net>
// Copyright (C) 2009 Pino Toscano <pino@kde.org>
// Copyright (C) 2012 Adrian Johnson <ajohnson@redneon.com>
// Copyright (C) 2013 Thomas Freitag <Thomas.Freitag@alfa.de>
// Copyright (C) 2019, 2021, 2022 Oliver Sander <oliver.sander@tu-dresden.de>
// Copyright (C) 2019 Adam Reichold <adam.reichold@t-online.de>
//
// 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
//
//========================================================================
#ifndef FONT_INFO_H
#define FONT_INFO_H
#include "Object.h"
#include "poppler_private_export.h"
#include <optional>
#include <string>
#include <unordered_set>
class GfxFont;
class PDFDoc;
class POPPLER_PRIVATE_EXPORT FontInfo
{
public:
enum Type
{
unknown,
Type1,
Type1C,
Type1COT,
Type3,
TrueType,
TrueTypeOT,
CIDType0,
CIDType0C,
CIDType0COT,
CIDTrueType,
CIDTrueTypeOT
};
// Constructor.
FontInfo(GfxFont *fontA, XRef *xrefA);
// Copy constructor
FontInfo(const FontInfo &f) = default;
FontInfo &operator=(const FontInfo &) = delete;
const std::optional<std::string> &getName() const { return name; };
const std::optional<std::string> &getSubstituteName() const { return substituteName; };
const std::optional<std::string> &getFile() const { return file; };
const std::string &getEncoding() const { return encoding; };
Type getType() const { return type; };
bool getEmbedded() const { return emb; };
bool getSubset() const { return subset; };
bool getToUnicode() const { return hasToUnicode; };
Ref getRef() const { return fontRef; };
Ref getEmbRef() const { return embRef; };
private:
std::optional<std::string> name;
std::optional<std::string> substituteName;
std::optional<std::string> file;
std::string encoding;
Type type;
bool emb;
bool subset;
bool hasToUnicode;
Ref fontRef;
Ref embRef;
};
class POPPLER_PRIVATE_EXPORT FontInfoScanner
{
public:
// Constructor.
explicit FontInfoScanner(PDFDoc *doc, int firstPage = 0);
// Destructor.
~FontInfoScanner();
std::vector<FontInfo *> scan(int nPages);
private:
PDFDoc *doc;
int currentPage;
std::unordered_set<int> fonts;
RefRecursionChecker visitedObjects;
void scanFonts(XRef *xrefA, Dict *resDict, std::vector<FontInfo *> *fontsList);
};
#endif