Properly escape the word characters before compiling into a regex
This commit is contained in:
parent
87b9d2a478
commit
3f69327b54
@ -3,13 +3,14 @@
|
|||||||
# License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
# License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
import sys
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from ctypes import addressof, memmove, sizeof
|
from ctypes import addressof, memmove, sizeof
|
||||||
from threading import Lock
|
from threading import Lock
|
||||||
|
|
||||||
from .config import build_ansi_color_table
|
from .config import build_ansi_color_table, defaults
|
||||||
from .constants import get_boss, viewport_size, cell_size, ScreenGeometry, GLuint
|
from .constants import get_boss, viewport_size, cell_size, ScreenGeometry, GLuint
|
||||||
from .utils import get_logical_dpi, to_color, set_primary_selection, open_url, color_as_int
|
from .utils import get_logical_dpi, to_color, set_primary_selection, open_url, color_as_int, safe_print
|
||||||
from .fast_data_types import (
|
from .fast_data_types import (
|
||||||
glUniform2ui, glUniform4f, glUniform1i, glUniform2f, glDrawArraysInstanced,
|
glUniform2ui, glUniform4f, glUniform1i, glUniform2f, glDrawArraysInstanced,
|
||||||
GL_TRIANGLE_FAN, glEnable, glDisable, GL_BLEND, glDrawArrays, ColorProfile,
|
GL_TRIANGLE_FAN, glEnable, glDisable, GL_BLEND, glDrawArrays, ColorProfile,
|
||||||
@ -252,6 +253,15 @@ class CharGrid:
|
|||||||
self.selection_foreground, self.selection_background = map(color_as_int, (opts.selection_foreground, opts.selection_background))
|
self.selection_foreground, self.selection_background = map(color_as_int, (opts.selection_foreground, opts.selection_background))
|
||||||
self.sprite_map_type = self.main_sprite_map = self.scroll_sprite_map = self.render_buf = None
|
self.sprite_map_type = self.main_sprite_map = self.scroll_sprite_map = self.render_buf = None
|
||||||
|
|
||||||
|
def escape(chars):
|
||||||
|
return ''.join(frozenset(chars)).replace('\\', r'\\').replace(']', r'\]').replace('-', r'\-')
|
||||||
|
|
||||||
|
try:
|
||||||
|
self.word_pat = re.compile(r'[\w{}]'.format(escape(self.opts.select_by_word_characters)), re.UNICODE)
|
||||||
|
except Exception:
|
||||||
|
safe_print('Invalid characters in select_by_word_characters, ignoring', file=sys.stderr)
|
||||||
|
self.word_pat = re.compile(r'[\w{}]'.format(escape(defaults.select_by_word_characters)), re.UNICODE)
|
||||||
|
|
||||||
def update_position(self, window_geometry):
|
def update_position(self, window_geometry):
|
||||||
self.screen_geometry = calculate_gl_geometry(window_geometry)
|
self.screen_geometry = calculate_gl_geometry(window_geometry)
|
||||||
|
|
||||||
@ -400,15 +410,11 @@ class CharGrid:
|
|||||||
s.end_x = self.screen.columns - 1
|
s.end_x = self.screen.columns - 1
|
||||||
elif count == 2:
|
elif count == 2:
|
||||||
i = x
|
i = x
|
||||||
alphanumeric = r'\w'
|
while i >= 0 and self.word_pat.match(line[i]) is not None:
|
||||||
optionalchars = re.escape(self.opts.select_by_word_characters)
|
|
||||||
pattern = alphanumeric + optionalchars
|
|
||||||
pat = re.compile(r'['+pattern+']+', re.UNICODE)
|
|
||||||
while i >= 0 and pat.match(line[i]) is not None:
|
|
||||||
i -= 1
|
i -= 1
|
||||||
s.start_x = i if i == x else i + 1
|
s.start_x = i if i == x else i + 1
|
||||||
i = x
|
i = x
|
||||||
while i < self.screen.columns and pat.match(line[i]) is not None:
|
while i < self.screen.columns and self.word_pat.match(line[i]) is not None:
|
||||||
i += 1
|
i += 1
|
||||||
s.end_x = i if i == x else i - 1
|
s.end_x = i if i == x else i - 1
|
||||||
ps = self.text_for_selection()
|
ps = self.text_for_selection()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user