[docutils:patches] #213 Change section handling to not rely on exceptions and reparsing

Günter Milde via Docutils-develop <[email protected]> Wed, 30 Jul 2025 09:27:34 -0000
Newsgroups gmane.text.docutils.devel
Message-ID </p/docutils/patches/213/3bcd2ec2ddf37432622a859003d29b7a1411c038.patches@docutils.p.sourceforge.net>
This is a multi-part message in MIME format.
--===============7348647378624468473==
Content-Type: multipart/related; boundary="===============2796494647852177700=="

This is a multi-part message in MIME format.
--===============2796494647852177700==
Content-Type: multipart/alternative; boundary="===============0308403134980078600=="
MIME-Version: 1.0

--===============0308403134980078600==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64

LSAqKnN0YXR1cyoqOiBvcGVuLWZpeGVkIC0tPiBjbG9zZWQtZml4ZWQKLSAqKkNvbW1lbnQqKjoK
ClRoZSBpc3N1ZSBpcyBmaXhlZCBpbiBEb2N1dGlscyAwLjIyIHJlbGVhc2VkIDIwMjUtMDctMjku
DQpUaGFuayB5b3UgZm9yIHRoZSBwYXRjaC4NCgoKCgotLS0KCioqW3BhdGNoZXM6IzIxM10gQ2hh
bmdlIHNlY3Rpb24gaGFuZGxpbmcgdG8gbm90IHJlbHkgb24gZXhjZXB0aW9ucyBhbmQgcmVwYXJz
aW5nKioKCioqU3RhdHVzOioqIGNsb3NlZC1maXhlZAoqKkdyb3VwOioqIE5vbmUKKipDcmVhdGVk
OioqIFdlZCBNYXIgMjYsIDIwMjUgMDc6NTcgUE0gVVRDIGJ5IEFybmUgU2tqw6ZyaG9sdAoqKkxh
c3QgVXBkYXRlZDoqKiBGcmkgQXByIDI1LCAyMDI1IDEwOjM3IEFNIFVUQwoqKk93bmVyOioqIG5v
Ym9keQoqKkF0dGFjaG1lbnRzOioqCgotIFtzZWN0aW9uLWhhbmRsaW5nLnBhdGNoXShodHRwczov
L3NvdXJjZWZvcmdlLm5ldC9wL2RvY3V0aWxzL3BhdGNoZXMvMjEzL2F0dGFjaG1lbnQvc2VjdGlv
bi1oYW5kbGluZy5wYXRjaCkgKDEzLjMga0I7IHRleHQveC1wYXRjaCkKCgpXaGlsZSB3YWl0aW5n
IGZvciByZXNwb25zZXMgdG8gYW4gZW1haWwgSSBzZW50IHRvIHRoZSAtdXNlcnMgSSBkZWNpZGVk
IHRvIGRpZyBmdXJ0aGVyIGludG8gdGhlIGlzc3VlIGFuZCBlbmRlZCB1cCBpbXBsZW1lbnRpbmcg
YSBmaXguIFRvIHJlY2FwIG15IGlzc3VlLCBJIHdhcyBoYXZpbmcgcHJvYmxlbXMgd2l0aCBhIGN1
c3RvbSBkaXJlY3RpdmUncyBuZXN0ZWQgcGFyc2Ugb2YgaXRzIGNvbnRlbnQgd2hlbiBzZWN0aW9u
IGhlYWRlcnMgd2VyZSB1c2VkLCBiZWNhdXNlIHRoZSBleGlzdGluZyBjb2RlIHRocm93cyBhbiBF
T0ZFcnJvciB1cCB0aGUgY2hhaW4gdG8gZmluZCB0aGUgY29ycmVjdCBwbGFjZSB0byBhdHRhY2gg
YSBuZXcgc2VjdGlvbi4NCg0KVGhlIHByb3Bvc2VkIHBhdGNoIGNoYW5nZXMgdGhpcyBieSBhZGRp
bmcgYW4gZXhwbGljaXQgc3RhY2sgb2Ygc2VjdGlvbnMgdG8gdGhlIG1lbW8gb2JqZWN0IGluc3Rl
YWQgb2YgdXNpbmcgdGhlIFB5dGhvbiBjYWxsIHN0YWNrLCBhbmQgY2hhbmdpbmcgUlNUU3RhdGUu
c2VjdGlvbigpIHRvIHVud2luZCB0aGlzIHN0YXRlIGluLXBsYWNlLCBpbnN0ZWFkIG9mIHVzaW5n
IGV4Y2VwdGlvbiB0aHJvd2luZyB0byBmaW5kIHRoZSByaWdodCBwbGFjZS4gSW4gZmFjdCwgSSB0
aGluayB0aGlzIGlzIHRoZSBraW5kIG9mIGltcGxlbWVudGF0aW9uIHN1Z2dlc3RlZCBhcyBhbiBh
bHRlcm5hdGl2ZSBpbiBhIGNvbW1lbnQgaW4gdGhlIGV4aXN0aW5nIGNvZGUuIFRoaXMgYWxzbyBs
ZXRzIHVzIGdldCByaWQgb2YgbWVtby5zZWN0aW9uX2J1YmJsZV91cF9rbHVkZ2UgYW5kIExpbmUu
ZW9mY2hlY2ssIHdoaWNoIG9ubHkgZXhpc3RlZCB0byBoYW5kbGUgdGhlIGV4Y2VwdGlvbnMuDQoN
CkluIGFkZGl0aW9uIHRvIHRoZSBjaGFuZ2VkIGNvZGUsIEkndmUgaGFkIHRvIG1ha2Ugc2l4IGNo
YW5nZXMgdG8gdGhlIHRlc3Qgc3VpdGUuDQoNCi0gVGhyZWUgZGlhZ25vc3RpY3MgaW4gdGVzdC9m
dW5jdGlvbmFsL2V4cGVjdGVkL3N0YW5kYWxvbmVfcnN0X3BzZXVkb3htbC50eHQgbm93IGhhdmUg
bGluZSBudW1iZXJzIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgcmF0aGVy
IHRoYW4gc29tZSBvdGhlciBlbGVtZW50LiBJIHRoaW5rIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIGlu
aXRpYXRlIGEgbmVzdGVkIHBhcnNlIGZvciBzZWN0aW9ucy4NCi0gVHdvIGRpYWdub3N0aWNzIGlu
IHRlc3QvdGVzdF9wYXJzZXJzL3Rlc3RfcnN0L3Rlc3RfdGFyZ2V0cy5weSBoYXZlIGRpZmZlcmVu
dCBsaW5lIG51bWJlcnMsIGluZGljYXRpbmcgdGhlIHNlY29uZCBjb25mbGljdGluZyBsYWJlbCwg
cmF0aGVyIHRoYW4gdGhlIGltcGxpY2l0IGxhYmVsIGdlbmVyYXRlZCBieSB0aGUgc2VjdGlvbi4g
SSB0aGluayB0aGUgcmVhc29uIGlzIHRoYXQgZHVlIHRvIHRoZSBleGNlcHRpb24gdGhyb3dpbmcg
YXBwcm9hY2gsIHRoZSBleGlzdGluZyBjb2RlIGhhbmRsZWQgdGhlIHNlY3Rpb24gbGFiZWwgbGF0
ZXIgdGhhbiB0aGUgb3RoZXIsIGV2ZW4gaWYgdGhlIHNlY3Rpb24gaXMgZWFybGllciBpbiB0aGUg
dGV4dC4NCi0gdGVzdC90ZXN0X3BhcnNlcnMvdGVzdF9yc3QvdGVzdF9zZWN0aW9uX2hlYWRlcnMu
cHkgaGFzIG9uZSBkaWFnbm9zdGljIG91dHB1dCBsZXNzLiBJIHRoaW5rIHRoaXMgZGlhZ25vc3Rp
YyBpcyBhIGR1cGxpY2F0ZSwgY2F1c2VkIGJ5IHRoZSByZXRocm93aW5nIG9mIHRoZSBleGNlcHRp
b24gZm9yIGJ1YmJsaW5nIHVwIHRoZSBzdGFjay4NCg0KCgoKLS0tCgpTZW50IGZyb20gc291cmNl
Zm9yZ2UubmV0IGJlY2F1c2UgZG9jdXRpbHMtZGV2ZWxvcEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQg
aXMgc3Vic2NyaWJlZCB0byBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL2RvY3V0aWxzL3BhdGNo
ZXMvCgpUbyB1bnN1YnNjcmliZSBmcm9tIGZ1cnRoZXIgbWVzc2FnZXMsIGEgcHJvamVjdCBhZG1p
biBjYW4gY2hhbmdlIHNldHRpbmdzIGF0IGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3AvZG9jdXRp
bHMvYWRtaW4vcGF0Y2hlcy9vcHRpb25zLiAgT3IsIGlmIHRoaXMgaXMgYSBtYWlsaW5nIGxpc3Qs
IHlvdSBjYW4gdW5zdWJzY3JpYmUgZnJvbSB0aGUgbWFpbGluZyBsaXN0Lg==

--===============0308403134980078600==
Content-Type: text/html; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64

PGRpdiBjbGFzcz0ibWFya2Rvd25fY29udGVudCI+PHVsPgo8bGk+PHN0cm9uZz5zdGF0dXM8L3N0
cm9uZz46IG9wZW4tZml4ZWQgLS0mZ3Q7IGNsb3NlZC1maXhlZDwvbGk+CjxsaT48c3Ryb25nPkNv
bW1lbnQ8L3N0cm9uZz46PC9saT4KPC91bD4KPHA+VGhlIGlzc3VlIGlzIGZpeGVkIGluIERvY3V0
aWxzIDAuMjIgcmVsZWFzZWQgMjAyNS0wNy0yOS48YnIvPgpUaGFuayB5b3UgZm9yIHRoZSBwYXRj
aC48L3A+Cjxoci8+CjxwPjxzdHJvbmc+PGEgY2xhc3M9ImFsaW5rIHN0cmlrZXRocm91Z2giIGhy
ZWY9Imh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3AvZG9jdXRpbHMvcGF0Y2hlcy8yMTMvIj5bcGF0
Y2hlczojMjEzXTwvYT4gQ2hhbmdlIHNlY3Rpb24gaGFuZGxpbmcgdG8gbm90IHJlbHkgb24gZXhj
ZXB0aW9ucyBhbmQgcmVwYXJzaW5nPC9zdHJvbmc+PC9wPgo8cD48c3Ryb25nPlN0YXR1czo8L3N0
cm9uZz4gY2xvc2VkLWZpeGVkPGJyLz4KPHN0cm9uZz5Hcm91cDo8L3N0cm9uZz4gTm9uZTxici8+
CjxzdHJvbmc+Q3JlYXRlZDo8L3N0cm9uZz4gV2VkIE1hciAyNiwgMjAyNSAwNzo1NyBQTSBVVEMg
YnkgQXJuZSBTa2rDpnJob2x0PGJyLz4KPHN0cm9uZz5MYXN0IFVwZGF0ZWQ6PC9zdHJvbmc+IEZy
aSBBcHIgMjUsIDIwMjUgMTA6MzcgQU0gVVRDPGJyLz4KPHN0cm9uZz5Pd25lcjo8L3N0cm9uZz4g
bm9ib2R5PGJyLz4KPHN0cm9uZz5BdHRhY2htZW50czo8L3N0cm9uZz48L3A+Cjx1bD4KPGxpPjxh
IGNsYXNzPSIiIGhyZWY9Imh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3AvZG9jdXRpbHMvcGF0Y2hl
cy8yMTMvYXR0YWNobWVudC9zZWN0aW9uLWhhbmRsaW5nLnBhdGNoIj5zZWN0aW9uLWhhbmRsaW5n
LnBhdGNoPC9hPiAoMTMuMyBrQjsgdGV4dC94LXBhdGNoKTwvbGk+CjwvdWw+CjxwPldoaWxlIHdh
aXRpbmcgZm9yIHJlc3BvbnNlcyB0byBhbiBlbWFpbCBJIHNlbnQgdG8gdGhlIC11c2VycyBJIGRl
Y2lkZWQgdG8gZGlnIGZ1cnRoZXIgaW50byB0aGUgaXNzdWUgYW5kIGVuZGVkIHVwIGltcGxlbWVu
dGluZyBhIGZpeC4gVG8gcmVjYXAgbXkgaXNzdWUsIEkgd2FzIGhhdmluZyBwcm9ibGVtcyB3aXRo
IGEgY3VzdG9tIGRpcmVjdGl2ZSdzIG5lc3RlZCBwYXJzZSBvZiBpdHMgY29udGVudCB3aGVuIHNl
Y3Rpb24gaGVhZGVycyB3ZXJlIHVzZWQsIGJlY2F1c2UgdGhlIGV4aXN0aW5nIGNvZGUgdGhyb3dz
IGFuIEVPRkVycm9yIHVwIHRoZSBjaGFpbiB0byBmaW5kIHRoZSBjb3JyZWN0IHBsYWNlIHRvIGF0
dGFjaCBhIG5ldyBzZWN0aW9uLjwvcD4KPHA+VGhlIHByb3Bvc2VkIHBhdGNoIGNoYW5nZXMgdGhp
cyBieSBhZGRpbmcgYW4gZXhwbGljaXQgc3RhY2sgb2Ygc2VjdGlvbnMgdG8gdGhlIG1lbW8gb2Jq
ZWN0IGluc3RlYWQgb2YgdXNpbmcgdGhlIFB5dGhvbiBjYWxsIHN0YWNrLCBhbmQgY2hhbmdpbmcg
UlNUU3RhdGUuc2VjdGlvbigpIHRvIHVud2luZCB0aGlzIHN0YXRlIGluLXBsYWNlLCBpbnN0ZWFk
IG9mIHVzaW5nIGV4Y2VwdGlvbiB0aHJvd2luZyB0byBmaW5kIHRoZSByaWdodCBwbGFjZS4gSW4g
ZmFjdCwgSSB0aGluayB0aGlzIGlzIHRoZSBraW5kIG9mIGltcGxlbWVudGF0aW9uIHN1Z2dlc3Rl
ZCBhcyBhbiBhbHRlcm5hdGl2ZSBpbiBhIGNvbW1lbnQgaW4gdGhlIGV4aXN0aW5nIGNvZGUuIFRo
aXMgYWxzbyBsZXRzIHVzIGdldCByaWQgb2YgbWVtby5zZWN0aW9uX2J1YmJsZV91cF9rbHVkZ2Ug
YW5kIExpbmUuZW9mY2hlY2ssIHdoaWNoIG9ubHkgZXhpc3RlZCB0byBoYW5kbGUgdGhlIGV4Y2Vw
dGlvbnMuPC9wPgo8cD5JbiBhZGRpdGlvbiB0byB0aGUgY2hhbmdlZCBjb2RlLCBJJ3ZlIGhhZCB0
byBtYWtlIHNpeCBjaGFuZ2VzIHRvIHRoZSB0ZXN0IHN1aXRlLjwvcD4KPHVsPgo8bGk+VGhyZWUg
ZGlhZ25vc3RpY3MgaW4gdGVzdC9mdW5jdGlvbmFsL2V4cGVjdGVkL3N0YW5kYWxvbmVfcnN0X3Bz
ZXVkb3htbC50eHQgbm93IGhhdmUgbGluZSBudW1iZXJzIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5p
bmcgb2YgdGhlIGZpbGUgcmF0aGVyIHRoYW4gc29tZSBvdGhlciBlbGVtZW50LiBJIHRoaW5rIGJl
Y2F1c2Ugd2Ugbm8gbG9uZ2VyIGluaXRpYXRlIGEgbmVzdGVkIHBhcnNlIGZvciBzZWN0aW9ucy48
L2xpPgo8bGk+VHdvIGRpYWdub3N0aWNzIGluIHRlc3QvdGVzdF9wYXJzZXJzL3Rlc3RfcnN0L3Rl
c3RfdGFyZ2V0cy5weSBoYXZlIGRpZmZlcmVudCBsaW5lIG51bWJlcnMsIGluZGljYXRpbmcgdGhl
IHNlY29uZCBjb25mbGljdGluZyBsYWJlbCwgcmF0aGVyIHRoYW4gdGhlIGltcGxpY2l0IGxhYmVs
IGdlbmVyYXRlZCBieSB0aGUgc2VjdGlvbi4gSSB0aGluayB0aGUgcmVhc29uIGlzIHRoYXQgZHVl
IHRvIHRoZSBleGNlcHRpb24gdGhyb3dpbmcgYXBwcm9hY2gsIHRoZSBleGlzdGluZyBjb2RlIGhh
bmRsZWQgdGhlIHNlY3Rpb24gbGFiZWwgbGF0ZXIgdGhhbiB0aGUgb3RoZXIsIGV2ZW4gaWYgdGhl
IHNlY3Rpb24gaXMgZWFybGllciBpbiB0aGUgdGV4dC48L2xpPgo8bGk+dGVzdC90ZXN0X3BhcnNl
cnMvdGVzdF9yc3QvdGVzdF9zZWN0aW9uX2hlYWRlcnMucHkgaGFzIG9uZSBkaWFnbm9zdGljIG91
dHB1dCBsZXNzLiBJIHRoaW5rIHRoaXMgZGlhZ25vc3RpYyBpcyBhIGR1cGxpY2F0ZSwgY2F1c2Vk
IGJ5IHRoZSByZXRocm93aW5nIG9mIHRoZSBleGNlcHRpb24gZm9yIGJ1YmJsaW5nIHVwIHRoZSBz
dGFjay48L2xpPgo8L3VsPgo8aHIvPgo8cD5TZW50IGZyb20gc291cmNlZm9yZ2UubmV0IGJlY2F1
c2UgZG9jdXRpbHMtZGV2ZWxvcEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgaXMgc3Vic2NyaWJlZCB0
byA8YSBocmVmPSJodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL2RvY3V0aWxzL3BhdGNoZXMvIj5o
dHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL2RvY3V0aWxzL3BhdGNoZXMvPC9hPjwvcD4KPHA+VG8g
dW5zdWJzY3JpYmUgZnJvbSBmdXJ0aGVyIG1lc3NhZ2VzLCBhIHByb2plY3QgYWRtaW4gY2FuIGNo
YW5nZSBzZXR0aW5ncyBhdCA8YSBocmVmPSJodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL2RvY3V0
aWxzL2FkbWluL3BhdGNoZXMvb3B0aW9ucy4iPmh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3AvZG9j
dXRpbHMvYWRtaW4vcGF0Y2hlcy9vcHRpb25zLjwvYT4gIE9yLCBpZiB0aGlzIGlzIGEgbWFpbGlu
ZyBsaXN0LCB5b3UgY2FuIHVuc3Vic2NyaWJlIGZyb20gdGhlIG1haWxpbmcgbGlzdC48L3A+PC9k
aXY+

--===============0308403134980078600==--

--===============2796494647852177700==--


--===============7348647378624468473==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


--===============7348647378624468473==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline