ComPtr<IDWriteFontSet> GetLocalFonts(ComPtr<IDWriteFontSet> const& fonts)
{
    auto factory = As<IDWriteFactory3>(CustomFontManager::GetInstance()->GetSharedFactory());

    ComPtr<IDWriteFontSetBuilder> fontSetBuilder;
    ThrowIfFailed(factory->CreateFontSetBuilder(&fontSetBuilder));

    const uint32_t fontCount = fonts->GetFontCount();
    for (uint32_t i = 0; i < fontCount; ++i)
    {
        ComPtr<IDWriteFontFaceReference> fontFaceReference;
        ThrowIfFailed(fonts->GetFontFaceReference(i, &fontFaceReference));

        if (fontFaceReference->GetLocality() == DWRITE_LOCALITY_LOCAL)
        {
            ThrowIfFailed(fontSetBuilder->AddFontFaceReference(fontFaceReference.Get()));
        }
    }

    ComPtr<IDWriteFontSet> localFonts;
    ThrowIfFailed(fontSetBuilder->CreateFontSet(&localFonts));

    return localFonts;
}