#include <map>
#include <memory>
#include <sstream>
#include <utility>
#include <vector>
#include "core/fpdfapi/font/cpdf_cidfont.h"
#include "core/fpdfapi/font/cpdf_font.h"
#include "core/fpdfapi/page/cpdf_docpagedata.h"
#include "core/fpdfapi/page/cpdf_textobject.h"
#include "core/fpdfapi/page/cpdf_textstate.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_string.h"
#include "core/fpdfapi/render/charposlist.h"
#include "core/fpdfapi/render/cpdf_pagerendercontext.h"
#include "core/fpdfapi/render/cpdf_rendercontext.h"
#include "core/fpdfapi/render/cpdf_renderstatus.h"
#include "core/fpdfapi/render/cpdf_textrenderer.h"
#include "core/fpdftext/cpdf_textpage.h"
#include "core/fxcrt/check.h"
#include "core/fxcrt/check_op.h"
#include "core/fxcrt/compiler_specific.h"
#include "core/fxcrt/containers/contains.h"
#include "core/fxcrt/fx_extension.h"
#include "core/fxcrt/fx_memcpy_wrappers.h"
#include "core/fxcrt/fx_string_wrappers.h"
#include "core/fxcrt/numerics/safe_conversions.h"
#include "core/fxcrt/span_util.h"
#include "core/fxcrt/stl_util.h"
#include "core/fxcrt/utf16.h"
#include "core/fxge/cfx_defaultrenderdevice.h"
#include "core/fxge/cfx_fontmgr.h"
#include "core/fxge/dib/cfx_dibitmap.h"
#include "core/fxge/fx_font.h"
#include "core/fxge/text_char_pos.h"
#include "fpdfsdk/cpdfsdk_helpers.h"
#include "public/fpdf_edit.h"
static_assert …;
static_assert …;
static_assert …;
static_assert …;
static_assert …;
static_assert …;
static_assert …;
static_assert …;
static_assert …;
static_assert …;
namespace {
ByteString BaseFontNameForType(const CFX_Font* font, int font_type) { … }
RetainPtr<CPDF_Dictionary> CreateCompositeFontDict(CPDF_Document* doc,
const CFX_Font* font,
int font_type,
const ByteString& name) { … }
RetainPtr<CPDF_Dictionary> CreateCidFontDict(CPDF_Document* doc,
int font_type,
const ByteString& name) { … }
RetainPtr<CPDF_Dictionary> LoadFontDesc(CPDF_Document* doc,
const ByteString& font_name,
CFX_Font* font,
pdfium::span<const uint8_t> font_data,
int font_type) { … }
RetainPtr<CPDF_Array> CreateWidthsArray(
CPDF_Document* doc,
const std::map<uint32_t, uint32_t>& widths) { … }
const char kToUnicodeStart[] = …;
const char kToUnicodeEnd[] = …;
void AddCharcode(fxcrt::ostringstream& buffer, uint32_t number) { … }
void AddUnicode(fxcrt::ostringstream& buffer, uint32_t unicode) { … }
RetainPtr<CPDF_Stream> LoadUnicode(
CPDF_Document* doc,
const std::multimap<uint32_t, uint32_t>& to_unicode) { … }
void CreateDescendantFontsArray(CPDF_Document* doc,
CPDF_Dictionary* font_dict,
uint32_t cid_font_dict_obj_num) { … }
RetainPtr<CPDF_Font> LoadSimpleFont(CPDF_Document* doc,
std::unique_ptr<CFX_Font> font,
pdfium::span<const uint8_t> font_data,
int font_type) { … }
RetainPtr<CPDF_Font> LoadCompositeFont(CPDF_Document* doc,
std::unique_ptr<CFX_Font> font,
pdfium::span<const uint8_t> font_data,
int font_type) { … }
RetainPtr<CPDF_Font> LoadCustomCompositeFont(
CPDF_Document* doc,
std::unique_ptr<CFX_Font> font,
pdfium::span<const uint8_t> font_span,
const char* to_unicode_cmap,
pdfium::span<const uint8_t> cid_to_gid_map_span) { … }
CPDF_TextObject* CPDFTextObjectFromFPDFPageObject(FPDF_PAGEOBJECT page_object) { … }
FPDF_GLYPHPATH FPDFGlyphPathFromCFXPath(const CFX_Path* path) { … }
const CFX_Path* CFXPathFromFPDFGlyphPath(FPDF_GLYPHPATH path) { … }
}
FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
FPDFPageObj_NewTextObj(FPDF_DOCUMENT document,
FPDF_BYTESTRING font,
float font_size) { … }
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
FPDFText_SetText(FPDF_PAGEOBJECT text_object, FPDF_WIDESTRING text) { … }
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
FPDFText_SetCharcodes(FPDF_PAGEOBJECT text_object,
const uint32_t* charcodes,
size_t count) { … }
FPDF_EXPORT FPDF_FONT FPDF_CALLCONV FPDFText_LoadFont(FPDF_DOCUMENT document,
const uint8_t* data,
uint32_t size,
int font_type,
FPDF_BOOL cid) { … }
FPDF_EXPORT FPDF_FONT FPDF_CALLCONV
FPDFText_LoadStandardFont(FPDF_DOCUMENT document, FPDF_BYTESTRING font) { … }
FPDF_EXPORT FPDF_FONT FPDF_CALLCONV
FPDFText_LoadCidType2Font(FPDF_DOCUMENT document,
const uint8_t* font_data,
uint32_t font_data_size,
FPDF_BYTESTRING to_unicode_cmap,
const uint8_t* cid_to_gid_map_data,
uint32_t cid_to_gid_map_data_size) { … }
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
FPDFTextObj_GetFontSize(FPDF_PAGEOBJECT text, float* size) { … }
FPDF_EXPORT unsigned long FPDF_CALLCONV
FPDFTextObj_GetText(FPDF_PAGEOBJECT text_object,
FPDF_TEXTPAGE text_page,
FPDF_WCHAR* buffer,
unsigned long length) { … }
FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV
FPDFTextObj_GetRenderedBitmap(FPDF_DOCUMENT document,
FPDF_PAGE page,
FPDF_PAGEOBJECT text_object,
float scale) { … }
FPDF_EXPORT void FPDF_CALLCONV FPDFFont_Close(FPDF_FONT font) { … }
FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
FPDFPageObj_CreateTextObj(FPDF_DOCUMENT document,
FPDF_FONT font,
float font_size) { … }
FPDF_EXPORT FPDF_TEXT_RENDERMODE FPDF_CALLCONV
FPDFTextObj_GetTextRenderMode(FPDF_PAGEOBJECT text) { … }
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
FPDFTextObj_SetTextRenderMode(FPDF_PAGEOBJECT text,
FPDF_TEXT_RENDERMODE render_mode) { … }
FPDF_EXPORT FPDF_FONT FPDF_CALLCONV FPDFTextObj_GetFont(FPDF_PAGEOBJECT text) { … }
FPDF_EXPORT size_t FPDF_CALLCONV FPDFFont_GetBaseFontName(FPDF_FONT font,
char* buffer,
size_t length) { … }
FPDF_EXPORT size_t FPDF_CALLCONV FPDFFont_GetFamilyName(FPDF_FONT font,
char* buffer,
size_t length) { … }
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFFont_GetFontData(FPDF_FONT font,
uint8_t* buffer,
size_t buflen,
size_t* out_buflen) { … }
FPDF_EXPORT int FPDF_CALLCONV FPDFFont_GetIsEmbedded(FPDF_FONT font) { … }
FPDF_EXPORT int FPDF_CALLCONV FPDFFont_GetFlags(FPDF_FONT font) { … }
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFFont_GetWeight(FPDF_FONT font) { … }
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFFont_GetItalicAngle(FPDF_FONT font,
int* angle) { … }
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFFont_GetAscent(FPDF_FONT font,
float font_size,
float* ascent) { … }
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFFont_GetDescent(FPDF_FONT font,
float font_size,
float* descent) { … }
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFFont_GetGlyphWidth(FPDF_FONT font,
uint32_t glyph,
float font_size,
float* width) { … }
FPDF_EXPORT FPDF_GLYPHPATH FPDF_CALLCONV
FPDFFont_GetGlyphPath(FPDF_FONT font, uint32_t glyph, float font_size) { … }
FPDF_EXPORT int FPDF_CALLCONV
FPDFGlyphPath_CountGlyphSegments(FPDF_GLYPHPATH glyphpath) { … }
FPDF_EXPORT FPDF_PATHSEGMENT FPDF_CALLCONV
FPDFGlyphPath_GetGlyphPathSegment(FPDF_GLYPHPATH glyphpath, int index) { … }