mirror of https://github.com/Textualize/rich.git
Merge branch 'l10n-tw' of github.com:l10n-tw/rich into l10n-tw
This commit is contained in:
commit
61f1b56192
|
@ -9,10 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
### Added
|
||||
|
||||
- Fix width measurement of 353 emoji variation sequences https://github.com/Textualize/rich/pull/1832
|
||||
- Workaround for edge case of object from Faiss with no `__class__` https://github.com/Textualize/rich/issues/1838
|
||||
|
||||
## [11.0.0] - 2022-01-09
|
||||
|
||||
### Added
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ name = "appnope"
|
|||
version = "0.1.2"
|
||||
description = "Disable App Nap on macOS >= 10.9"
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[[package]]
|
||||
|
@ -74,7 +74,7 @@ name = "backcall"
|
|||
version = "0.2.0"
|
||||
description = "Specifications for callback functions passed in to an API"
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[[package]]
|
||||
|
@ -195,7 +195,7 @@ name = "decorator"
|
|||
version = "5.1.0"
|
||||
description = "Decorators for Humans"
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = ">=3.5"
|
||||
|
||||
[[package]]
|
||||
|
@ -306,10 +306,10 @@ test = ["pytest (!=5.3.4)", "pytest-cov", "flaky", "nose", "jedi (<=0.17.2)"]
|
|||
|
||||
[[package]]
|
||||
name = "ipython"
|
||||
version = "7.16.2"
|
||||
version = "7.16.3"
|
||||
description = "IPython: Productive Interactive Computing"
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
|
||||
[package.dependencies]
|
||||
|
@ -340,7 +340,7 @@ name = "ipython-genutils"
|
|||
version = "0.2.0"
|
||||
description = "Vestigial utilities from IPython"
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[[package]]
|
||||
|
@ -368,7 +368,7 @@ name = "jedi"
|
|||
version = "0.17.2"
|
||||
description = "An autocompletion tool for Python that can be used for text editors."
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||
|
||||
[package.dependencies]
|
||||
|
@ -641,7 +641,7 @@ name = "parso"
|
|||
version = "0.7.1"
|
||||
description = "A Python Parser"
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||
|
||||
[package.extras]
|
||||
|
@ -660,7 +660,7 @@ name = "pexpect"
|
|||
version = "4.8.0"
|
||||
description = "Pexpect allows easy control of interactive console applications."
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[package.dependencies]
|
||||
|
@ -671,7 +671,7 @@ name = "pickleshare"
|
|||
version = "0.7.5"
|
||||
description = "Tiny 'shelve'-like database with concurrency support"
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[[package]]
|
||||
|
@ -735,7 +735,7 @@ name = "prompt-toolkit"
|
|||
version = "3.0.24"
|
||||
description = "Library for building powerful interactive command lines in Python"
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = ">=3.6.2"
|
||||
|
||||
[package.dependencies]
|
||||
|
@ -746,7 +746,7 @@ name = "ptyprocess"
|
|||
version = "0.7.0"
|
||||
description = "Run a subprocess in a pseudo terminal"
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[[package]]
|
||||
|
@ -953,7 +953,7 @@ name = "traitlets"
|
|||
version = "4.3.3"
|
||||
description = "Traitlets Python config system"
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[package.dependencies]
|
||||
|
@ -1013,7 +1013,7 @@ name = "wcwidth"
|
|||
version = "0.2.5"
|
||||
description = "Measures the displayed width of unicode strings in a terminal"
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[[package]]
|
||||
|
@ -1273,8 +1273,8 @@ ipykernel = [
|
|||
{file = "ipykernel-5.5.6.tar.gz", hash = "sha256:4ea44b90ae1f7c38987ad58ea0809562a17c2695a0499644326f334aecd369ec"},
|
||||
]
|
||||
ipython = [
|
||||
{file = "ipython-7.16.2-py3-none-any.whl", hash = "sha256:2f644313be4fdc5c8c2a17467f2949c29423c9e283a159d1fc9bf450a1a300af"},
|
||||
{file = "ipython-7.16.2.tar.gz", hash = "sha256:613085f8acb0f35f759e32bea35fba62c651a4a2e409a0da11414618f5eec0c4"},
|
||||
{file = "ipython-7.16.3-py3-none-any.whl", hash = "sha256:c0427ed8bc33ac481faf9d3acf7e84e0010cdaada945e0badd1e2e74cc075833"},
|
||||
{file = "ipython-7.16.3.tar.gz", hash = "sha256:5ac47dc9af66fc2f5530c12069390877ae372ac905edca75a92a6e363b5d7caa"},
|
||||
]
|
||||
ipython-genutils = [
|
||||
{file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"},
|
||||
|
|
|
@ -3,11 +3,7 @@
|
|||
CELL_WIDTHS = [
|
||||
(0, 0, 0),
|
||||
(1, 31, -1),
|
||||
(35, 35, 2),
|
||||
(42, 42, 2),
|
||||
(127, 159, -1),
|
||||
(169, 169, 2),
|
||||
(174, 174, 2),
|
||||
(768, 879, 0),
|
||||
(1155, 1161, 0),
|
||||
(1425, 1469, 0),
|
||||
|
@ -174,85 +170,39 @@ CELL_WIDTHS = [
|
|||
(7675, 7679, 0),
|
||||
(8203, 8207, 0),
|
||||
(8232, 8238, 0),
|
||||
(8252, 8252, 2),
|
||||
(8265, 8265, 2),
|
||||
(8288, 8291, 0),
|
||||
(8400, 8432, 0),
|
||||
(8482, 8482, 2),
|
||||
(8505, 8505, 2),
|
||||
(8596, 8601, 2),
|
||||
(8617, 8618, 2),
|
||||
(8986, 8987, 2),
|
||||
(9000, 9002, 2),
|
||||
(9167, 9167, 2),
|
||||
(9193, 9203, 2),
|
||||
(9208, 9210, 2),
|
||||
(9410, 9410, 2),
|
||||
(9642, 9643, 2),
|
||||
(9654, 9654, 2),
|
||||
(9664, 9664, 2),
|
||||
(9723, 9726, 2),
|
||||
(9728, 9732, 2),
|
||||
(9742, 9742, 2),
|
||||
(9745, 9745, 2),
|
||||
(9001, 9002, 2),
|
||||
(9193, 9196, 2),
|
||||
(9200, 9200, 2),
|
||||
(9203, 9203, 2),
|
||||
(9725, 9726, 2),
|
||||
(9748, 9749, 2),
|
||||
(9752, 9752, 2),
|
||||
(9757, 9757, 2),
|
||||
(9760, 9760, 2),
|
||||
(9762, 9763, 2),
|
||||
(9766, 9766, 2),
|
||||
(9770, 9770, 2),
|
||||
(9774, 9775, 2),
|
||||
(9784, 9786, 2),
|
||||
(9792, 9792, 2),
|
||||
(9794, 9794, 2),
|
||||
(9800, 9811, 2),
|
||||
(9823, 9824, 2),
|
||||
(9827, 9827, 2),
|
||||
(9829, 9830, 2),
|
||||
(9832, 9832, 2),
|
||||
(9851, 9851, 2),
|
||||
(9854, 9855, 2),
|
||||
(9874, 9879, 2),
|
||||
(9881, 9881, 2),
|
||||
(9883, 9884, 2),
|
||||
(9888, 9889, 2),
|
||||
(9855, 9855, 2),
|
||||
(9875, 9875, 2),
|
||||
(9889, 9889, 2),
|
||||
(9898, 9899, 2),
|
||||
(9904, 9905, 2),
|
||||
(9917, 9918, 2),
|
||||
(9924, 9925, 2),
|
||||
(9928, 9928, 2),
|
||||
(9934, 9935, 2),
|
||||
(9937, 9937, 2),
|
||||
(9939, 9940, 2),
|
||||
(9961, 9962, 2),
|
||||
(9968, 9973, 2),
|
||||
(9975, 9978, 2),
|
||||
(9934, 9934, 2),
|
||||
(9940, 9940, 2),
|
||||
(9962, 9962, 2),
|
||||
(9970, 9971, 2),
|
||||
(9973, 9973, 2),
|
||||
(9978, 9978, 2),
|
||||
(9981, 9981, 2),
|
||||
(9986, 9986, 2),
|
||||
(9989, 9989, 2),
|
||||
(9992, 9997, 2),
|
||||
(9999, 9999, 2),
|
||||
(10002, 10002, 2),
|
||||
(10004, 10004, 2),
|
||||
(10006, 10006, 2),
|
||||
(10013, 10013, 2),
|
||||
(10017, 10017, 2),
|
||||
(9994, 9995, 2),
|
||||
(10024, 10024, 2),
|
||||
(10035, 10036, 2),
|
||||
(10052, 10052, 2),
|
||||
(10055, 10055, 2),
|
||||
(10060, 10060, 2),
|
||||
(10062, 10062, 2),
|
||||
(10067, 10069, 2),
|
||||
(10071, 10071, 2),
|
||||
(10083, 10084, 2),
|
||||
(10133, 10135, 2),
|
||||
(10145, 10145, 2),
|
||||
(10160, 10160, 2),
|
||||
(10175, 10175, 2),
|
||||
(10548, 10549, 2),
|
||||
(11013, 11015, 2),
|
||||
(11035, 11036, 2),
|
||||
(11088, 11088, 2),
|
||||
(11093, 11093, 2),
|
||||
|
@ -451,8 +401,6 @@ CELL_WIDTHS = [
|
|||
(125252, 125258, 0),
|
||||
(126980, 126980, 2),
|
||||
(127183, 127183, 2),
|
||||
(127344, 127345, 2),
|
||||
(127358, 127359, 2),
|
||||
(127374, 127374, 2),
|
||||
(127377, 127386, 2),
|
||||
(127488, 127490, 2),
|
||||
|
@ -460,43 +408,30 @@ CELL_WIDTHS = [
|
|||
(127552, 127560, 2),
|
||||
(127568, 127569, 2),
|
||||
(127584, 127589, 2),
|
||||
(127744, 127777, 2),
|
||||
(127780, 127891, 2),
|
||||
(127894, 127895, 2),
|
||||
(127897, 127899, 2),
|
||||
(127902, 127984, 2),
|
||||
(127987, 127989, 2),
|
||||
(127991, 128253, 2),
|
||||
(127744, 127776, 2),
|
||||
(127789, 127797, 2),
|
||||
(127799, 127868, 2),
|
||||
(127870, 127891, 2),
|
||||
(127904, 127946, 2),
|
||||
(127951, 127955, 2),
|
||||
(127968, 127984, 2),
|
||||
(127988, 127988, 2),
|
||||
(127992, 128062, 2),
|
||||
(128064, 128064, 2),
|
||||
(128066, 128252, 2),
|
||||
(128255, 128317, 2),
|
||||
(128329, 128334, 2),
|
||||
(128331, 128334, 2),
|
||||
(128336, 128359, 2),
|
||||
(128367, 128368, 2),
|
||||
(128371, 128378, 2),
|
||||
(128391, 128391, 2),
|
||||
(128394, 128397, 2),
|
||||
(128400, 128400, 2),
|
||||
(128378, 128378, 2),
|
||||
(128405, 128406, 2),
|
||||
(128420, 128421, 2),
|
||||
(128424, 128424, 2),
|
||||
(128433, 128434, 2),
|
||||
(128444, 128444, 2),
|
||||
(128450, 128452, 2),
|
||||
(128465, 128467, 2),
|
||||
(128476, 128478, 2),
|
||||
(128481, 128481, 2),
|
||||
(128483, 128483, 2),
|
||||
(128488, 128488, 2),
|
||||
(128495, 128495, 2),
|
||||
(128499, 128499, 2),
|
||||
(128506, 128591, 2),
|
||||
(128420, 128420, 2),
|
||||
(128507, 128591, 2),
|
||||
(128640, 128709, 2),
|
||||
(128715, 128722, 2),
|
||||
(128716, 128716, 2),
|
||||
(128720, 128722, 2),
|
||||
(128725, 128727, 2),
|
||||
(128736, 128741, 2),
|
||||
(128745, 128745, 2),
|
||||
(128747, 128748, 2),
|
||||
(128752, 128752, 2),
|
||||
(128755, 128764, 2),
|
||||
(128756, 128764, 2),
|
||||
(128992, 129003, 2),
|
||||
(129292, 129338, 2),
|
||||
(129340, 129349, 2),
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import re
|
||||
from functools import lru_cache
|
||||
import re
|
||||
from typing import Dict, List
|
||||
|
||||
from ._cell_widths import CELL_WIDTHS
|
||||
|
@ -138,7 +138,6 @@ def chop_cells(text: str, max_size: int, position: int = 0) -> List[str]:
|
|||
|
||||
|
||||
if __name__ == "__main__": # pragma: no cover
|
||||
print(get_character_cell_size("🛥"))
|
||||
|
||||
print(get_character_cell_size("😽"))
|
||||
for line in chop_cells("""这是对亚洲语言支持的测试。面对模棱两可的想法,拒绝猜测的诱惑。""", 8):
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
import sys
|
||||
from typing import TYPE_CHECKING, Optional, Union
|
||||
|
||||
from ._emoji_codes import EMOJI
|
||||
from ._emoji_replace import _emoji_replace
|
||||
from .jupyter import JupyterMixin
|
||||
from .segment import Segment
|
||||
from .style import Style
|
||||
from ._emoji_codes import EMOJI
|
||||
from ._emoji_replace import _emoji_replace
|
||||
|
||||
if sys.version_info >= (3, 8):
|
||||
from typing import Literal
|
||||
|
@ -86,15 +86,11 @@ if __name__ == "__main__": # pragma: no cover
|
|||
|
||||
console = Console(record=True)
|
||||
|
||||
data = list(
|
||||
f":{name}: {name}" for name, value in sorted(EMOJI.items()) if len(value) == 1
|
||||
)
|
||||
columns = Columns(
|
||||
data,
|
||||
(f":{name}: {name}" for name in sorted(EMOJI.keys()) if "\u200D" not in name),
|
||||
column_first=True,
|
||||
)
|
||||
|
||||
console.print(columns)
|
||||
console.print(len(data))
|
||||
if len(sys.argv) > 1:
|
||||
console.save_html(sys.argv[1])
|
||||
|
|
|
@ -1,43 +1,6 @@
|
|||
from rich import cells
|
||||
|
||||
|
||||
def test_cell_len_empty_string():
|
||||
assert cells.cell_len("") == 0
|
||||
|
||||
|
||||
def test_cell_len_single_ascii_char():
|
||||
assert cells.cell_len("a") == 1
|
||||
|
||||
|
||||
def test_cell_len_single_ascii_num():
|
||||
assert cells.cell_len("5") == 1
|
||||
|
||||
|
||||
def test_cell_len_ascii_string():
|
||||
assert cells.cell_len("hello") == len("hello")
|
||||
|
||||
|
||||
def test_cell_len_zero_width_character():
|
||||
assert cells.cell_len("\u0483") == 0
|
||||
|
||||
|
||||
def test_cell_len_single_width_non_ascii_character():
|
||||
assert cells.cell_len("\u0370") == 1
|
||||
|
||||
|
||||
def test_cell_len_japanese_hiragana():
|
||||
assert cells.cell_len("こんにちは") == 10
|
||||
|
||||
|
||||
def test_cell_len_poop_emoji_has_width_2():
|
||||
assert cells.cell_len("💩") == 2
|
||||
|
||||
|
||||
def test_cell_len_emoji_presentation_sequence():
|
||||
# Handled different from standard emoji - we vary from wcwidth here, which reports width 1.
|
||||
assert cells.cell_len("🏵️") == 2
|
||||
|
||||
|
||||
def test_set_cell_size():
|
||||
assert cells.set_cell_size("foo", 0) == ""
|
||||
assert cells.set_cell_size("f", 0) == ""
|
||||
|
|
|
@ -1,355 +0,0 @@
|
|||
EMOJI_VARIATION_SEQUENCES = {
|
||||
"♒",
|
||||
"🕖",
|
||||
"⏱",
|
||||
"🔒",
|
||||
"♻",
|
||||
"☣",
|
||||
"🔍",
|
||||
"⛄",
|
||||
"✡",
|
||||
"🕳",
|
||||
"🐿",
|
||||
"▪",
|
||||
"🗡",
|
||||
"🚘",
|
||||
"🌪",
|
||||
"♟",
|
||||
"✉",
|
||||
"🛳",
|
||||
"📺",
|
||||
"↙",
|
||||
"㊗",
|
||||
"👆",
|
||||
"♐",
|
||||
"🎧",
|
||||
"🌡",
|
||||
"☂",
|
||||
"8",
|
||||
"⚕",
|
||||
"♦",
|
||||
"🗂",
|
||||
"🏆",
|
||||
"⏳",
|
||||
"📥",
|
||||
"🅰",
|
||||
"🗓",
|
||||
"™",
|
||||
"📟",
|
||||
"🚍",
|
||||
"🌤",
|
||||
"☯",
|
||||
"7",
|
||||
"🏊",
|
||||
"⤴",
|
||||
"🛥",
|
||||
"⛳",
|
||||
"🗞",
|
||||
"📋",
|
||||
"🕡",
|
||||
"✏",
|
||||
"♂",
|
||||
"🛤",
|
||||
"♏",
|
||||
"◽",
|
||||
"1",
|
||||
"🚼",
|
||||
"💣",
|
||||
"🌨",
|
||||
"⬜",
|
||||
"🕷",
|
||||
"⌨",
|
||||
"♑",
|
||||
"©",
|
||||
"⚽",
|
||||
"☀",
|
||||
"🏞",
|
||||
"🎛",
|
||||
"🌦",
|
||||
"♓",
|
||||
"🎓",
|
||||
"🕣",
|
||||
"📭",
|
||||
"㊙",
|
||||
"👎",
|
||||
"⛱",
|
||||
"⛰",
|
||||
"💳",
|
||||
"⏭",
|
||||
"⚛",
|
||||
"☑",
|
||||
"💻",
|
||||
"⁉",
|
||||
"⚱",
|
||||
"6",
|
||||
"⛷",
|
||||
"⛽",
|
||||
"♿",
|
||||
"🏄",
|
||||
"🚺",
|
||||
"🛰",
|
||||
"🖍",
|
||||
"⚠",
|
||||
"🚭",
|
||||
"⬆",
|
||||
"🌏",
|
||||
"🏘",
|
||||
"👍",
|
||||
"🕰",
|
||||
"📚",
|
||||
"⏏",
|
||||
"🕘",
|
||||
"📽",
|
||||
"🕵",
|
||||
"🕓",
|
||||
"☸",
|
||||
"⛑",
|
||||
"♎",
|
||||
"✍",
|
||||
"🕙",
|
||||
"🗺",
|
||||
"🕔",
|
||||
"❓",
|
||||
"📻",
|
||||
"⚙",
|
||||
"Ⓜ",
|
||||
"♀",
|
||||
"❤",
|
||||
"🕸",
|
||||
"🍸",
|
||||
"🈚",
|
||||
"🕞",
|
||||
"🕦",
|
||||
"⛴",
|
||||
"🗑",
|
||||
"▶",
|
||||
"📤",
|
||||
"🛍",
|
||||
"🎬",
|
||||
"🕕",
|
||||
"🌥",
|
||||
"🎚",
|
||||
"♾",
|
||||
"🛡",
|
||||
"👪",
|
||||
"♋",
|
||||
"👽",
|
||||
"⛔",
|
||||
"☔",
|
||||
"⛲",
|
||||
"✌",
|
||||
"🖱",
|
||||
"🏳",
|
||||
"👈",
|
||||
"♣",
|
||||
"🏚",
|
||||
"🎟",
|
||||
"☕",
|
||||
"2",
|
||||
"↪",
|
||||
"⚡",
|
||||
"♊",
|
||||
"🕹",
|
||||
"🏕",
|
||||
"👁",
|
||||
"⭕",
|
||||
"♌",
|
||||
"☄",
|
||||
"🈯",
|
||||
"🎮",
|
||||
"‼",
|
||||
"*",
|
||||
"🛠",
|
||||
"🅾",
|
||||
"⏸",
|
||||
"🕜",
|
||||
"🛎",
|
||||
"✔",
|
||||
"☹",
|
||||
"⌚",
|
||||
"🗣",
|
||||
"↗",
|
||||
"⛅",
|
||||
"⬛",
|
||||
"4",
|
||||
"🖊",
|
||||
"☺",
|
||||
"🀄",
|
||||
"9",
|
||||
"🖐",
|
||||
"⛺",
|
||||
"❗",
|
||||
"🖋",
|
||||
"☦",
|
||||
"🚔",
|
||||
"🅱",
|
||||
"👉",
|
||||
"♉",
|
||||
"⚾",
|
||||
"🛩",
|
||||
"♥",
|
||||
"☝",
|
||||
"⏮",
|
||||
"🔈",
|
||||
"🏷",
|
||||
"☘",
|
||||
"☢",
|
||||
"🗝",
|
||||
"🖥",
|
||||
"〰",
|
||||
"📬",
|
||||
"🖲",
|
||||
"🗳",
|
||||
"🕛",
|
||||
"🕧",
|
||||
"ℹ",
|
||||
"🖼",
|
||||
"⚰",
|
||||
"🚹",
|
||||
"#",
|
||||
"🛋",
|
||||
"🌧",
|
||||
"🐦",
|
||||
"🕊",
|
||||
"🗄",
|
||||
"🐟",
|
||||
"🐕",
|
||||
"⚔",
|
||||
"⛏",
|
||||
"3",
|
||||
"🌬",
|
||||
"🏂",
|
||||
"⛓",
|
||||
"🏗",
|
||||
"💿",
|
||||
"🛏",
|
||||
"🏵",
|
||||
"🎙",
|
||||
"😐",
|
||||
"☁",
|
||||
"♠",
|
||||
"⬇",
|
||||
"🏝",
|
||||
"🏜",
|
||||
"📷",
|
||||
"🗨",
|
||||
"🖌",
|
||||
"🚲",
|
||||
"✂",
|
||||
"🕯",
|
||||
"🎭",
|
||||
"🚑",
|
||||
"®",
|
||||
"♨",
|
||||
"⏪",
|
||||
"🗃",
|
||||
"◼",
|
||||
"🎖",
|
||||
"🛣",
|
||||
"🕗",
|
||||
"👂",
|
||||
"☪",
|
||||
"◾",
|
||||
"⚗",
|
||||
"🚇",
|
||||
"✝",
|
||||
"📦",
|
||||
"⏺",
|
||||
"☮",
|
||||
"⛵",
|
||||
"🏠",
|
||||
"✴",
|
||||
"🏭",
|
||||
"⏩",
|
||||
"☎",
|
||||
"⚖",
|
||||
"🛢",
|
||||
"↖",
|
||||
"❣",
|
||||
"🏛",
|
||||
"🕒",
|
||||
"↘",
|
||||
"🏖",
|
||||
"🌜",
|
||||
"🕶",
|
||||
"⛪",
|
||||
"🕟",
|
||||
"🖇",
|
||||
"🐈",
|
||||
"↔",
|
||||
"🌩",
|
||||
"⛩",
|
||||
"❇",
|
||||
"🏟",
|
||||
"⏲",
|
||||
"💰",
|
||||
"⚒",
|
||||
"🌍",
|
||||
"◻",
|
||||
"☠",
|
||||
"⛹",
|
||||
"♈",
|
||||
"👓",
|
||||
"✖",
|
||||
"📹",
|
||||
"🕴",
|
||||
"🎞",
|
||||
"⤵",
|
||||
"▫",
|
||||
"🍽",
|
||||
"◀",
|
||||
"🗜",
|
||||
"➡",
|
||||
"📫",
|
||||
"🏋",
|
||||
"⌛",
|
||||
"🏍",
|
||||
"⬅",
|
||||
"⚫",
|
||||
"🕐",
|
||||
"🗯",
|
||||
"🏔",
|
||||
"🕑",
|
||||
"🏙",
|
||||
"❄",
|
||||
"📪",
|
||||
"🅿",
|
||||
"🌶",
|
||||
"〽",
|
||||
"🔓",
|
||||
"⏹",
|
||||
"⭐",
|
||||
"🕠",
|
||||
"🕝",
|
||||
"🈂",
|
||||
"🕚",
|
||||
"🗒",
|
||||
"🈷",
|
||||
"↩",
|
||||
"☃",
|
||||
"✈",
|
||||
"🕉",
|
||||
"5",
|
||||
"⚪",
|
||||
"⚜",
|
||||
"🏎",
|
||||
"🌫",
|
||||
"🏌",
|
||||
"⛈",
|
||||
"✳",
|
||||
"🕤",
|
||||
"✒",
|
||||
"🌎",
|
||||
"🕥",
|
||||
"🌕",
|
||||
"⛸",
|
||||
"0",
|
||||
"↕",
|
||||
"🎗",
|
||||
"🖨",
|
||||
"👇",
|
||||
"⚓",
|
||||
"🕢",
|
||||
"♍",
|
||||
"⏯",
|
||||
}
|
|
@ -1,12 +1,11 @@
|
|||
import string
|
||||
import subprocess
|
||||
import sys
|
||||
from typing import List, Tuple
|
||||
import sys
|
||||
|
||||
from rich.progress import Progress
|
||||
|
||||
from wcwidth import wcwidth
|
||||
|
||||
from rich.progress import Progress
|
||||
from tools.emoji_variation_sequences import EMOJI_VARIATION_SEQUENCES
|
||||
|
||||
progress = Progress()
|
||||
|
||||
|
@ -17,21 +16,10 @@ def make_widths_table() -> List[Tuple[int, int, int]]:
|
|||
|
||||
make_table_task = progress.add_task("Calculating table...")
|
||||
|
||||
widths = []
|
||||
for codepoint in range(0, sys.maxunicode + 1):
|
||||
# Emoji presentation sequences behave as though they were East Asian Wide,
|
||||
# regardless of their assigned East_Asian_Width property value:
|
||||
# http://www.unicode.org/reports/tr41/tr41-26.html#UTS51
|
||||
# Codepoints representing digits can appear at the start of EPSQs, but they
|
||||
# are captured by a regex inside Rich which targets the most common codepoint ranges,
|
||||
# so we don't need them in our lookup table.
|
||||
if (
|
||||
chr(codepoint) in EMOJI_VARIATION_SEQUENCES
|
||||
and chr(codepoint) not in string.digits
|
||||
):
|
||||
widths.append((codepoint, 2))
|
||||
else:
|
||||
widths.append((codepoint, wcwidth(chr(codepoint))))
|
||||
widths = (
|
||||
(codepoint, wcwidth(chr(codepoint)))
|
||||
for codepoint in range(0, sys.maxunicode + 1)
|
||||
)
|
||||
|
||||
_widths = [(codepoint, width) for codepoint, width in widths if width != 1]
|
||||
iter_widths = iter(_widths)
|
||||
|
@ -52,6 +40,7 @@ def make_widths_table() -> List[Tuple[int, int, int]]:
|
|||
|
||||
|
||||
def get_cell_size(table: List[Tuple[int, int, int]], character: str) -> int:
|
||||
|
||||
codepoint = ord(character)
|
||||
lower_bound = 0
|
||||
upper_bound = len(table) - 1
|
||||
|
@ -77,11 +66,9 @@ def test(widths_table):
|
|||
character = chr(codepoint)
|
||||
width1 = get_cell_size(widths_table, character)
|
||||
width2 = wcwidth(character)
|
||||
if width1 != width2 and character not in EMOJI_VARIATION_SEQUENCES:
|
||||
if width1 != width2:
|
||||
print(f"{width1} != {width2}")
|
||||
raise Exception(
|
||||
f"Width mismatch between Rich and wcwidth for character '{character}'"
|
||||
)
|
||||
break
|
||||
|
||||
|
||||
def run():
|
||||
|
|
Loading…
Reference in New Issue