FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python-black/scripts/make_width_table.py at main · pullfrog/python-black · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
pullfrog
/
python-black
Public
forked from
psf/black
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
1
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
python-black
/
scripts
/
make_width_table.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
66 lines (52 loc) · 2.29 KB
Breadcrumbs
python-black
/
scripts
/
make_width_table.py
Copy path
File metadata and controls
66 lines (52 loc) · 2.29 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""Generates a width table for Unicode characters.
This script generates a width table for Unicode characters that are not
narrow (width 1). The table is written to src/black/_width_table.py (note
that although this file is generated, it is checked into Git) and is used
by the char_width() function in src/black/strings.py.
You should run this script when you upgrade wcwidth, which is expected to
happen when a new Unicode version is released. The generated table contains
the version of wcwidth and Unicode that it was generated for.
In order to run this script, you need to install the latest version of wcwidth.
You can do this by running:
pip install -U wcwidth
"""
import
sys
from
collections
.
abc
import
Iterable
from
os
.
path
import
basename
,
dirname
,
join
import
wcwidth
# type: ignore[import-not-found]
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
.
wcwidth
(
chr
(
codepoint
))
if
width
<=
1
:
# Ignore narrow characters along with zero-width characters so that
# they are treated as single-width. Note that treating zero-width
# characters as single-width is consistent with the heuristics built
# on top of str.isascii() in the str_width() function in strings.py.
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__
)
}
# wcwidth
{
wcwidth
.
__version__
}
# Unicode
{
wcwidth
.
list_versions
()[
-
1
]
}
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
()
Back
|
FazBrowse Home
|
New Git URL