xref: /aosp_15_r20/external/pdfium/testing/font_renamer.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
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