mirror of
https://github.com/python/cpython.git
synced 2025-08-14 22:01:08 +00:00
bpo-38022: IDLE: upgrade help.html to sphinx 2.x HTML5 output (GH-15664)
The HTML5 output from Sphinx 2.x adds '<p>' tags within list elements. Using a new prevtag attribute, ignore these instead of emitting unwanted '\n\n'.
Also stop looking for 'first' classes on tags (no longer present) and fix the bug of double-spacing instead of single spacing after <pre> blocks.
(cherry picked from commit 580bdb0ece
)
Co-authored-by: Tal Einat <taleinat+github@gmail.com>
This commit is contained in:
parent
54dac6c0f4
commit
952ea67289
2 changed files with 229 additions and 167 deletions
|
@ -62,6 +62,7 @@ class HelpParser(HTMLParser):
|
|||
self.simplelist = False # simple list (no double spacing)
|
||||
self.toc = [] # pair headers with text indexes for toc
|
||||
self.header = '' # text within header tags for toc
|
||||
self.prevtag = None # info about previous tag (was opener, tag)
|
||||
|
||||
def indent(self, amt=1):
|
||||
self.level += amt
|
||||
|
@ -78,8 +79,11 @@ class HelpParser(HTMLParser):
|
|||
self.show = True # start of main content
|
||||
elif tag == 'div' and class_ == 'sphinxsidebar':
|
||||
self.show = False # end of main content
|
||||
elif tag == 'p' and class_ != 'first':
|
||||
s = '\n\n'
|
||||
elif tag == 'p' and self.prevtag and not self.prevtag[0]:
|
||||
# begin a new block for <p> tags after a closed tag
|
||||
# avoid extra lines, e.g. after <pre> tags
|
||||
lastline = self.text.get('end-1c linestart', 'end-1c')
|
||||
s = '\n\n' if lastline and not lastline.isspace() else '\n'
|
||||
elif tag == 'span' and class_ == 'pre':
|
||||
self.chartags = 'pre'
|
||||
elif tag == 'span' and class_ == 'versionmodified':
|
||||
|
@ -120,6 +124,7 @@ class HelpParser(HTMLParser):
|
|||
self.tags = tag
|
||||
if self.show:
|
||||
self.text.insert('end', s, (self.tags, self.chartags))
|
||||
self.prevtag = (True, tag)
|
||||
|
||||
def handle_endtag(self, tag):
|
||||
"Handle endtags in help.html."
|
||||
|
@ -139,6 +144,7 @@ class HelpParser(HTMLParser):
|
|||
self.tags = ''
|
||||
elif tag in ['ul', 'dd', 'ol']:
|
||||
self.indent(amt=-1)
|
||||
self.prevtag = (False, tag)
|
||||
|
||||
def handle_data(self, data):
|
||||
"Handle date segments in help.html."
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue