mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-06-13 14:33:17 -04:00
unicode-combining: store seen combining chains "globally" in the term struct
Instead of storing combining data per cell, realize that most combinations are re-occurring and that there's lots of available space left in the unicode range, and store seen base+combining combinations chains in a per-terminal array. When we encounter a combining character, we first try to pre-compose, like before. If that fails, we then search for the current base+combining combo in the list of previously seen combinations. If not found there either, we allocate a new combo and add it to the list. Regardless, the result is an index into this array. We store this index, offsetted by COMB_CHARS_LO=0x40000000ul in the cell. When rendering, we need to check if the cell character is a plain character, or if it's a composed character (identified by checking if the cell character is >= COMB_CHARS_LO). Then we render the grapheme pretty much like before.
This commit is contained in:
parent
ae7383189a
commit
62e0774319
8 changed files with 97 additions and 92 deletions
10
meson.build
10
meson.build
|
|
@ -57,11 +57,8 @@ wayland_client = dependency('wayland-client')
|
|||
wayland_cursor = dependency('wayland-cursor')
|
||||
xkb = dependency('xkbcommon')
|
||||
|
||||
add_project_arguments('-DFOOT_UNICODE_MAX_COMBINING_CHARS=@0@'.format(
|
||||
get_option('unicode-max-combining-chars')), language: 'c')
|
||||
add_project_arguments('-DFOOT_UNICODE_PRECOMPOSE=@0@'.format(
|
||||
get_option('unicode-max-combining-chars') > 0 and get_option('unicode-precompose')),
|
||||
language: 'c')
|
||||
get_option('unicode-precompose')), language: 'c')
|
||||
|
||||
tllist = dependency('tllist', version: '>=1.0.1', fallback: 'tllist')
|
||||
fcft = dependency('fcft', version: ['>=2.0.0', '<2.1.0'], fallback: 'fcft')
|
||||
|
|
@ -95,7 +92,7 @@ foreach prot : [
|
|||
command: [wscanner_prog, 'private-code', '@INPUT@', '@OUTPUT@'])
|
||||
endforeach
|
||||
|
||||
if get_option('unicode-max-combining-chars') > 0 and get_option('unicode-precompose')
|
||||
if get_option('unicode-precompose')
|
||||
generate_unicode_precompose_sh = files('scripts/generate-unicode-precompose.sh')
|
||||
unicode_data = custom_target(
|
||||
'unicode-data',
|
||||
|
|
@ -167,8 +164,7 @@ subdir('doc')
|
|||
|
||||
summary(
|
||||
{
|
||||
'Unicode max combining chars': get_option('unicode-max-combining-chars'),
|
||||
'Unicode precompose': get_option('unicode-max-combining-chars') > 0 and get_option('unicode-precompose'),
|
||||
'Unicode precompose': get_option('unicode-precompose'),
|
||||
},
|
||||
bool_yn: true
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue