| // Copyright 2022 The PDFium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "testing/font_renamer.h" | |
| #include <string> | |
| #include "testing/test_fonts.h" | |
| namespace { | |
| FPDF_SYSFONTINFO* GetImpl(FPDF_SYSFONTINFO* info) { | |
| return static_cast<FontRenamer*>(info)->impl(); | |
| } | |
| void ReleaseImpl(FPDF_SYSFONTINFO* info) { | |
| FPDF_SYSFONTINFO* impl = GetImpl(info); | |
| impl->Release(impl); | |
| } | |
| void EnumFontsImpl(FPDF_SYSFONTINFO* info, void* mapper) { | |
| FPDF_SYSFONTINFO* impl = GetImpl(info); | |
| impl->EnumFonts(impl, mapper); | |
| } | |
| void* MapFontImpl(FPDF_SYSFONTINFO* info, | |
| int weight, | |
| FPDF_BOOL italic, | |
| int charset, | |
| int pitch_family, | |
| const char* face, | |
| FPDF_BOOL* exact) { | |
| std::string renamed_face = TestFonts::RenameFont(face); | |
| FPDF_SYSFONTINFO* impl = GetImpl(info); | |
| return impl->MapFont(impl, weight, italic, charset, pitch_family, | |
| renamed_face.c_str(), exact); | |
| } | |
| void* GetFontImpl(FPDF_SYSFONTINFO* info, const char* face) { | |
| // Any non-null return will do. | |
| FPDF_SYSFONTINFO* impl = GetImpl(info); | |
| std::string renamed_face = TestFonts::RenameFont(face); | |
| return impl->GetFont(impl, renamed_face.c_str()); | |
| } | |
| unsigned long GetFontDataImpl(FPDF_SYSFONTINFO* info, | |
| void* font, | |
| unsigned int table, | |
| unsigned char* buffer, | |
| unsigned long buf_size) { | |
| FPDF_SYSFONTINFO* impl = GetImpl(info); | |
| return impl->GetFontData(impl, font, table, buffer, buf_size); | |
| } | |
| unsigned long GetFaceNameImpl(FPDF_SYSFONTINFO* info, | |
| void* font, | |
| char* buffer, | |
| unsigned long buf_size) { | |
| FPDF_SYSFONTINFO* impl = GetImpl(info); | |
| return impl->GetFaceName(impl, font, buffer, buf_size); | |
| } | |
| int GetFontCharsetImpl(FPDF_SYSFONTINFO* info, void* font) { | |
| FPDF_SYSFONTINFO* impl = GetImpl(info); | |
| return impl->GetFontCharset(impl, font); | |
| } | |
| void DeleteFontImpl(FPDF_SYSFONTINFO* info, void* font) { | |
| FPDF_SYSFONTINFO* impl = GetImpl(info); | |
| impl->DeleteFont(impl, font); | |
| } | |
| } // namespace | |
| FontRenamer::FontRenamer() : impl_(FPDF_GetDefaultSystemFontInfo()) { | |
| version = 1; | |
| Release = ReleaseImpl; | |
| EnumFonts = EnumFontsImpl; | |
| MapFont = MapFontImpl; | |
| GetFont = GetFontImpl; | |
| GetFontData = GetFontDataImpl; | |
| GetFaceName = GetFaceNameImpl; | |
| GetFontCharset = GetFontCharsetImpl; | |
| DeleteFont = DeleteFontImpl; | |
| FPDF_SetSystemFontInfo(this); | |
| } | |
| FontRenamer::~FontRenamer() { | |
| FPDF_SetSystemFontInfo(nullptr); | |
| FPDF_FreeDefaultSystemFontInfo(impl_.ExtractAsDangling()); | |
| } |