11import copy
2- from sphinx .environment .collectors .toctree import TocTreeCollector
32import gc
4- from sphinx import addnodes as sphinxnodes
3+
54from docutils import nodes
5+ from sphinx import addnodes as sphinxnodes
6+ from sphinx .environment .collectors .toctree import TocTreeCollector
67
78
89def disable_builtin_toctree_collector (app ):
@@ -31,7 +32,9 @@ def __init__(self, *args, **kwargs):
3132
3233 def assign_section_numbers (self , env ):
3334 # First, call the original assign_section_numbers to get the default behavior
34- result = super ().assign_section_numbers (env ) # needed to maintain functionality
35+ result = super ().assign_section_numbers (
36+ env
37+ ) # needed to maintain functionality
3538
3639 # store current titles for mapping
3740 env .titles_old = copy .deepcopy (env .titles )
@@ -79,7 +82,9 @@ def assign_section_numbers(self, env):
7982 new_secnumber = self .__renumber (
8083 env .titles [ref ]["secnumber" ], style
8184 )
82- env .titles [ref ]["secnumber" ] = copy .deepcopy (new_secnumber )
85+ env .titles [ref ]["secnumber" ] = copy .deepcopy (
86+ new_secnumber
87+ )
8388 if ref in env .tocs :
8489 self .__replace_toc (env , ref , env .tocs [ref ], style )
8590
@@ -102,21 +107,26 @@ def assign_section_numbers(self, env):
102107 # same length, so probably same numbering depth, so compare one level up
103108 if secnumber [:- 1 ] == new_secnumber [:- 1 ]:
104109 continue # skip already updated
105- # if this point is reached for any anchor, we need to update this anchors secnumber
110+ # if this point is reached for any anchor,
111+ # we need to update this anchors secnumber
106112 # to the new secnumber for the overlapping part
107113 update_secnumber = list (secnumber ) # make a copy
108114 for i in range (renumber_depth ):
109115 if (
110116 secnumber [i ] == old_secnumber [i ]
111117 ): # only if the old matches the current
112118 update_secnumber [i ] = new_secnumber [i ]
113- env .toc_secnumbers [doc ][anchor ] = copy .deepcopy (update_secnumber )
119+ env .toc_secnumbers [doc ][anchor ] = copy .deepcopy (
120+ update_secnumber
121+ )
114122
115123 # now iterate over env.toc_secnumbers to ensure all secnumbers are updated
116124 # at the same time
117125 for docname in env .toc_secnumbers :
118126 # get the new and old secnumbers for this docname
119- old_secnumber = env .titles_old .get (docname , {}).get ("secnumber" , None )
127+ old_secnumber = env .titles_old .get (docname , {}).get (
128+ "secnumber" , None
129+ )
120130 new_secnumber = env .titles [docname ].get ("secnumber" , None )
121131 renumber_depth = len (new_secnumber ) if new_secnumber else 0
122132 # iterate over all anchors in this docname
@@ -137,23 +147,30 @@ def assign_section_numbers(self, env):
137147 secnumber [i ] == old_secnumber [i ]
138148 ): # only if the old matches the current
139149 update_secnumber [i ] = new_secnumber [i ]
140- env .toc_secnumbers [doc ][anchor ] = copy .deepcopy (update_secnumber )
150+ env .toc_secnumbers [doc ][anchor ] = copy .deepcopy (
151+ update_secnumber
152+ )
141153
142- # Now, convert all secnumbers in toc_secnumbers to tuples to avoid issues with other steps in the algorithm
154+ # Now, convert all secnumbers in toc_secnumbers to tuples
155+ # to avoid issues with other steps in the algorithm
143156 for docname in env .toc_secnumbers :
144157 for anchorname , secnumber in env .toc_secnumbers [docname ].items ():
145158 if not secnumber :
146159 continue
147160 secnumber = (* secnumber ,) # convert to tuple
148- env .toc_secnumbers [docname ][anchorname ] = copy .deepcopy (secnumber )
161+ env .toc_secnumbers [docname ][anchorname ] = copy .deepcopy (
162+ secnumber
163+ )
149164 return result
150165
151166 def __renumber (self , number_set , style_set ):
152167 if not number_set or not style_set :
153168 return number_set
154169
155170 if not isinstance (style_set , list ):
156- style_set = [style_set ] # if not multiple styles are given, convert to list
171+ style_set = [
172+ style_set
173+ ] # if not multiple styles are given, convert to list
157174 # for each style, convert the corresponding number, where only the first number
158175 # is rebased, the rest are kept as is, but converted.
159176 # convert the first number to the new style
@@ -191,7 +208,21 @@ def __renumber(self, number_set, style_set):
191208 def __to_roman (self , n ):
192209 """Convert an integer to a Roman numeral."""
193210 val = [1000 , 900 , 500 , 400 , 100 , 90 , 50 , 40 , 10 , 9 , 5 , 4 , 1 ]
194- syms = ["M" , "CM" , "D" , "CD" , "C" , "XC" , "L" , "XL" , "X" , "IX" , "V" , "IV" , "I" ]
211+ syms = [
212+ "M" ,
213+ "CM" ,
214+ "D" ,
215+ "CD" ,
216+ "C" ,
217+ "XC" ,
218+ "L" ,
219+ "XL" ,
220+ "X" ,
221+ "IX" ,
222+ "V" ,
223+ "IV" ,
224+ "I" ,
225+ ]
195226 roman_num = ""
196227 i = 0
197228 while n > 0 :
@@ -227,7 +258,9 @@ def __fix_nested_toc(self, env, toctree, style):
227258 for _ , ref in toctree ["entries" ]:
228259 if "secnumber" not in env .titles [ref ]:
229260 continue
230- new_secnumber = self .__renumber (env .titles [ref ]["secnumber" ], style )
261+ new_secnumber = self .__renumber (
262+ env .titles [ref ]["secnumber" ], style
263+ )
231264 env .titles [ref ]["secnumber" ] = copy .deepcopy (new_secnumber )
232265 if ref in env .tocs :
233266 self .__replace_toc (env , ref , env .tocs [ref ], style )
0 commit comments