How to make UEdit support python?

Dave Berkeley dave at rotwang.freeserve.co.uk
Fri Aug 31 19:10:13 CEST 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