02b800ce7c
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36607 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)
|
|
|
|
|
|
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())
|