You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ORPA-pyOpenRPA/WPy32-3720/python-3.7.2/Lib/site-packages/idlexlib/extensions/IDLE2HTML.py

154 lines
6.6 KiB

# IDLEX EXTENSION
## """
## IDLE2HTML - IDLE extension
## saves the contents of the editwindow (file or shell)
## to a html file using css styles
##
## creator: d2m <michael@d2m.at>
## 0.1/2006-07-22: initial revision
## 0.2/2007-06-14: added styles for BODY
## thanks to Tal Einat who pointed out a problem
## with non Black-on-White color schemes
## removed Selection highlightning
## added ERROR highlightning
##
## todo: check for valid css color values
## use elementtree for html generation
## enable Selection highlightning
##
## PSF LICENSE AGREEMENT FOR PYTHON 2.7.2
##
## 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and
## the Individual or Organization ("Licensee") accessing and otherwise using Python 2.7.2
## software in source or binary form and its associated documentation.
## 2. Subject to the terms and conditions of this License Agreement, PSF hereby grants
## Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test,
## perform and/or display publicly, prepare derivative works, distribute, and otherwise use
## Python 2.7.2 alone or in any derivative version, provided, however, that PSF's License
## Agreement and PSF's notice of copyright, i.e., "Copyright (C) 2001-2010 Python Software
## Foundation; All Rights Reserved" are retained in Python 2.7.2 alone or in any derivative
## version prepared by Licensee.
## 3. In the event Licensee prepares a derivative work that is based on or incorporates
## Python 2.7.2 or any part thereof, and wants to make the derivative work available to
## others as provided herein, then Licensee hereby agrees to include in any such work a brief
## summary of the changes made to Python 2.7.2.
## 4. PSF is making Python 2.7.2 available to Licensee on an "AS IS" basis. PSF MAKES NO
## REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION,
## PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
## FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.7.2 WILL NOT INFRINGE ANY THIRD
## PARTY RIGHTS.
## 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 2.7.2 FOR ANY
## INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING,
## DISTRIBUTING, OR OTHERWISE USING PYTHON 2.7.2, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED
## OF THE POSSIBILITY THEREOF.
## 6. This License Agreement will automatically terminate upon a material breach of its terms
## and conditions.
## 7. Nothing in this License Agreement shall be deemed to create any relationship of agency,
## partnership, or joint venture between PSF and Licensee. This License Agreement does not
## grant permission to use PSF trademarks or trade name in a trademark sense to endorse or
## promote products or services of Licensee, or any third party.
## 8. By copying, installing or otherwise using Python 2.7.2, Licensee agrees to be bound by
## the terms and conditions of this License Agreement.
##
##
##
## License: Python Software Foundation License
##
## Modified to work with idlex by Roger D. Serwy
## October 2011
##
## Some minor bug fixes and feature enhancements:
## - Check if user clicked "Cancel" on saveas dialog.
## - Save to .html by default instead of .htm (a relic from 8.3 filename days)
## - Save dialog has a proper title
## - Modified to work with Python 3
##
## """
config_extension_def = """
[IDLE2HTML]
enable=1
[IDLE2HTML_cfgBindings]
idle2html=
"""
__version__ = '0.2'
import sys
if sys.version < '3':
import Tkinter
import tkFileDialog
else:
import tkinter as Tkinter
import tkinter.filedialog as tkFileDialog
import cgi
class IDLE2HTML(object):
menudefs=[('options',[('Export to HTML', '<<idle2html>>')])]
def __init__(self,editwin):
self.editwin=editwin
self.text=editwin.text
def idle2html_event(self, event=None):
filetypes = [
("All HTML files", "*.html *.htm", "TEXT"),
("All files", "*"),
]
filename=tkFileDialog.SaveAs(master=self.text,
filetypes=filetypes,
title="Export to HTML",
).show()
if filename:
f=open(filename,'w')
f.write(self.idle2html())
f.close()
def idle2html(self):
"""format tags 2 html
"""
out=['<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" \
"http://www.w3.org/TR/2002/REC-xhtml1-20020801/DTD/xhtml1-transitional.dtd">\n']
out.append('<html>\n<head>\n<title>IDLE2HTML</title>\n')
out.append('<meta name="generator" content="IDLE2HTML - IDLE extension (%s)" />\n' % __version__)
out.append('<style type="text/css">\n')
out.append('%s {color: %s; background-color: %s;}\n' % (
'BODY',
self.text.cget('foreground'),
self.text.cget('background'),
)
)
for tagname in self.text.tag_names():
fg=self.text.tag_cget(tagname,'foreground')
bg=self.text.tag_cget(tagname,'background')
if fg and bg and tagname.lower() != 'sel':
out.append('.%s {color: %s; background-color: %s;}\n' % (
tagname,
fg,
bg,
)
)
out.append('</style>\n')
out.append('</head>\n<body>\n<pre>')
inside_error=0
for tagname,content,dummy in self.text.dump('1.0',self.text.index('end')):
if tagname=='tagon' and not (content.upper() in ('SYNC','TODO','SEL')):
if not inside_error:
out.append('<span class="%s">' % content)
if content.upper() == 'ERROR':
inside_error=1
if tagname=='text':
out.append(cgi.escape(content))
if tagname=='tagoff' and not (content.upper() in ('SYNC','TODO','SEL')):
if content.upper() == 'ERROR':
inside_error=0
if not inside_error:
out.append('</span>')
out.append('</pre>\n</body>\n</html>')
return ''.join(out)