From 34cd15d72756c9006eb00eb0d8d5b32f44ee46ef Mon Sep 17 00:00:00 2001 From: Tal Einat Date: Tue, 3 Sep 2019 23:52:58 +0300 Subject: [PATCH] bpo-38022: IDLE: upgrade help.html to sphinx 2.x HTML5 output (GH-15664) The HTML5 output from Sphinx 2.x adds '

' 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

 blocks.
---
 Lib/idlelib/help.html | 386 ++++++++++++++++++++++++------------------
 Lib/idlelib/help.py   |  10 +-
 2 files changed, 229 insertions(+), 167 deletions(-)

diff --git a/Lib/idlelib/help.html b/Lib/idlelib/help.html
index 91e66a4b9117b1..0754f2453baf66 100644
--- a/Lib/idlelib/help.html
+++ b/Lib/idlelib/help.html
@@ -1,11 +1,9 @@
 
-
+
 
 
   
-    
-    
+    
     IDLE — Python 3.9.0a0 documentation
     
     
@@ -108,17 +106,17 @@ 

Navigation

IDLE is Python’s Integrated Development and Learning Environment.

IDLE has the following features:

@@ -357,32 +421,26 @@

Key bindingsControl key on Windows and Unix and the Command key on macOS.

@@ -545,12 +601,12 @@

Command line usage -
  • If -, -c, or r is used, all arguments are placed in +
  • If -, -c, or r is used, all arguments are placed in sys.argv[1:...] and sys.argv[0] is set to '', '-c', or '-r'. No editor window is opened, even if that is the default -set in the Options dialog.

  • -
  • Otherwise, arguments are files opened for editing and -sys.argv reflects the arguments passed to IDLE itself.
  • +set in the Options dialog.

    +
  • Otherwise, arguments are files opened for editing and +sys.argv reflects the arguments passed to IDLE itself.

  • diff --git a/Lib/idlelib/help.py b/Lib/idlelib/help.py index e19d3615016f2f..ba2c6ec554812b 100644 --- a/Lib/idlelib/help.py +++ b/Lib/idlelib/help.py @@ -62,6 +62,7 @@ def __init__(self, text): 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 @@ def handle_starttag(self, tag, attrs): 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

    tags after a closed tag + # avoid extra lines, e.g. after

     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 @@ def handle_starttag(self, tag, attrs):
                 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 @@ def handle_endtag(self, tag):
                 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."