How to make UEdit support python?
Dave Berkeley
dave at rotwang.freeserve.co.uk
Fri Aug 31 13:10:13 EDT 2001
Formalin <formalin14 at email.com.cn> wrote in message
news:9mk7ur$hbv$1 at mail.cn99.com...
> How to make UEdit support python?
>
>
The following script can be used to allow pop-up Python language help from
within UltraEdit. It does Java, Javascript and PHP too. You will have to
acquire the docs and point the paths at them for this to work. Then you need
to configure a User Tool to invoke the help. I use this all the time.
Anyone got any C library help in HTML?
Dave Berkeley
----
#! Python
#
# Utility to access Python / Java API / PHP help from within UltraEdit.
#
# Needs to be invoked: python help.py %e %sel%
#
# Use ToolConfiguration:
# %e is the file extension
# %sel% is UltraEdit's currently selected text.
#
# Note :- this program relies on the format of help documents
# so could easily be broken by later version documents.
# Copyright (C) 1999 Dave Berkeley dave at rotwang.freeserve.co.uk
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA
import os, sys, string, re, getopt, webbrowser
# Point these at your Java API, Python etc. docs
#
java_root = r"C:\Program files\JDK1.3\docs\api\index-files"
python_root = r"C:\Program Files\Python20\Doc\lib"
python_index = "genindex.html"
php_root = r"D:\Mirror\Download\Docs\Php4"
php_index = 'index.html'
js_root = r'D:\mirror\docs.iplanet.com\docs\manuals\js\client\jsref'
js_index = r'bklast.htm'
temp_file = r"c:\Temp\temp.html"
#
#
#
class Base:
def __init__(self, lang, word):
self.lines = []
self.lang = lang
self.word = word
def add(self, line):
self.lines.append(line)
def add_tag(self, text, url):
self.add('<a href="%s"> %s </a><br>' % (url, text,))
def make_html(self):
html = "<HTML><BODY>\n<H2>%s help index for <B>%s</B></H2>" %
(self.lang, self.word,)
for line in self.lines:
html = html + line
html = html + "</BODY></HTML>\n"
return html
def get_file(self):
if self.word == None:
return self.get_path()
self.data = open(self.get_path(), "r").read()
match = self.word_re.sub(self.on_match, self.data)
if len(self.lines) == 0:
return self.get_path()
return self.get_html()
def get_html(self):
open(self.get_temp(), "w").write(self.make_html())
return self.get_temp()
def get_temp(self):
return temp_file
#
#
#
class Java(Base):
def __init__(self, word):
Base.__init__(self, "Java", word)
if word:
self.index = max(1, ord(word[0]) - ord('a') + 1)
else:
self.index = 1
if word != None:
re_text = "<DT>(<A HREF=\"(.*)\"><B>(%s.*)</B>.*)$" % word
self.word_re = re.compile(re_text, re.MULTILINE + re.IGNORECASE)
def on_match(self,match):
self.add(match.group(1))
i = match.end()+1
j = i
while self.data[j] != '\n':
j = j + 1
after = self.data[i:j]
self.add(after + "<BR>\n")
return ""
def get_path(self):
file = java_root + r"\index-%d.html"
return file % self.index
def get_temp(self):
return r"%s\temp.html" % java_root
#
#
#
class Python(Base):
def __init__(self, word):
Base.__init__(self, "Python", word)
if word != None:
re_text = "<a href='(.*)'>(%s.*)</a>" % word
self.word_re = re.compile(re_text, re.MULTILINE + re.IGNORECASE)
def on_match(self,match):
href, text = match.groups()
path = 'file://' + os.path.join(python_root, href)
self.add_tag(text, path)
return ""
def get_path(self):
return os.path.join(python_root, python_index)
#
#
#
class JavaScript(Base):
def __init__(self, word):
Base.__init__(self, "JavaScript", word)
if word != None:
re_text = '<a href="(.*)">(%s.*)</a>' % word
self.word_re = re.compile(re_text, re.MULTILINE + re.IGNORECASE)
def on_match(self,match):
href, text = match.groups()
path = os.path.join(js_root, href)
self.add_tag(text, path)
return ""
def get_path(self):
return os.path.join(js_root, js_index)
def get_temp(self):
return r"%s\temp.html" % js_root
#
#
#
class Php(Base):
file_re = re.compile(r'function\.(.*).html')
def __init__(self, word):
Base.__init__(self, "PHP", word)
files = []
for f in os.listdir(php_root):
if self.file_re.match(f):
files.append(f)
if not word:
self.path = self.default()
return
file = 'function.%s.html' % word.replace('_', '-')
if not file in files:
self.partial_match(word, files)
self.path = None
else:
self.path = os.path.join(php_root, file)
def default(self):
return os.path.join(php_root, php_index)
def partial_match(self, word, files):
for file in files:
match = self.file_re.match(file.replace('-', '_'))
if not match:
continue
fn = match.groups()[0]
if not fn.startswith(word):
continue
path = os.path.join(php_root, file)
self.add_tag(fn, path)
def get_path(self):
return self.path
def get_file(self):
if self.path:
return self.get_path()
if len(self.lines):
return self.get_html();
return self.default()
#
#
#
handlers = {
'.java' : Java,
'.py' : Python,
'.cgi' : Python,
'.cgp' : Python,
'.php' : Php,
'.js' : JavaScript,
}
def report_error(text):
file = open(temp_file, 'w')
file.write("<HTML><BODY><H2> Error invoking Help: %s
</h2></BODY></HTML>" % text)
file.close()
webbrowser.open_new(temp_file)
#
#
def help():
args = getopt.getopt(sys.argv[1:], '')[1]
if len(args) < 1:
report_error("No args")
return
ext = string.lower(args[0])
if len(args) < 2:
word = None
else:
word = string.lower(args[1])
if handlers.has_key(ext):
help = handlers[ext](word)
else:
report_error("Unknown extension '%s'" % ext);
return
webbrowser.open_new(help.get_file())
#
#
help()
More information about the Python-list
mailing list