New Features: In Tab-View mode, Ctrl-number will take the user to
    the numbered tab view.  Modified files now show an '*' astrisk in
    the view title.  Debugger framework can now support PHP debugging.
    Not important for python development, but at least that means the
    debugger framework is more generalized.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38852 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
	
		
			
				
	
	
		
			426 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			426 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#----------------------------------------------------------------------------
 | 
						|
# Name:         PerlEditor.py
 | 
						|
# Purpose:      Perl Script Editor for pydocview tbat uses the Styled Text Control
 | 
						|
#
 | 
						|
# Author:       Morgan Hua
 | 
						|
#
 | 
						|
# Created:      1/5/04
 | 
						|
# CVS-ID:       $Id$
 | 
						|
# Copyright:    (c) 2005 ActiveGrid, Inc.
 | 
						|
# License:      wxWindows License
 | 
						|
#----------------------------------------------------------------------------
 | 
						|
 | 
						|
import wx
 | 
						|
import string
 | 
						|
import STCTextEditor
 | 
						|
import CodeEditor
 | 
						|
 | 
						|
 | 
						|
class PerlDocument(CodeEditor.CodeDocument):
 | 
						|
 | 
						|
    pass
 | 
						|
 | 
						|
 | 
						|
class PerlView(CodeEditor.CodeView):
 | 
						|
 | 
						|
 | 
						|
    def GetCtrlClass(self):
 | 
						|
        """ Used in split window to instantiate new instances """
 | 
						|
        return PerlCtrl
 | 
						|
 | 
						|
 | 
						|
    def GetAutoCompleteHint(self):
 | 
						|
        pos = self.GetCtrl().GetCurrentPos()
 | 
						|
        if pos == 0:
 | 
						|
            return None, None
 | 
						|
            
 | 
						|
        validLetters = string.letters + string.digits + '_/'
 | 
						|
        word = ''
 | 
						|
        while (True):
 | 
						|
            pos = pos - 1
 | 
						|
            if pos < 0:
 | 
						|
                break
 | 
						|
            char = chr(self.GetCtrl().GetCharAt(pos))
 | 
						|
            if char not in validLetters:
 | 
						|
                break
 | 
						|
            word = char + word
 | 
						|
            
 | 
						|
        return None, word
 | 
						|
 | 
						|
 | 
						|
    def GetAutoCompleteDefaultKeywords(self):
 | 
						|
        return PERLKEYWORDS
 | 
						|
 | 
						|
 | 
						|
class PerlService(CodeEditor.CodeService):
 | 
						|
 | 
						|
 | 
						|
    def __init__(self):
 | 
						|
        CodeEditor.CodeService.__init__(self)
 | 
						|
 | 
						|
 | 
						|
class PerlCtrl(CodeEditor.CodeCtrl):
 | 
						|
 | 
						|
 | 
						|
    def __init__(self, parent, id=-1, style=wx.NO_FULL_REPAINT_ON_RESIZE):
 | 
						|
        CodeEditor.CodeCtrl.__init__(self, parent, id, style)
 | 
						|
        self.SetLexer(wx.stc.STC_LEX_PERL)
 | 
						|
        self.SetKeyWords(0, string.join(PERLKEYWORDS))
 | 
						|
 | 
						|
 | 
						|
    def CanWordWrap(self):
 | 
						|
        return True
 | 
						|
 | 
						|
 | 
						|
    def SetViewDefaults(self):
 | 
						|
        CodeEditor.CodeCtrl.SetViewDefaults(self, configPrefix = "Perl", hasWordWrap = True, hasTabs = True, hasFolding=True)
 | 
						|
 | 
						|
 | 
						|
    def GetFontAndColorFromConfig(self):
 | 
						|
        return CodeEditor.CodeCtrl.GetFontAndColorFromConfig(self, configPrefix = "Perl")
 | 
						|
 | 
						|
 | 
						|
    def UpdateStyles(self):
 | 
						|
        CodeEditor.CodeCtrl.UpdateStyles(self)
 | 
						|
        
 | 
						|
        if not self.GetFont():
 | 
						|
            return
 | 
						|
 | 
						|
        faces = { 'font' : self.GetFont().GetFaceName(),
 | 
						|
                  'size' : self.GetFont().GetPointSize(),
 | 
						|
                  'size2': self.GetFont().GetPointSize() - 2,
 | 
						|
                  'color' : "%02x%02x%02x" % (self.GetFontColor().Red(), self.GetFontColor().Green(), self.GetFontColor().Blue())
 | 
						|
                  }
 | 
						|
 | 
						|
        # Perl Styles
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_DEFAULT, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_COMMENTLINE, "face:%(font)s,fore:#007F00,italic,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_NUMBER, "face:%(font)s,fore:#007F7F,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_CHARACTER, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_STRING, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_STRING_Q, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_STRING_QQ, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_STRING_QX, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_STRING_QR, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_STRING_QW, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_BACKTICKS, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_WORD, "face:%(font)s,fore:#00007F,bold,size:%(size)d" % faces) # keyword
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_IDENTIFIER, "face:%(font)s,fore:#%(color)s,face:%(font)s,size:%(size)d" % faces)
 | 
						|
 | 
						|
        # Default
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_ARRAY, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_DATASECTION, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_ERROR, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_HASH, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_HERE_DELIM, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_HERE_Q, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_HERE_QQ, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_HERE_QX, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_LONGQUOTE, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_OPERATOR, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_POD, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_PREPROCESSOR, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_PUNCTUATION, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_REGEX, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_REGSUBST, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_SCALAR, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
        self.StyleSetSpec(wx.stc.STC_PL_SYMBOLTABLE, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
 | 
						|
 | 
						|
 | 
						|
class PerlOptionsPanel(STCTextEditor.TextOptionsPanel):
 | 
						|
 | 
						|
    def __init__(self, parent, id):
 | 
						|
        STCTextEditor.TextOptionsPanel.__init__(self, parent, id, configPrefix = "Perl", label = "Perl", hasWordWrap = True, hasTabs = True, hasFolding=True)
 | 
						|
 | 
						|
 | 
						|
    def GetIcon(self):
 | 
						|
        return getPerlIcon()
 | 
						|
 | 
						|
 | 
						|
PERLKEYWORDS = [
 | 
						|
        "abs",
 | 
						|
        "accept",
 | 
						|
        "alarm",
 | 
						|
        "atan2",
 | 
						|
        "bind",
 | 
						|
        "binmode",
 | 
						|
        "bless",
 | 
						|
        "caller",
 | 
						|
        "chdir",
 | 
						|
        "chmod",
 | 
						|
        "chomp",
 | 
						|
        "chop",
 | 
						|
        "chown",
 | 
						|
        "chr",
 | 
						|
        "chroot",
 | 
						|
        "close",
 | 
						|
        "closedir",
 | 
						|
        "connect",
 | 
						|
        "continue",
 | 
						|
        "cos",
 | 
						|
        "crypt",
 | 
						|
        "dbmclose",
 | 
						|
        "dbmopen",
 | 
						|
        "defined",
 | 
						|
        "delete",
 | 
						|
        "die",
 | 
						|
        "do",
 | 
						|
        "dump",
 | 
						|
        "each",
 | 
						|
        "endgrent",
 | 
						|
        "endhostent",
 | 
						|
        "endnetent",
 | 
						|
        "endprotoent",
 | 
						|
        "endpwent",
 | 
						|
        "endservent",
 | 
						|
        "eof",
 | 
						|
        "eval",
 | 
						|
        "exec",
 | 
						|
        "exists",
 | 
						|
        "exit",
 | 
						|
        "exp",
 | 
						|
        "fcntl",
 | 
						|
        "fileno",
 | 
						|
        "flock",
 | 
						|
        "fork",
 | 
						|
        "format",
 | 
						|
        "formline",
 | 
						|
        "getc",
 | 
						|
        "getgrent",
 | 
						|
        "getgrgid",
 | 
						|
        "getgrnam",
 | 
						|
        "gethostbyaddr",
 | 
						|
        "gethostbyname",
 | 
						|
        "gethostent",
 | 
						|
        "getlogin",
 | 
						|
        "getnetbyaddr",
 | 
						|
        "getnetbyname",
 | 
						|
        "getnetent",
 | 
						|
        "getpeername",
 | 
						|
        "getpgrp",
 | 
						|
        "getppid",
 | 
						|
        "getpriority",
 | 
						|
        "getprotobyname",
 | 
						|
        "getprotobynumber",
 | 
						|
        "getprotoent",
 | 
						|
        "getpwent",
 | 
						|
        "getpwnam",
 | 
						|
        "getpwuid",
 | 
						|
        "getservbyname",
 | 
						|
        "getservbyport",
 | 
						|
        "getservent",
 | 
						|
        "getsockname",
 | 
						|
        "getsockopt",
 | 
						|
        "glob",
 | 
						|
        "gmtime",
 | 
						|
        "goto",
 | 
						|
        "grep",
 | 
						|
        "hex",
 | 
						|
        "import",
 | 
						|
        "index",
 | 
						|
        "int",
 | 
						|
        "ioctl",
 | 
						|
        "join",
 | 
						|
        "keys",
 | 
						|
        "kill",
 | 
						|
        "last",
 | 
						|
        "lc",
 | 
						|
        "lcfirst",
 | 
						|
        "length",
 | 
						|
        "link",
 | 
						|
        "listen",
 | 
						|
        "local",
 | 
						|
        "localtime",
 | 
						|
        "log",
 | 
						|
        "lstat",
 | 
						|
        "m//",
 | 
						|
        "map",
 | 
						|
        "mkdir",
 | 
						|
        "msgctl",
 | 
						|
        "msgget",
 | 
						|
        "msgrcv",
 | 
						|
        "msgsnd",
 | 
						|
        "my",
 | 
						|
        "next",
 | 
						|
        "no",
 | 
						|
        "oct",
 | 
						|
        "open",
 | 
						|
        "opendir",
 | 
						|
        "ord",
 | 
						|
        "pack",
 | 
						|
        "package",
 | 
						|
        "pipe",
 | 
						|
        "pop",
 | 
						|
        "pos",
 | 
						|
        "print",
 | 
						|
        "printf",
 | 
						|
        "prototype",
 | 
						|
        "push",
 | 
						|
        "q/STRING/",
 | 
						|
        "qq/STRING/",
 | 
						|
        "quotemeta",
 | 
						|
        "qw",
 | 
						|
        "qw/STRING/",
 | 
						|
        "qx",
 | 
						|
        "qx/STRING/",
 | 
						|
        "rand",
 | 
						|
        "read",
 | 
						|
        "readdir",
 | 
						|
        "readline",
 | 
						|
        "readlink",
 | 
						|
        "readpipe",
 | 
						|
        "recv",
 | 
						|
        "redo",
 | 
						|
        "ref",
 | 
						|
        "rename",
 | 
						|
        "require",
 | 
						|
        "reset",
 | 
						|
        "return",
 | 
						|
        "reverse",
 | 
						|
        "rewinddir",
 | 
						|
        "rindex",
 | 
						|
        "rmdir",
 | 
						|
        "s///",
 | 
						|
        "scalar",
 | 
						|
        "seek",
 | 
						|
        "seekdir",
 | 
						|
        "select",
 | 
						|
        "semctl",
 | 
						|
        "semget",
 | 
						|
        "semop",
 | 
						|
        "send",
 | 
						|
        "setgrent",
 | 
						|
        "sethostent",
 | 
						|
        "setnetent",
 | 
						|
        "setpgrp",
 | 
						|
        "setpriority",
 | 
						|
        "setprotoent",
 | 
						|
        "setpwent",
 | 
						|
        "setservent",
 | 
						|
        "setsockopt",
 | 
						|
        "shift",
 | 
						|
        "shmctl",
 | 
						|
        "shmget",
 | 
						|
        "shmread",
 | 
						|
        "shmwrite",
 | 
						|
        "shutdown",
 | 
						|
        "sin",
 | 
						|
        "sleep",
 | 
						|
        "socket",
 | 
						|
        "socketpair",
 | 
						|
        "sort",
 | 
						|
        "splice",
 | 
						|
        "split",
 | 
						|
        "sprintf",
 | 
						|
        "sqrt",
 | 
						|
        "srand",
 | 
						|
        "stat",
 | 
						|
        "study",
 | 
						|
        "sub",
 | 
						|
        "substr",
 | 
						|
        "symlink",
 | 
						|
        "syscall",
 | 
						|
        "sysopen",
 | 
						|
        "sysread",
 | 
						|
        "sysseek",
 | 
						|
        "system",
 | 
						|
        "syswrite",
 | 
						|
        "tell",
 | 
						|
        "telldir",
 | 
						|
        "tie",
 | 
						|
        "tied",
 | 
						|
        "times",
 | 
						|
        "tr///",
 | 
						|
        "truncate",
 | 
						|
        "uc",
 | 
						|
        "ucfirst",
 | 
						|
        "umask",
 | 
						|
        "undef",
 | 
						|
        "unlink",
 | 
						|
        "unpack",
 | 
						|
        "unshift",
 | 
						|
        "untie",
 | 
						|
        "use",
 | 
						|
        "utime",
 | 
						|
        "values",
 | 
						|
        "vec",
 | 
						|
        "wait",
 | 
						|
        "waitpid",
 | 
						|
        "wantarray",
 | 
						|
        "warn",
 | 
						|
        "write",
 | 
						|
        "y///",
 | 
						|
        "eq",
 | 
						|
        "ne",
 | 
						|
        "lt",
 | 
						|
        "le",
 | 
						|
        "gt",
 | 
						|
        "ge",
 | 
						|
        "cmp",
 | 
						|
        "if",
 | 
						|
        "else"
 | 
						|
        "not",
 | 
						|
        "and",
 | 
						|
        "xor",
 | 
						|
        "or",
 | 
						|
        "if",
 | 
						|
        "while",
 | 
						|
        "until",
 | 
						|
        "for",
 | 
						|
        "foreach",
 | 
						|
        "last",
 | 
						|
        "next",
 | 
						|
        "redo",
 | 
						|
        "goto",
 | 
						|
        "STDIN",
 | 
						|
        "STDOUT",
 | 
						|
        "STDERR",
 | 
						|
        "WHEncE",
 | 
						|
        "BEGIN",
 | 
						|
        "END",
 | 
						|
        "require",
 | 
						|
        "integer",
 | 
						|
        "less",
 | 
						|
        "sigtrap",
 | 
						|
        "strict",
 | 
						|
        "subs"
 | 
						|
    ]
 | 
						|
 | 
						|
 | 
						|
#----------------------------------------------------------------------------
 | 
						|
# Icon Bitmaps - generated by encode_bitmaps.py
 | 
						|
#----------------------------------------------------------------------------
 | 
						|
from wx import ImageFromStream, BitmapFromImage
 | 
						|
import cStringIO
 | 
						|
 | 
						|
 | 
						|
def getPerlData():
 | 
						|
    return \
 | 
						|
"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 | 
						|
\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
 | 
						|
\x00\x01CIDAT8\x8d\x95\x93\xbfN\x02A\x10\x87\xbf[\xef\x05\xach|\x02m}\x008\
 | 
						|
\x881Z\xd2\x1a\x13\x0bKx\x02{\xa3\xa13\xc6\xc6\xc6\xd2DZ+s\\\x83\x95\x1d\xa2\
 | 
						|
&V\x104\x01/p\x01\t\xa0\xe8X\xc0\x9d\x87\xdc^\xf0\x97Lfw3\xdf\xec\xcc\xfe1\
 | 
						|
\xca\x95\xba0\x95\xeb\xf5\x01h\xb4\xda\x00x\xde\x90\x83\xfd\r\x838\x95+u\xa9\
 | 
						|
\rDj\x03\x91\xe7\xbe\xc8}wb\xa7\xc5\xb2\xdc\xbe\x89\xe4\x8f\xae\xc4PK\xe8L\
 | 
						|
\xc5%\xef\x8da{7K\xee\xf0Rt1\xa6\xeb\xf5Y\x01>\xbea\xf45Y\xec\x8e&\xe5\xdf]\
 | 
						|
\xdb4\xdd\x0e\xaf/-\xed&&\x110\xc0\xfa\x96\xc5\xf1N\x06\x80\xe5\xb5\xac6\x81\
 | 
						|
\x82y\xb87\x9e\r\xeaT\x8b3s+\x95\x14+\x95\x14\x00\xd5h\xb5\xe9\x8e\xe6a\x7f\
 | 
						|
\xf70\x14\xf6\xfeXy\xde0\x08\xf2\xe1\xf6gt\xb9V*)v\xc9\t\xae\xd5.9\x86\x19\
 | 
						|
\x05\x9e\xefe\xe6i\x8dT\xd3\xed\xfc\x0b\x0e\xb7\x00\xd3C\xd4\x95\x1c'\xbf\
 | 
						|
\x15\x15\xbe\xe3\xc6;l\x9e\xdc\x00\xbf\xfe/`\x97\x1c#|\x0e&@\xb1p\x16\x04>U\
 | 
						|
\x1fI\x00\x17\xb9<\t\xa0\xc9*\t\x1e\xf4\xa5D\xbd\xeft:-q~\xe1\xbf\xb0\x88b\
 | 
						|
\x13\x84{\x8d\x9a\x03\xfc\x00\xea\x7f\xa9A\xa7\xc3Vo\x00\x00\x00\x00IEND\xae\
 | 
						|
B`\x82" 
 | 
						|
 | 
						|
 | 
						|
def getPerlBitmap():
 | 
						|
    return BitmapFromImage(getPerlImage())
 | 
						|
 | 
						|
def getPerlImage():
 | 
						|
    stream = cStringIO.StringIO(getPerlData())
 | 
						|
    return ImageFromStream(stream)
 | 
						|
 | 
						|
def getPerlIcon():
 | 
						|
    return wx.IconFromBitmap(getPerlBitmap())
 |