LibGfx: Implement TrimmedTable mappings for Cmaps
This commit is contained in:
parent
04ee181b21
commit
5b7dfe848d
Notes:
sideshowbarker
2024-07-17 07:48:42 +09:00
Author: https://github.com/janso3 Commit: https://github.com/SerenityOS/serenity/commit/5b7dfe848d Pull-request: https://github.com/SerenityOS/serenity/pull/16932
2 changed files with 22 additions and 0 deletions
|
@ -83,6 +83,8 @@ u32 Cmap::Subtable::glyph_id_for_code_point(u32 code_point) const
|
|||
return glyph_id_for_code_point_table_0(code_point);
|
||||
case Format::SegmentToDelta:
|
||||
return glyph_id_for_code_point_table_4(code_point);
|
||||
case Format::TrimmedTable:
|
||||
return glyph_id_for_code_point_table_6(code_point);
|
||||
case Format::SegmentedCoverage:
|
||||
return glyph_id_for_code_point_table_12(code_point);
|
||||
default:
|
||||
|
@ -129,6 +131,20 @@ u32 Cmap::Subtable::glyph_id_for_code_point_table_4(u32 code_point) const
|
|||
return (be_u16(m_slice.offset_pointer(glyph_offset)) + delta) & 0xffff;
|
||||
}
|
||||
|
||||
u32 Cmap::Subtable::glyph_id_for_code_point_table_6(u32 code_point) const
|
||||
{
|
||||
u32 first_code = be_u16(m_slice.offset_pointer((u32)Table6Offsets::FirstCode));
|
||||
if (code_point < first_code)
|
||||
return 0;
|
||||
|
||||
u32 entry_count = be_u16(m_slice.offset_pointer((u32)Table6Offsets::EntryCount));
|
||||
u32 code_offset = code_point - first_code;
|
||||
if (code_offset > entry_count)
|
||||
return 0;
|
||||
|
||||
return be_u16(m_slice.offset_pointer((u32)Table6Offsets::GlyphIdArray + code_offset * 2));
|
||||
}
|
||||
|
||||
u32 Cmap::Subtable::glyph_id_for_code_point_table_12(u32 code_point) const
|
||||
{
|
||||
u32 num_groups = be_u32(m_slice.offset_pointer((u32)Table12Offsets::NumGroups));
|
||||
|
|
|
@ -67,6 +67,11 @@ public:
|
|||
Constant = 16,
|
||||
NonConstMultiplier = 4,
|
||||
};
|
||||
enum class Table6Offsets {
|
||||
FirstCode = 6,
|
||||
EntryCount = 8,
|
||||
GlyphIdArray = 10
|
||||
};
|
||||
enum class Table12Offsets {
|
||||
NumGroups = 12,
|
||||
Record_StartCode = 16,
|
||||
|
@ -80,6 +85,7 @@ public:
|
|||
|
||||
u32 glyph_id_for_code_point_table_0(u32 code_point) const;
|
||||
u32 glyph_id_for_code_point_table_4(u32 code_point) const;
|
||||
u32 glyph_id_for_code_point_table_6(u32 code_point) const;
|
||||
u32 glyph_id_for_code_point_table_12(u32 code_point) const;
|
||||
|
||||
ReadonlyBytes m_slice;
|
||||
|
|
Loading…
Add table
Reference in a new issue