blob: 1f3dd4953d75c50d0c49dd161aaf31276b0c6c6f [file] [log] [blame]
// 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());
}