Issue #16893: Add idlelib.help.copy_strip() to copy-rstrip Doc/.../idle.html.
Change destination to help.html.  Adjust NEWS entries.
diff --git a/Lib/idlelib/help.py b/Lib/idlelib/help.py
index 7d48574..78e5775 100644
--- a/Lib/idlelib/help.py
+++ b/Lib/idlelib/help.py
@@ -1,23 +1,26 @@
-"""
-help.py implements the Idle help menu and is subject to change.
+""" help.py: Implement the Idle help menu.
+Contents are subject to revision at any time, without notice.
 
-The contents are subject to revision at any time, without notice.
 
 Help => About IDLE: diplay About Idle dialog
 
 <to be moved here from aboutDialog.py>
 
-Help => IDLE Help: display idle.html with proper formatting
 
-HelpParser - Parses idle.html generated from idle.rst by Sphinx
-and renders to tk Text.
+Help => IDLE Help: Display help.html with proper formatting.
+Doc/library/idle.rst (Sphinx)=> Doc/build/html/library/idle.html
+(help.copy_strip)=> Lib/idlelib/help.html
 
-HelpText - Displays formatted idle.html.
+HelpParser - Parse help.html and and render to tk Text.
 
-HelpFrame - Contains text, scrollbar, and table-of-contents.
+HelpText - Display formatted help.html.
+
+HelpFrame - Contain text, scrollbar, and table-of-contents.
 (This will be needed for display in a future tabbed window.)
 
-HelpWindow - Display idleframe in a standalone window.
+HelpWindow - Display HelpFrame in a standalone window.
+
+copy_strip - Copy idle.html to help.html, rstripping each line.
 
 show_idlehelp - Create HelpWindow.  Called in EditorWindow.help_dialog.
 """
@@ -36,7 +39,7 @@
 ## IDLE Help ##
 
 class HelpParser(HTMLParser):
-    """Render idle.html generated by Sphinx from idle.rst.
+    """Render help.html into a text widget.
 
     The overridden handle_xyz methods handle a subset of html tags.
     The supplied text should have the needed tag configurations.
@@ -62,7 +65,7 @@
         self.tags = '' if self.level == 0 else 'l'+str(self.level)
 
     def handle_starttag(self, tag, attrs):
-        "Handle starttags in idle.html."
+        "Handle starttags in help.html."
         class_ = ''
         for a, v in attrs:
             if a == 'class':
@@ -120,7 +123,7 @@
             self.text.insert('end', s, self.tags)
 
     def handle_endtag(self, tag):
-        "Handle endtags in idle.html."
+        "Handle endtags in help.html."
         if tag in ['h1', 'h2', 'h3', 'span', 'em']:
             self.indent(0)  # clear tag, reset indent
             if self.show and tag in ['h1', 'h2', 'h3']:
@@ -136,7 +139,7 @@
             self.indent(amt=-1)
 
     def handle_data(self, data):
-        "Handle date segments in idle.html."
+        "Handle date segments in help.html."
         if self.show and not self.hdrlink:
             d = data if self.pre else data.replace('\n', ' ')
             if self.tags == 'h1':
@@ -152,7 +155,7 @@
 
 
 class HelpText(Text):
-    "Display idle.html."
+    "Display help.html."
     def __init__(self, parent, filename):
         "Configure tags and feed file to parser."
         Text.__init__(self, parent, wrap='word', highlightthickness=0,
@@ -191,6 +194,7 @@
 
 
 class HelpFrame(Frame):
+    "Display html text, scrollbar, and toc."
     def __init__(self, parent, filename):
         Frame.__init__(self, parent)
         text = HelpText(self, filename)
@@ -205,6 +209,7 @@
         toc.grid(column=0, row=0, sticky='nw')
 
     def contents_widget(self, text):
+        "Create table of contents."
         toc = Menubutton(self, text='TOC')
         drop = Menu(toc, tearoff=False)
         for tag, lbl in text.parser.contents:
@@ -214,7 +219,7 @@
 
 
 class HelpWindow(Toplevel):
-
+    "Display frame with rendered html."
     def __init__(self, parent, filename, title):
         Toplevel.__init__(self, parent)
         self.wm_title(title)
@@ -224,11 +229,23 @@
         self.grid_rowconfigure(0, weight=1)
 
 
+def copy_strip():
+    "Copy idle.html to idlelib/help.html, stripping trailing whitespace."
+    src = join(abspath(dirname(dirname(dirname(__file__)))),
+               'Doc', 'build', 'html', 'library', 'idle.html')
+    dst = join(abspath(dirname(__file__)), 'help.html')
+    with open(src, 'r') as inn,\
+         open(dst, 'w') as out:
+        for line in inn:
+            out.write(line.rstrip() + '\n')
+    print('idle.html copied to help.html')
+
 def show_idlehelp(parent):
-    filename = join(abspath(dirname(__file__)), 'idle.html')
+    "Create HelpWindow; called from Idle Help event handler."
+    filename = join(abspath(dirname(__file__)), 'help.html')
     if not isfile(filename):
-        dirpath = join(abspath(dirname(dirname(dirname(__file__)))),
-                   'Doc', 'build', 'html', 'library')
+        # try copy_strip, present message
+        return 
     HelpWindow(parent, filename, 'IDLE Help')
 
 if __name__ == '__main__':