Include missing charsets in CFX_FolderFontInfo from OS2 table. Hebrew fallback now succeeds and selects a proper Hebrew fallback font (Sans-Serif, like DejaVu Sans), causing the rendering to change. Makes other platforms more consistent with android font mapping, allowing unification down the road. -- Update diffing image. Change-Id: I92f40426c99354e13588ac62788fc4893464fb2c Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/149450 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxge/cfx_folderfontinfo.cpp b/core/fxge/cfx_folderfontinfo.cpp index af92f72..a22b2de 100644 --- a/core/fxge/cfx_folderfontinfo.cpp +++ b/core/fxge/cfx_folderfontinfo.cpp
@@ -259,6 +259,38 @@ // `codepages` corresponds to OS/2 table ulCodePageRange1. // See https://learn.microsoft.com/en-us/typography/opentype/spec/os2 uint32_t codepages = fxcrt::GetUInt32MSBFirst(p.first<4u>()); + if (codepages & (1U << 1)) { + mapper_->AddInstalledFont(facename, FX_Charset::kMSWin_EasternEuropean); + pInfo->charsets_ |= FX_CharsetFlag::kMSWin_EasternEuropean; + } + if (codepages & (1U << 2)) { + mapper_->AddInstalledFont(facename, FX_Charset::kMSWin_Cyrillic); + pInfo->charsets_ |= FX_CharsetFlag::kMSWin_Cyrillic; + } + if (codepages & (1U << 3)) { + mapper_->AddInstalledFont(facename, FX_Charset::kMSWin_Greek); + pInfo->charsets_ |= FX_CharsetFlag::kMSWin_Greek; + } + if (codepages & (1U << 4)) { + mapper_->AddInstalledFont(facename, FX_Charset::kMSWin_Turkish); + pInfo->charsets_ |= FX_CharsetFlag::kMSWin_Turkish; + } + if (codepages & (1U << 5)) { + mapper_->AddInstalledFont(facename, FX_Charset::kMSWin_Hebrew); + pInfo->charsets_ |= FX_CharsetFlag::kMSWin_Hebrew; + } + if (codepages & (1U << 6)) { + mapper_->AddInstalledFont(facename, FX_Charset::kMSWin_Arabic); + pInfo->charsets_ |= FX_CharsetFlag::kMSWin_Arabic; + } + if (codepages & (1U << 7)) { + mapper_->AddInstalledFont(facename, FX_Charset::kMSWin_Baltic); + pInfo->charsets_ |= FX_CharsetFlag::kMSWin_Baltic; + } + if (codepages & (1U << 16)) { + mapper_->AddInstalledFont(facename, FX_Charset::kThai); + pInfo->charsets_ |= FX_CharsetFlag::kThai; + } if (codepages & (1U << 17)) { mapper_->AddInstalledFont(facename, FX_Charset::kShiftJIS); pInfo->charsets_ |= FX_CharsetFlag::kShiftJIS;
diff --git a/testing/resources/pixel/bug_725389_expected.pdf.0.png b/testing/resources/pixel/bug_725389_expected.pdf.0.png index 834bcaa..a09d72a 100644 --- a/testing/resources/pixel/bug_725389_expected.pdf.0.png +++ b/testing/resources/pixel/bug_725389_expected.pdf.0.png Binary files differ
diff --git a/testing/resources/pixel/bug_725389_expected_skia.pdf.0.png b/testing/resources/pixel/bug_725389_expected_skia.pdf.0.png index 69c500b..5caaae7 100644 --- a/testing/resources/pixel/bug_725389_expected_skia.pdf.0.png +++ b/testing/resources/pixel/bug_725389_expected_skia.pdf.0.png Binary files differ
diff --git a/testing/resources/pixel/bug_725389_expected_skia_win.pdf.0.png b/testing/resources/pixel/bug_725389_expected_skia_win.pdf.0.png index 4813e3d..c2efe95 100644 --- a/testing/resources/pixel/bug_725389_expected_skia_win.pdf.0.png +++ b/testing/resources/pixel/bug_725389_expected_skia_win.pdf.0.png Binary files differ