9
9
10
10
symbols = [
11
11
["Lower-case Greek" ,
12
- 4 ,
13
12
(r"\alpha" , r"\beta" , r"\gamma" , r"\chi" , r"\delta" , r"\epsilon" ,
14
13
r"\eta" , r"\iota" , r"\kappa" , r"\lambda" , r"\mu" , r"\nu" , r"\omega" ,
15
14
r"\phi" , r"\pi" , r"\psi" , r"\rho" , r"\sigma" , r"\tau" , r"\theta" ,
16
15
r"\upsilon" , r"\xi" , r"\zeta" , r"\digamma" , r"\varepsilon" , r"\varkappa" ,
17
16
r"\varphi" , r"\varpi" , r"\varrho" , r"\varsigma" , r"\vartheta" )],
18
17
["Upper-case Greek" ,
19
- 4 ,
20
18
(r"\Delta" , r"\Gamma" , r"\Lambda" , r"\Omega" , r"\Phi" , r"\Pi" , r"\Psi" ,
21
19
r"\Sigma" , r"\Theta" , r"\Upsilon" , r"\Xi" )],
22
20
["Hebrew" ,
23
- 6 ,
24
21
(r"\aleph" , r"\beth" , r"\gimel" , r"\daleth" )],
25
22
["Latin named characters" ,
26
- 6 ,
27
23
r"""\aa \AA \ae \AE \oe \OE \O \o \thorn \Thorn \ss \eth \dh \DH""" .split ()],
28
24
["Delimiters" ,
29
- 5 ,
30
25
_mathtext .Parser ._delims ],
31
26
["Big symbols" ,
32
- 5 ,
33
27
_mathtext .Parser ._overunder_symbols | _mathtext .Parser ._dropsub_symbols ],
34
28
["Standard function names" ,
35
- 5 ,
36
29
{fr"\{ fn } " for fn in _mathtext .Parser ._function_names }],
37
30
["Binary operation symbols" ,
38
- 4 ,
39
31
_mathtext .Parser ._binary_operators ],
40
32
["Relation symbols" ,
41
- 4 ,
42
33
_mathtext .Parser ._relation_symbols ],
43
34
["Arrow symbols" ,
44
- 4 ,
45
35
_mathtext .Parser ._arrow_symbols ],
46
36
["Dot symbols" ,
47
- 4 ,
48
37
r"""\cdots \vdots \ldots \ddots \adots \Colon \therefore \because""" .split ()],
49
38
["Black-board characters" ,
50
- 6 ,
51
39
[fr"\{ symbol } " for symbol in _mathtext_data .tex2uni
52
40
if re .match (bb_pattern , symbol )]],
53
41
["Script characters" ,
54
- 6 ,
55
42
[fr"\{ symbol } " for symbol in _mathtext_data .tex2uni
56
43
if re .match (scr_pattern , symbol )]],
57
44
["Fraktur characters" ,
58
- 6 ,
59
45
[fr"\{ symbol } " for symbol in _mathtext_data .tex2uni
60
46
if re .match (frak_pattern , symbol )]],
61
47
["Miscellaneous symbols" ,
62
- 4 ,
63
48
r"""\neg \infty \forall \wp \exists \bigstar \angle \partial
64
49
\nexists \measuredangle \emptyset \sphericalangle \clubsuit
65
50
\varnothing \complement \diamondsuit \imath \Finv \triangledown
73
58
]
74
59
75
60
61
+ def calculate_best_columns (
62
+ symbols_list , max_line_length , max_columns
63
+ ):
64
+ """
65
+ Calculate the best number of columns to fit the symbols within the
66
+ given constraints.
67
+
68
+ Parameters
69
+ ----------
70
+ symbols_list (list): A list of symbols to be displayed.
71
+ max_line_length (int): The maximum allowed length of a line.
72
+ min_columns (int): The minimum number of columns to consider.
73
+ max_columns (int): The maximum number of columns to consider.
74
+
75
+ Returns
76
+ -------
77
+ int: The best number of columns that fits within the constraints.
78
+ """
79
+ max_cell_width = max (len (sym ) for sym in symbols_list )
80
+ print (f"max_cell_width = { max_cell_width } " )
81
+ print (f"max_line_length = { max_line_length } " )
82
+ print (f"max_line_length // max_cell_width = { max_line_length // max_cell_width } " )
83
+ return min (max_columns , len (symbols_list ), max_line_length // max_cell_width )
84
+
85
+
76
86
def run (state_machine ):
77
87
78
88
def render_symbol (sym , ignore_variant = False ):
@@ -86,15 +96,19 @@ def render_symbol(sym, ignore_variant=False):
86
96
return f'\\ { sym } ' if sym in ('\\ ' , '|' , '+' , '-' , '*' ) else sym
87
97
88
98
lines = []
89
- for category , columns , syms in symbols :
99
+ for category , syms in symbols :
90
100
syms = sorted (syms ,
91
101
# Sort by Unicode and place variants immediately
92
102
# after standard versions.
93
103
key = lambda sym : (render_symbol (sym , ignore_variant = True ),
94
104
sym .startswith (r"\var" )),
95
105
reverse = (category == "Hebrew" )) # Hebrew is rtl
96
106
rendered_syms = [f"{ render_symbol (sym )} ``{ sym } ``" for sym in syms ]
97
- columns = min (columns , len (syms ))
107
+ columns = calculate_best_columns (
108
+ rendered_syms ,
109
+ max_line_length = 96 ,
110
+ max_columns = 6
111
+ )
98
112
lines .append ("**%s**" % category )
99
113
lines .append ('' )
100
114
max_width = max (map (len , rendered_syms ))
@@ -128,13 +142,12 @@ def setup(app):
128
142
metadata = {'parallel_read_safe' : True , 'parallel_write_safe' : True }
129
143
return metadata
130
144
131
-
132
145
if __name__ == "__main__" :
133
146
# Do some verification of the tables
134
147
135
148
print ("SYMBOLS NOT IN STIX:" )
136
149
all_symbols = {}
137
- for category , columns , syms in symbols :
150
+ for category , syms in symbols :
138
151
if category == "Standard Function Names" :
139
152
continue
140
153
for sym in syms :
0 commit comments