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
|
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):
|
def create_symbol_map(opts):
|
||||||
val = opts.symbol_map
|
val = coalesce_symbol_maps(opts.symbol_map)
|
||||||
family_map = {}
|
family_map = {}
|
||||||
count = 0
|
count = 0
|
||||||
for family in val.values():
|
for family in val.values():
|
||||||
|
|||||||
@ -11,7 +11,9 @@ from kitty.fast_data_types import (
|
|||||||
test_render_line, test_sprite_position_for, wcwidth
|
test_render_line, test_sprite_position_for, wcwidth
|
||||||
)
|
)
|
||||||
from kitty.fonts.box_drawing import box_chars
|
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
|
from . import BaseTest
|
||||||
|
|
||||||
@ -122,3 +124,7 @@ class Rendering(BaseTest):
|
|||||||
finally:
|
finally:
|
||||||
sys.stderr = orig
|
sys.stderr = orig
|
||||||
self.assertIn('LastResort', buf.getvalue())
|
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