unicodedata-reader 1.3.2__tar.gz → 1.3.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (17) hide show
  1. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/PKG-INFO +1 -1
  2. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/pyproject.toml +1 -1
  3. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/unicodedata_reader/entry.py +18 -16
  4. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/unicodedata_reader/reader.py +16 -0
  5. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/unicodedata_reader/set.py +12 -16
  6. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/LICENSE +0 -0
  7. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/README.md +0 -0
  8. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/unicodedata_reader/__init__.py +0 -0
  9. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/unicodedata_reader/__main__.py +0 -0
  10. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/unicodedata_reader/bidi_brackets.py +0 -0
  11. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/unicodedata_reader/cli.py +0 -0
  12. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/unicodedata_reader/compressor.py +0 -0
  13. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/unicodedata_reader/east_asian_width.py +0 -0
  14. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/unicodedata_reader/emoji.py +0 -0
  15. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/unicodedata_reader/general_category.py +0 -0
  16. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/unicodedata_reader/line_break.py +0 -0
  17. {unicodedata_reader-1.3.2 → unicodedata_reader-1.3.4}/unicodedata_reader/vertical_orientation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unicodedata-reader
3
- Version: 1.3.2
3
+ Version: 1.3.4
4
4
  Summary:
5
5
  Home-page: https://github.com/kojiishi/unicodedata-reader
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "unicodedata-reader"
7
- version = "1.3.2"
7
+ version = "1.3.4"
8
8
  description = ""
9
9
  authors = ["Koji Ishii <kojii@chromium.org>"]
10
10
  readme = "README.md"
@@ -10,14 +10,13 @@ from typing import Iterable
10
10
  from typing import List
11
11
  from typing import Optional
12
12
  from typing import Sequence
13
- from typing import Set
14
13
  from typing import Union
15
14
  from typing import Tuple
16
15
 
17
16
  _logger = logging.getLogger('UnicodeDataEntry')
18
17
 
19
18
 
20
- def u_hex(value):
19
+ def u_hex(value: int) -> str:
21
20
  return f'{value:04X}'
22
21
 
23
22
 
@@ -80,16 +79,24 @@ class UnicodeDataEntry(object):
80
79
  def is_in_range(self, code: int) -> bool:
81
80
  return code >= self.min and code <= self.max
82
81
 
82
+ @staticmethod
83
+ def to_codes(entries: Iterable['UnicodeDataEntry']):
84
+ return itertools.chain(*(e.range() for e in entries))
85
+
83
86
  @property
84
87
  def count(self):
85
88
  self.assert_range()
86
89
  return self.max - self.min + 1
87
90
 
88
- def range_as_str(self):
91
+ def range_as_str(self, converter: Callable[[int], str] = u_hex):
89
92
  self.assert_range()
93
+ min = converter(self.min)
90
94
  if self.min == self.max:
91
- return u_hex(self.min)
92
- return f'{u_hex(self.min)}..{u_hex(self.max)}'
95
+ return min
96
+ max = converter(self.max)
97
+ if min == max:
98
+ return min
99
+ return f'{min}..{max}'
93
100
 
94
101
  def to_str(self, separator: str = ';'):
95
102
  return separator.join((self.range_as_str(), str(self.value)))
@@ -269,24 +276,19 @@ class UnicodeDataEntries(object):
269
276
  """Returns an `Iterable` of `UnicodeDataEntry` for the given `pred`."""
270
277
  return (entry for entry in self if pred(entry.value))
271
278
 
272
- def codes_for(self, pred: Callable[[Any], bool]) -> Iterable[int]:
273
- """Returns an `Iterable` of Unicode code points for the given `pred`."""
274
- return itertools.chain(*(e.range() for e in self.filter(pred)))
275
-
276
- def add_to_set(self, pred: Callable[[Any], bool], set: Set[int]) -> None:
279
+ def add_to_set(self, pred: Callable[[Any], bool], set: set) -> None:
277
280
  """Add values `pred` returns `True` to `set[int]`."""
278
- for code in self.codes_for(pred):
281
+ for code in UnicodeDataEntry.to_codes(self.filter(pred)):
279
282
  set.add(code)
280
283
 
281
- def remove_from_set(self, pred: Callable[[Any], bool],
282
- set: Set[int]) -> None:
284
+ def remove_from_set(self, pred: Callable[[Any], bool], set: set) -> None:
283
285
  """Remove values `pred` returns `True` from `set[int]`."""
284
- for code in self.codes_for(pred):
286
+ for code in UnicodeDataEntry.to_codes(self.filter(pred)):
285
287
  set.discard(code)
286
288
 
287
- def to_set(self, pred: Callable[[Any], bool]) -> Set[int]:
289
+ def to_set(self, pred: Callable[[Any], bool]) -> set:
288
290
  """Returns a `set[int]` of values `pred` returns `True`."""
289
- s = set() # type: set[int]
291
+ s = set()
290
292
  self.add_to_set(pred, s)
291
293
  return s
292
294
 
@@ -30,6 +30,22 @@ class UnicodeDataReader(object):
30
30
  ) -> None:
31
31
  self.url_template = url_template
32
32
 
33
+ class Context(object):
34
+ """This class changes `UnicodeDataReader.default` while in the context,
35
+ and restores when exit."""
36
+
37
+ def __init__(self, reader: 'UnicodeDataReader') -> None:
38
+ self.reader = reader
39
+
40
+ def __enter__(self):
41
+ self.saved_default = UnicodeDataReader.default
42
+ UnicodeDataReader.default = self.reader
43
+ return self.reader
44
+
45
+ def __exit__(self, exc_type, exc_val, exc_tb):
46
+ UnicodeDataReader.default = self.saved_default
47
+ return None
48
+
33
49
  def bidi_brackets(self) -> UnicodeDataEntries:
34
50
  name = 'BidiBrackets'
35
51
  lines = self.read_lines(name)
@@ -1,7 +1,7 @@
1
1
  from typing import Any
2
2
  from typing import Callable
3
3
  from typing import Iterable
4
- from typing import Set
4
+ from typing import Optional
5
5
 
6
6
  from unicodedata_reader.entry import *
7
7
  from unicodedata_reader.reader import *
@@ -11,9 +11,9 @@ class Set(object):
11
11
  """A simple wrapper of a `set` of Unicode code points."""
12
12
 
13
13
  def __init__(self,
14
- entries: UnicodeDataEntries = None,
15
- pred: Callable[[Any], bool] = None) -> None:
16
- self.set = set() # type: Set[int]
14
+ entries: Optional[UnicodeDataEntries] = None,
15
+ pred: Optional[Callable[[Any], bool]] = None) -> None:
16
+ self.set = set()
17
17
  if entries:
18
18
  self.add_entries(entries, pred)
19
19
 
@@ -46,25 +46,21 @@ class Set(object):
46
46
  entries.add_to_set(pred, self.set)
47
47
 
48
48
  @staticmethod
49
- def east_asian_width(
50
- value: str,
51
- reader: UnicodeDataReader = UnicodeDataReader.default) -> 'Set':
49
+ def east_asian_width(value: str) -> 'Set':
50
+ reader = UnicodeDataReader.default
52
51
  return Set(reader.east_asian_width(), lambda v: v == value)
53
52
 
54
53
  @staticmethod
55
- def general_category(
56
- value: str,
57
- reader: UnicodeDataReader = UnicodeDataReader.default) -> 'Set':
54
+ def general_category(value: str) -> 'Set':
55
+ reader = UnicodeDataReader.default
58
56
  return Set(reader.general_category(), lambda v: v.startswith(value))
59
57
 
60
58
  @staticmethod
61
- def scripts(
62
- value: str,
63
- reader: UnicodeDataReader = UnicodeDataReader.default) -> 'Set':
59
+ def scripts(value: str) -> 'Set':
60
+ reader = UnicodeDataReader.default
64
61
  return Set(reader.scripts(), lambda v: v == value)
65
62
 
66
63
  @staticmethod
67
- def script_extensions(
68
- value: str,
69
- reader: UnicodeDataReader = UnicodeDataReader.default) -> 'Set':
64
+ def script_extensions(value: str) -> 'Set':
65
+ reader = UnicodeDataReader.default
70
66
  return Set(reader.script_extensions(), lambda v: value in v)