git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33440 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)
|
|
|
|
|
|
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)
|
|
|
|
|
|
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
|
|
from wx import EmptyIcon
|
|
import cStringIO
|
|
|
|
|
|
def getPerlData():
|
|
return \
|
|
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x0e\x00\x00\x00\x10\x08\x06\
|
|
\x00\x00\x00&\x94N:\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\
|
|
\x01mIDAT(\x91\x9d\x93/\x8e\xf30\x10\xc5\x7f[\xed\x05\xca\x82,Ef\xc6e\x01Vx{\
|
|
\x89\x04\x16\x94\x97\x045\xa8\xa0\xa44G\x08\xc9\x01\xa2\x80\x1e $ld\xc9\xa8w\
|
|
\x08\xf0\xa2x\x93~\x1f\xda\x91F\xb2\xfd\xe6=\xcd?\x7f\xcd\xf3\x1c\xf8\x83}/\
|
|
\x87i\x9a\x000\xc6D\xb0\xeb:\x86a MS\xce\xe7\xf3\x968M\x13}\xdf\xe3\x9cCD\
|
|
\xb8\xddn\x18c\xe8\xba\x8e\xb2,\xc9\xb2\x0c\x11\x01\xd8\x90w\xc6\x18\x94R\
|
|
\xf1\xa1\xef{\xba\xae\xa3i\x1a\xb4\xd6h\xad)\x8a\x02\xe7\\\xccj\x93\xea\xa2\
|
|
\nP\xd75\xd7\xeb\x15\x00\xef\xfdFt)e\xb7\x80\x8b\xbas\x8e$I\xe2}\xc1\x8b\xa2\
|
|
\xd8\xf4b\x07\xa0\x94\xe2\xf5za\xad\xc5Z\xcb\xfb\xfdFD\xe8\xfb\x9e\x05\x17\
|
|
\x11\x9cs4M\xf3K<\x9dNdY\xc60\x0cx\xef\x11\x11\xea\xbaF)\x85s\x8e\xba\xae)\
|
|
\xcb\x12\x11!M\xd3_"\xc0\xfd~\xc7Z\x8bs\x0e\x80$I\xa2:@UU1u\x00\xe6y\x0ek\
|
|
\x1f\xc71\x1c\x0e\x87\xd0\xb6m\xd8\xef\xf7\xe1\xf1x\x84\xcb\xe5\x12\xe6y\x0e\
|
|
\xc7\xe31\xc6\xed\xf80\x11!\xcb2\xbc\xf7TUE\x9e\xe71=\xadul\xce\xf7\'Qk\x8d\
|
|
\xf7\x9e<\xcf\x81\xed&Yk\xb7\xe3\xf84\xa5\x14\xc6\x18D\x84\xe7\xf3\x19\x83\
|
|
\xd75\xfe\x97\xb8\x0eXo\xcc2\x9e\x7f\x9a3\x8ech\xdb6|6l\xf15\xf6\xf5\xd7o\
|
|
\xf5\x03\xaf\x9f\xfa@\x02\xe4\xdc\xf9\x00\x00\x00\x00IEND\xaeB`\x82'
|
|
|
|
|
|
def getPerlBitmap():
|
|
return BitmapFromImage(getPerlImage())
|
|
|
|
def getPerlImage():
|
|
stream = cStringIO.StringIO(getPerlData())
|
|
return ImageFromStream(stream)
|
|
|
|
def getPerlIcon():
|
|
icon = EmptyIcon()
|
|
icon.CopyFromBitmap(getPerlBitmap())
|
|
return icon
|