blob: 92553cbc2a1df9a2bdf564baa9574f118fd90f32 [file] [log] [blame]
// Copyright 2017 The PDFium Authors
// 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
#ifndef CORE_FPDFAPI_FONT_CPDF_FONTGLOBALS_H_
#define CORE_FPDFAPI_FONT_CPDF_FONTGLOBALS_H_
#include <array>
#include <functional>
#include <map>
#include <memory>
#include "core/fpdfapi/cmaps/fpdf_cmaps.h"
#include "core/fpdfapi/font/cpdf_cidfont.h"
#include "core/fxcrt/raw_span.h"
#include "core/fxcrt/retain_ptr.h"
#include "core/fxcrt/span.h"
#include "core/fxge/cfx_fontmapper.h"
class CFX_StockFontArray;
class CPDF_Font;
class CPDF_FontGlobals {
public:
// Per-process singleton which must be managed by callers.
static void Create();
static void Destroy();
static CPDF_FontGlobals* GetInstance();
// Caller must load the maps before using font globals.
void LoadEmbeddedMaps();
void Clear(CPDF_Document* pDoc);
RetainPtr<CPDF_Font> Find(CPDF_Document* pDoc,
CFX_FontMapper::StandardFont index);
void Set(CPDF_Document* pDoc,
CFX_FontMapper::StandardFont index,
RetainPtr<CPDF_Font> font);
void SetEmbeddedCharset(CIDSet idx, pdfium::span<const fxcmap::CMap> map) {
embedded_charsets_[idx] = map;
}
pdfium::span<const fxcmap::CMap> GetEmbeddedCharset(CIDSet idx) const {
return embedded_charsets_[idx];
}
void SetEmbeddedToUnicode(CIDSet idx, pdfium::span<const uint16_t> map) {
embedded_to_unicodes_[idx] = map;
}
pdfium::span<const uint16_t> GetEmbeddedToUnicode(CIDSet idx) {
return embedded_to_unicodes_[idx];
}
RetainPtr<const CPDF_CMap> GetPredefinedCMap(const ByteString& name);
CPDF_CID2UnicodeMap* GetCID2UnicodeMap(CIDSet charset);
private:
CPDF_FontGlobals();
~CPDF_FontGlobals();
void LoadEmbeddedGB1CMaps();
void LoadEmbeddedCNS1CMaps();
void LoadEmbeddedJapan1CMaps();
void LoadEmbeddedKorea1CMaps();
std::map<ByteString, RetainPtr<const CPDF_CMap>> cmaps_;
std::array<std::unique_ptr<CPDF_CID2UnicodeMap>, CIDSET_NUM_SETS>
cid2unicode_maps_;
std::array<pdfium::raw_span<const fxcmap::CMap>, CIDSET_NUM_SETS>
embedded_charsets_;
std::array<pdfium::raw_span<const uint16_t>, CIDSET_NUM_SETS>
embedded_to_unicodes_;
std::map<UnownedPtr<CPDF_Document>,
std::unique_ptr<CFX_StockFontArray>,
std::less<>>
stock_map_;
};
#endif // CORE_FPDFAPI_FONT_CPDF_FONTGLOBALS_H_