unicodedata-reader 1.2.0__tar.gz → 1.3.0__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.2.0 → unicodedata_reader-1.3.0}/PKG-INFO +1 -1
  2. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/pyproject.toml +2 -2
  3. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/unicodedata_reader/entry.py +28 -0
  4. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/unicodedata_reader/set.py +13 -20
  5. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/LICENSE +0 -0
  6. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/README.md +0 -0
  7. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/unicodedata_reader/__init__.py +0 -0
  8. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/unicodedata_reader/__main__.py +0 -0
  9. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/unicodedata_reader/bidi_brackets.py +0 -0
  10. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/unicodedata_reader/cli.py +0 -0
  11. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/unicodedata_reader/compressor.py +0 -0
  12. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/unicodedata_reader/east_asian_width.py +0 -0
  13. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/unicodedata_reader/emoji.py +0 -0
  14. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/unicodedata_reader/general_category.py +0 -0
  15. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/unicodedata_reader/line_break.py +0 -0
  16. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/unicodedata_reader/reader.py +0 -0
  17. {unicodedata_reader-1.2.0 → unicodedata_reader-1.3.0}/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.2.0
3
+ Version: 1.3.0
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.2.0"
7
+ version = "1.3.0"
8
8
  description = ""
9
9
  authors = ["Koji Ishii <kojii@chromium.org>"]
10
10
  readme = "README.md"
@@ -17,7 +17,7 @@ platformdirs = ">=2.2,<5.0"
17
17
 
18
18
  [tool.poetry.dev-dependencies]
19
19
  pytest = "*"
20
- pytype = {version = "*", python = "<3.10"}
20
+ pytype = "*"
21
21
  tox = "^4.14.2"
22
22
  yapf = "^0.40.2"
23
23
 
@@ -4,11 +4,13 @@ import logging
4
4
  import re
5
5
  import types
6
6
  from typing import Any
7
+ from typing import Callable
7
8
  from typing import Dict
8
9
  from typing import Iterable
9
10
  from typing import List
10
11
  from typing import Optional
11
12
  from typing import Sequence
13
+ from typing import Set
12
14
  from typing import Union
13
15
  from typing import Tuple
14
16
 
@@ -259,6 +261,32 @@ class UnicodeDataEntries(object):
259
261
  return entry.value
260
262
  return self.missing_value(code)
261
263
 
264
+ def filter(self, pred: Callable[[Any],
265
+ bool]) -> Iterable[UnicodeDataEntry]:
266
+ """Returns an `Iterable` of `UnicodeDataEntry` for the given `pred`."""
267
+ return (entry for entry in self if pred(entry.value))
268
+
269
+ def codes_for(self, pred: Callable[[Any], bool]) -> Iterable[int]:
270
+ """Returns an `Iterable` of Unicode code points for the given `pred`."""
271
+ return itertools.chain(*(e.range() for e in self.filter(pred)))
272
+
273
+ def add_to_set(self, pred: Callable[[Any], bool], set: Set[int]) -> None:
274
+ """Add values `pred` returns `True` to `set[int]`."""
275
+ for code in self.codes_for(pred):
276
+ set.add(code)
277
+
278
+ def remove_from_set(self, pred: Callable[[Any], bool],
279
+ set: Set[int]) -> None:
280
+ """Remove values `pred` returns `True` from `set[int]`."""
281
+ for code in self.codes_for(pred):
282
+ set.discard(code)
283
+
284
+ def to_set(self, pred: Callable[[Any], bool]) -> Set[int]:
285
+ """Returns a `set[int]` of values `pred` returns `True`."""
286
+ s = set() # type: set[int]
287
+ self.add_to_set(pred, s)
288
+ return s
289
+
262
290
  def values_for_code(self) -> Iterable[Any]:
263
291
  """Returns a list of values whose index is the Unicode code point.
264
292
 
@@ -1,16 +1,21 @@
1
1
  from typing import Any
2
2
  from typing import Callable
3
3
  from typing import Iterable
4
+ from typing import Set
4
5
 
5
6
  from unicodedata_reader.entry import *
6
7
  from unicodedata_reader.reader import *
7
8
 
8
9
 
9
10
  class Set(object):
10
- """A simple set of Unicode code points."""
11
+ """A simple wrapper of a `set` of Unicode code points."""
11
12
 
12
- def __init__(self) -> None:
13
- self.set = set() # type: set[int]
13
+ def __init__(self,
14
+ entries: UnicodeDataEntries = None,
15
+ pred: Callable[[Any], bool] = None) -> None:
16
+ self.set = set() # type: Set[int]
17
+ if entries:
18
+ self.add_entries(entries, pred)
14
19
 
15
20
  def __contains__(self, code_point: int) -> bool:
16
21
  return code_point in self.set
@@ -38,40 +43,28 @@ class Set(object):
38
43
 
39
44
  def add_entries(self, entries: UnicodeDataEntries, pred: Callable[[Any],
40
45
  bool]):
41
- for entry in entries:
42
- if pred(entry.value):
43
- for code in entry.range():
44
- self.set.add(code)
46
+ entries.add_to_set(pred, self.set)
45
47
 
46
48
  @staticmethod
47
49
  def east_asian_width(
48
50
  value: str,
49
51
  reader: UnicodeDataReader = UnicodeDataReader.default) -> 'Set':
50
- set = Set()
51
- set.add_entries(reader.east_asian_width(), lambda v: v == value)
52
- return set
52
+ return Set(reader.east_asian_width(), lambda v: v == value)
53
53
 
54
54
  @staticmethod
55
55
  def general_category(
56
56
  value: str,
57
57
  reader: UnicodeDataReader = UnicodeDataReader.default) -> 'Set':
58
- set = Set()
59
- set.add_entries(reader.general_category(),
60
- lambda v: v.startswith(value))
61
- return set
58
+ return Set(reader.general_category(), lambda v: v.startswith(value))
62
59
 
63
60
  @staticmethod
64
61
  def scripts(
65
62
  value: str,
66
63
  reader: UnicodeDataReader = UnicodeDataReader.default) -> 'Set':
67
- set = Set()
68
- set.add_entries(reader.scripts(), lambda v: v == value)
69
- return set
64
+ return Set(reader.scripts(), lambda v: v == value)
70
65
 
71
66
  @staticmethod
72
67
  def script_extensions(
73
68
  value: str,
74
69
  reader: UnicodeDataReader = UnicodeDataReader.default) -> 'Set':
75
- set = Set()
76
- set.add_entries(reader.script_extensions(), lambda v: value in v)
77
- return set
70
+ return Set(reader.script_extensions(), lambda v: value in v)