Coalesce neighboring symbol maps for better lookup performance
This commit is contained in:
parent
83932c8099
commit
a649eb2a48
@ -25,8 +25,29 @@ else:
|
||||
current_faces = None
|
||||
|
||||
|
||||
def coalesce_symbol_maps(maps):
|
||||
if not maps:
|
||||
return maps
|
||||
items = tuple((k, maps[k]) for k in sorted(maps))
|
||||
ans = [items[0]]
|
||||
|
||||
def merge(prev_item, item):
|
||||
s, e = item[0]
|
||||
pe = prev_item[0][1]
|
||||
ans[-1] = ((prev_item[0][0], max(pe, e)), prev_item[1])
|
||||
|
||||
for item in items[1:]:
|
||||
current_item = ans[-1]
|
||||
if current_item[1] != item[1] or item[0][0] > current_item[0][1] + 1:
|
||||
ans.append(item)
|
||||
else:
|
||||
merge(current_item, item)
|
||||
|
||||
return dict(ans)
|
||||
|
||||
|
||||
def create_symbol_map(opts):
|
||||
val = opts.symbol_map
|
||||
val = coalesce_symbol_maps(opts.symbol_map)
|
||||
family_map = {}
|
||||
count = 0
|
||||
for family in val.values():
|
||||
|
||||
@ -11,7 +11,9 @@ from kitty.fast_data_types import (
|
||||
test_render_line, test_sprite_position_for, wcwidth
|
||||
)
|
||||
from kitty.fonts.box_drawing import box_chars
|
||||
from kitty.fonts.render import render_string, setup_for_testing, shape_string
|
||||
from kitty.fonts.render import (
|
||||
coalesce_symbol_maps, render_string, setup_for_testing, shape_string
|
||||
)
|
||||
|
||||
from . import BaseTest
|
||||
|
||||
@ -122,3 +124,7 @@ class Rendering(BaseTest):
|
||||
finally:
|
||||
sys.stderr = orig
|
||||
self.assertIn('LastResort', buf.getvalue())
|
||||
|
||||
def test_coalesce_symbol_maps(self):
|
||||
q = {(2, 3): 'a', (4, 6): 'b', (5, 5): 'b', (7, 7): 'b', (9, 9): 'b', (1, 1): 'a'}
|
||||
self.ae(coalesce_symbol_maps(q), {(1, 3): 'a', (4, 7): 'b', (9, 9): 'b'})
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user