A function to efficiently check for the common case pure ascii strings
This commit is contained in:
parent
3bc7fc1933
commit
f345ac1bdd
@ -3,6 +3,7 @@
|
|||||||
# License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
# License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import termios
|
import termios
|
||||||
import struct
|
import struct
|
||||||
import shlex
|
import shlex
|
||||||
@ -82,3 +83,10 @@ def hangup():
|
|||||||
pgrp = os.getpgid(pid)
|
pgrp = os.getpgid(pid)
|
||||||
os.killpg(pgrp, signal.SIGHUP)
|
os.killpg(pgrp, signal.SIGHUP)
|
||||||
os.close(create_pty()[0])
|
os.close(create_pty()[0])
|
||||||
|
|
||||||
|
base_size = sys.getsizeof('')
|
||||||
|
|
||||||
|
|
||||||
|
def is_simple_string(x):
|
||||||
|
' We use the fact that python stores unicode strings with a 1-byte representation when possible '
|
||||||
|
return sys.getsizeof(x) == base_size + len(x)
|
||||||
|
|||||||
@ -2,9 +2,12 @@
|
|||||||
# vim:fileencoding=utf-8
|
# vim:fileencoding=utf-8
|
||||||
# License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
# License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
||||||
|
|
||||||
|
import codecs
|
||||||
|
|
||||||
from . import BaseTest, set_text_in_line
|
from . import BaseTest, set_text_in_line
|
||||||
|
|
||||||
from kitty.data_types import Line, Cursor
|
from kitty.data_types import Line, Cursor
|
||||||
|
from kitty.utils import is_simple_string, wcwidth
|
||||||
|
|
||||||
|
|
||||||
class TestDataTypes(BaseTest):
|
class TestDataTypes(BaseTest):
|
||||||
@ -72,3 +75,11 @@ class TestDataTypes(BaseTest):
|
|||||||
l.set_decoration(0, q.decoration)
|
l.set_decoration(0, q.decoration)
|
||||||
c = l.cursor_from(0)
|
c = l.cursor_from(0)
|
||||||
self.ae(c, q)
|
self.ae(c, q)
|
||||||
|
|
||||||
|
def test_utils(self):
|
||||||
|
d = codecs.getincrementaldecoder('utf-8')('strict').decode
|
||||||
|
self.ae(tuple(map(wcwidth, 'a1\0コ')), (1, 1, 0, 2))
|
||||||
|
for s in ('abd38453*(+\n\t\f\r !\0~[]{}()"\':;<>/?ASD`',):
|
||||||
|
self.assertTrue(is_simple_string(s))
|
||||||
|
self.assertTrue(is_simple_string(d(s.encode('utf-8'))))
|
||||||
|
self.assertFalse(is_simple_string('a1コ'))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user