Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 2420e6a

Browse filesBrowse files
committed
Refactor math_symbol_table.py to dynamically determine column number for symbol tables(Issue #26143)
- Remove hardcoded column numbers; now columns are auto-calculated based on symbol length and page width constraints. Future changes to symbol lists require no manual column adjustment.
1 parent def8fa4 commit 2420e6a
Copy full SHA for 2420e6a

File tree

Expand file treeCollapse file tree

1 file changed

+47
-19
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+47
-19
lines changed

‎doc/sphinxext/math_symbol_table.py

Copy file name to clipboardExpand all lines: doc/sphinxext/math_symbol_table.py
+47-19Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,57 +9,42 @@
99

1010
symbols = [
1111
["Lower-case Greek",
12-
4,
1312
(r"\alpha", r"\beta", r"\gamma", r"\chi", r"\delta", r"\epsilon",
1413
r"\eta", r"\iota", r"\kappa", r"\lambda", r"\mu", r"\nu", r"\omega",
1514
r"\phi", r"\pi", r"\psi", r"\rho", r"\sigma", r"\tau", r"\theta",
1615
r"\upsilon", r"\xi", r"\zeta", r"\digamma", r"\varepsilon", r"\varkappa",
1716
r"\varphi", r"\varpi", r"\varrho", r"\varsigma", r"\vartheta")],
1817
["Upper-case Greek",
19-
4,
2018
(r"\Delta", r"\Gamma", r"\Lambda", r"\Omega", r"\Phi", r"\Pi", r"\Psi",
2119
r"\Sigma", r"\Theta", r"\Upsilon", r"\Xi")],
2220
["Hebrew",
23-
6,
2421
(r"\aleph", r"\beth", r"\gimel", r"\daleth")],
2522
["Latin named characters",
26-
6,
2723
r"""\aa \AA \ae \AE \oe \OE \O \o \thorn \Thorn \ss \eth \dh \DH""".split()],
2824
["Delimiters",
29-
5,
3025
_mathtext.Parser._delims],
3126
["Big symbols",
32-
5,
3327
_mathtext.Parser._overunder_symbols | _mathtext.Parser._dropsub_symbols],
3428
["Standard function names",
35-
5,
3629
{fr"\{fn}" for fn in _mathtext.Parser._function_names}],
3730
["Binary operation symbols",
38-
4,
3931
_mathtext.Parser._binary_operators],
4032
["Relation symbols",
41-
4,
4233
_mathtext.Parser._relation_symbols],
4334
["Arrow symbols",
44-
4,
4535
_mathtext.Parser._arrow_symbols],
4636
["Dot symbols",
47-
4,
4837
r"""\cdots \vdots \ldots \ddots \adots \Colon \therefore \because""".split()],
4938
["Black-board characters",
50-
6,
5139
[fr"\{symbol}" for symbol in _mathtext_data.tex2uni
5240
if re.match(bb_pattern, symbol)]],
5341
["Script characters",
54-
6,
5542
[fr"\{symbol}" for symbol in _mathtext_data.tex2uni
5643
if re.match(scr_pattern, symbol)]],
5744
["Fraktur characters",
58-
6,
5945
[fr"\{symbol}" for symbol in _mathtext_data.tex2uni
6046
if re.match(frak_pattern, symbol)]],
6147
["Miscellaneous symbols",
62-
4,
6348
r"""\neg \infty \forall \wp \exists \bigstar \angle \partial
6449
\nexists \measuredangle \emptyset \sphericalangle \clubsuit
6550
\varnothing \complement \diamondsuit \imath \Finv \triangledown
@@ -73,6 +58,44 @@
7358
]
7459

7560

61+
def calculate_best_columns(
62+
symbols_list, max_line_length, min_columns, 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+
best_columns = min_columns
80+
# Calculate the best number of columns
81+
for columns in range(max_columns, min_columns - 1, -1):
82+
flag = False
83+
for i in range(0, len(symbols_list), columns):
84+
line_length = (
85+
sum(len(symbol) for symbol in symbols_list[i:i + columns])
86+
+columns - 1
87+
)
88+
# Check if the line length is less than or equal to max_line_length
89+
if line_length > max_line_length:
90+
flag = True
91+
break
92+
if not flag:
93+
best_columns = columns
94+
break
95+
max_cell_width = max(len(sym) for sym in symbols_list)
96+
return min(best_columns, len(symbols_list),max_line_length // max_cell_width)
97+
98+
7699
def run(state_machine):
77100

78101
def render_symbol(sym, ignore_variant=False):
@@ -86,15 +109,21 @@ def render_symbol(sym, ignore_variant=False):
86109
return f'\\{sym}' if sym in ('\\', '|', '+', '-', '*') else sym
87110

88111
lines = []
89-
for category, columns, syms in symbols:
112+
for category, syms in symbols:
90113
syms = sorted(syms,
91114
# Sort by Unicode and place variants immediately
92115
# after standard versions.
93116
key=lambda sym: (render_symbol(sym, ignore_variant=True),
94117
sym.startswith(r"\var")),
95118
reverse=(category == "Hebrew")) # Hebrew is rtl
96119
rendered_syms = [f"{render_symbol(sym)} ``{sym}``" for sym in syms]
97-
columns = min(columns, len(syms))
120+
max_line_length = 95
121+
columns = calculate_best_columns(
122+
rendered_syms,
123+
max_line_length=max_line_length,
124+
min_columns=4,
125+
max_columns=6
126+
)
98127
lines.append("**%s**" % category)
99128
lines.append('')
100129
max_width = max(map(len, rendered_syms))
@@ -128,13 +157,12 @@ def setup(app):
128157
metadata = {'parallel_read_safe': True, 'parallel_write_safe': True}
129158
return metadata
130159

131-
132160
if __name__ == "__main__":
133161
# Do some verification of the tables
134162

135163
print("SYMBOLS NOT IN STIX:")
136164
all_symbols = {}
137-
for category, columns, syms in symbols:
165+
for category, syms in symbols:
138166
if category == "Standard Function Names":
139167
continue
140168
for sym in syms:

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.