1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2022 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker
5*3ac0a46fSAndroid Build Coastguard Worker #include "testing/font_renamer.h"
6*3ac0a46fSAndroid Build Coastguard Worker
7*3ac0a46fSAndroid Build Coastguard Worker #include <string>
8*3ac0a46fSAndroid Build Coastguard Worker
9*3ac0a46fSAndroid Build Coastguard Worker #include "testing/test_fonts.h"
10*3ac0a46fSAndroid Build Coastguard Worker
11*3ac0a46fSAndroid Build Coastguard Worker namespace {
12*3ac0a46fSAndroid Build Coastguard Worker
GetImpl(FPDF_SYSFONTINFO * info)13*3ac0a46fSAndroid Build Coastguard Worker FPDF_SYSFONTINFO* GetImpl(FPDF_SYSFONTINFO* info) {
14*3ac0a46fSAndroid Build Coastguard Worker return static_cast<FontRenamer*>(info)->impl();
15*3ac0a46fSAndroid Build Coastguard Worker }
16*3ac0a46fSAndroid Build Coastguard Worker
ReleaseImpl(FPDF_SYSFONTINFO * info)17*3ac0a46fSAndroid Build Coastguard Worker void ReleaseImpl(FPDF_SYSFONTINFO* info) {
18*3ac0a46fSAndroid Build Coastguard Worker FPDF_SYSFONTINFO* impl = GetImpl(info);
19*3ac0a46fSAndroid Build Coastguard Worker impl->Release(impl);
20*3ac0a46fSAndroid Build Coastguard Worker }
21*3ac0a46fSAndroid Build Coastguard Worker
EnumFontsImpl(FPDF_SYSFONTINFO * info,void * mapper)22*3ac0a46fSAndroid Build Coastguard Worker void EnumFontsImpl(FPDF_SYSFONTINFO* info, void* mapper) {
23*3ac0a46fSAndroid Build Coastguard Worker FPDF_SYSFONTINFO* impl = GetImpl(info);
24*3ac0a46fSAndroid Build Coastguard Worker impl->EnumFonts(impl, mapper);
25*3ac0a46fSAndroid Build Coastguard Worker }
26*3ac0a46fSAndroid Build Coastguard Worker
MapFontImpl(FPDF_SYSFONTINFO * info,int weight,FPDF_BOOL italic,int charset,int pitch_family,const char * face,FPDF_BOOL * exact)27*3ac0a46fSAndroid Build Coastguard Worker void* MapFontImpl(FPDF_SYSFONTINFO* info,
28*3ac0a46fSAndroid Build Coastguard Worker int weight,
29*3ac0a46fSAndroid Build Coastguard Worker FPDF_BOOL italic,
30*3ac0a46fSAndroid Build Coastguard Worker int charset,
31*3ac0a46fSAndroid Build Coastguard Worker int pitch_family,
32*3ac0a46fSAndroid Build Coastguard Worker const char* face,
33*3ac0a46fSAndroid Build Coastguard Worker FPDF_BOOL* exact) {
34*3ac0a46fSAndroid Build Coastguard Worker std::string renamed_face = TestFonts::RenameFont(face);
35*3ac0a46fSAndroid Build Coastguard Worker FPDF_SYSFONTINFO* impl = GetImpl(info);
36*3ac0a46fSAndroid Build Coastguard Worker return impl->MapFont(impl, weight, italic, charset, pitch_family,
37*3ac0a46fSAndroid Build Coastguard Worker renamed_face.c_str(), exact);
38*3ac0a46fSAndroid Build Coastguard Worker }
39*3ac0a46fSAndroid Build Coastguard Worker
GetFontImpl(FPDF_SYSFONTINFO * info,const char * face)40*3ac0a46fSAndroid Build Coastguard Worker void* GetFontImpl(FPDF_SYSFONTINFO* info, const char* face) {
41*3ac0a46fSAndroid Build Coastguard Worker // Any non-null return will do.
42*3ac0a46fSAndroid Build Coastguard Worker FPDF_SYSFONTINFO* impl = GetImpl(info);
43*3ac0a46fSAndroid Build Coastguard Worker std::string renamed_face = TestFonts::RenameFont(face);
44*3ac0a46fSAndroid Build Coastguard Worker return impl->GetFont(impl, renamed_face.c_str());
45*3ac0a46fSAndroid Build Coastguard Worker }
46*3ac0a46fSAndroid Build Coastguard Worker
GetFontDataImpl(FPDF_SYSFONTINFO * info,void * font,unsigned int table,unsigned char * buffer,unsigned long buf_size)47*3ac0a46fSAndroid Build Coastguard Worker unsigned long GetFontDataImpl(FPDF_SYSFONTINFO* info,
48*3ac0a46fSAndroid Build Coastguard Worker void* font,
49*3ac0a46fSAndroid Build Coastguard Worker unsigned int table,
50*3ac0a46fSAndroid Build Coastguard Worker unsigned char* buffer,
51*3ac0a46fSAndroid Build Coastguard Worker unsigned long buf_size) {
52*3ac0a46fSAndroid Build Coastguard Worker FPDF_SYSFONTINFO* impl = GetImpl(info);
53*3ac0a46fSAndroid Build Coastguard Worker return impl->GetFontData(impl, font, table, buffer, buf_size);
54*3ac0a46fSAndroid Build Coastguard Worker }
55*3ac0a46fSAndroid Build Coastguard Worker
GetFaceNameImpl(FPDF_SYSFONTINFO * info,void * font,char * buffer,unsigned long buf_size)56*3ac0a46fSAndroid Build Coastguard Worker unsigned long GetFaceNameImpl(FPDF_SYSFONTINFO* info,
57*3ac0a46fSAndroid Build Coastguard Worker void* font,
58*3ac0a46fSAndroid Build Coastguard Worker char* buffer,
59*3ac0a46fSAndroid Build Coastguard Worker unsigned long buf_size) {
60*3ac0a46fSAndroid Build Coastguard Worker FPDF_SYSFONTINFO* impl = GetImpl(info);
61*3ac0a46fSAndroid Build Coastguard Worker return impl->GetFaceName(impl, font, buffer, buf_size);
62*3ac0a46fSAndroid Build Coastguard Worker }
63*3ac0a46fSAndroid Build Coastguard Worker
GetFontCharsetImpl(FPDF_SYSFONTINFO * info,void * font)64*3ac0a46fSAndroid Build Coastguard Worker int GetFontCharsetImpl(FPDF_SYSFONTINFO* info, void* font) {
65*3ac0a46fSAndroid Build Coastguard Worker FPDF_SYSFONTINFO* impl = GetImpl(info);
66*3ac0a46fSAndroid Build Coastguard Worker return impl->GetFontCharset(impl, font);
67*3ac0a46fSAndroid Build Coastguard Worker }
68*3ac0a46fSAndroid Build Coastguard Worker
DeleteFontImpl(FPDF_SYSFONTINFO * info,void * font)69*3ac0a46fSAndroid Build Coastguard Worker void DeleteFontImpl(FPDF_SYSFONTINFO* info, void* font) {
70*3ac0a46fSAndroid Build Coastguard Worker FPDF_SYSFONTINFO* impl = GetImpl(info);
71*3ac0a46fSAndroid Build Coastguard Worker impl->DeleteFont(impl, font);
72*3ac0a46fSAndroid Build Coastguard Worker }
73*3ac0a46fSAndroid Build Coastguard Worker
74*3ac0a46fSAndroid Build Coastguard Worker } // namespace
75*3ac0a46fSAndroid Build Coastguard Worker
FontRenamer()76*3ac0a46fSAndroid Build Coastguard Worker FontRenamer::FontRenamer() : impl_(FPDF_GetDefaultSystemFontInfo()) {
77*3ac0a46fSAndroid Build Coastguard Worker version = 1;
78*3ac0a46fSAndroid Build Coastguard Worker Release = ReleaseImpl;
79*3ac0a46fSAndroid Build Coastguard Worker EnumFonts = EnumFontsImpl;
80*3ac0a46fSAndroid Build Coastguard Worker MapFont = MapFontImpl;
81*3ac0a46fSAndroid Build Coastguard Worker GetFont = GetFontImpl;
82*3ac0a46fSAndroid Build Coastguard Worker GetFontData = GetFontDataImpl;
83*3ac0a46fSAndroid Build Coastguard Worker GetFaceName = GetFaceNameImpl;
84*3ac0a46fSAndroid Build Coastguard Worker GetFontCharset = GetFontCharsetImpl;
85*3ac0a46fSAndroid Build Coastguard Worker DeleteFont = DeleteFontImpl;
86*3ac0a46fSAndroid Build Coastguard Worker FPDF_SetSystemFontInfo(this);
87*3ac0a46fSAndroid Build Coastguard Worker }
88*3ac0a46fSAndroid Build Coastguard Worker
~FontRenamer()89*3ac0a46fSAndroid Build Coastguard Worker FontRenamer::~FontRenamer() {
90*3ac0a46fSAndroid Build Coastguard Worker FPDF_FreeDefaultSystemFontInfo(impl_.ExtractAsDangling());
91*3ac0a46fSAndroid Build Coastguard Worker }
92