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())
 |