Skip to content

Commit

Permalink
Generate more precise width table using wcwidth
Browse files Browse the repository at this point in the history
  • Loading branch information
dahlia committed Jan 9, 2023
1 parent 745b2c8 commit 71da607
Show file tree
Hide file tree
Showing 4 changed files with 532 additions and 5 deletions.
1 change: 1 addition & 0 deletions pyproject.toml
Expand Up @@ -78,6 +78,7 @@ colorama = ["colorama>=0.4.3"]
uvloop = ["uvloop>=0.15.2"]
d = [
"aiohttp>=3.7.4",
"wcwidth==0.2.5",
]
jupyter = [
"ipython>=7.8.0",
Expand Down
50 changes: 50 additions & 0 deletions scripts/make_width_table.py
@@ -0,0 +1,50 @@
import sys
from os.path import basename, dirname, join
from typing import Iterable, Tuple

from wcwidth import wcwidth


def make_width_table() -> Iterable[Tuple[int, int, int]]:
start_codepoint = -1
end_codepoint = -1
range_width = -2
for codepoint in range(0, sys.maxunicode + 1):
width = wcwidth(chr(codepoint))
if width == 1:
continue
if start_codepoint < 0:
start_codepoint = codepoint
range_width = width
elif width != range_width or codepoint != end_codepoint + 1:
yield (start_codepoint, end_codepoint, range_width)
start_codepoint = codepoint
range_width = width
end_codepoint = codepoint
if start_codepoint >= 0:
yield (start_codepoint, end_codepoint, range_width)


def main() -> None:
table_path = join(dirname(__file__), "..", "src", "black", "_width_table.py")
with open(table_path, "w") as f:
f.write(
f"""# Generated by {basename(__file__)}
import sys
from typing import List, Tuple
if sys.version_info < (3, 8):
from typing_extensions import Final
else:
from typing import Final
WIDTH_TABLE: Final[List[Tuple[int, int, int]]] = [
"""
)
for triple in make_width_table():
f.write(f" {triple!r},\n")
f.write("]\n")


if __name__ == "__main__":
main()

0 comments on commit 71da607

Please sign in to comment.