]> git.saurik.com Git - wxWidgets.git/blob - wxPython/samples/ide/activegrid/tool/PerlEditor.py
Docview and IDE patch from Morag Hua with fix for bug #1217890
[wxWidgets.git] / wxPython / samples / ide / activegrid / tool / PerlEditor.py
1 #----------------------------------------------------------------------------
2 # Name: PerlEditor.py
3 # Purpose: Perl Script Editor for pydocview tbat uses the Styled Text Control
4 #
5 # Author: Morgan Hua
6 #
7 # Created: 1/5/04
8 # CVS-ID: $Id$
9 # Copyright: (c) 2005 ActiveGrid, Inc.
10 # License: wxWindows License
11 #----------------------------------------------------------------------------
12
13 import wx
14 import string
15 import STCTextEditor
16 import CodeEditor
17
18
19 class PerlDocument(CodeEditor.CodeDocument):
20
21 pass
22
23
24 class PerlView(CodeEditor.CodeView):
25
26
27 def GetCtrlClass(self):
28 """ Used in split window to instantiate new instances """
29 return PerlCtrl
30
31
32 def GetAutoCompleteHint(self):
33 pos = self.GetCtrl().GetCurrentPos()
34 if pos == 0:
35 return None, None
36
37 validLetters = string.letters + string.digits + '_/'
38 word = ''
39 while (True):
40 pos = pos - 1
41 if pos < 0:
42 break
43 char = chr(self.GetCtrl().GetCharAt(pos))
44 if char not in validLetters:
45 break
46 word = char + word
47
48 return None, word
49
50
51 def GetAutoCompleteDefaultKeywords(self):
52 return PERLKEYWORDS
53
54
55 class PerlService(CodeEditor.CodeService):
56
57
58 def __init__(self):
59 CodeEditor.CodeService.__init__(self)
60
61
62 class PerlCtrl(CodeEditor.CodeCtrl):
63
64
65 def __init__(self, parent, id=-1, style=wx.NO_FULL_REPAINT_ON_RESIZE):
66 CodeEditor.CodeCtrl.__init__(self, parent, id, style)
67 self.SetLexer(wx.stc.STC_LEX_PERL)
68 self.SetKeyWords(0, string.join(PERLKEYWORDS))
69
70
71 def CanWordWrap(self):
72 return True
73
74
75 def SetViewDefaults(self):
76 CodeEditor.CodeCtrl.SetViewDefaults(self, configPrefix = "Perl", hasWordWrap = True, hasTabs = True)
77
78
79 def GetFontAndColorFromConfig(self):
80 return CodeEditor.CodeCtrl.GetFontAndColorFromConfig(self, configPrefix = "Perl")
81
82
83 def UpdateStyles(self):
84 CodeEditor.CodeCtrl.UpdateStyles(self)
85
86 if not self.GetFont():
87 return
88
89 faces = { 'font' : self.GetFont().GetFaceName(),
90 'size' : self.GetFont().GetPointSize(),
91 'size2': self.GetFont().GetPointSize() - 2,
92 'color' : "%02x%02x%02x" % (self.GetFontColor().Red(), self.GetFontColor().Green(), self.GetFontColor().Blue())
93 }
94
95 # Perl Styles
96 self.StyleSetSpec(wx.stc.STC_PL_DEFAULT, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
97 self.StyleSetSpec(wx.stc.STC_PL_COMMENTLINE, "face:%(font)s,fore:#007F00,italic,face:%(font)s,size:%(size)d" % faces)
98 self.StyleSetSpec(wx.stc.STC_PL_NUMBER, "face:%(font)s,fore:#007F7F,size:%(size)d" % faces)
99 self.StyleSetSpec(wx.stc.STC_PL_CHARACTER, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
100 self.StyleSetSpec(wx.stc.STC_PL_STRING, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
101 self.StyleSetSpec(wx.stc.STC_PL_STRING_Q, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
102 self.StyleSetSpec(wx.stc.STC_PL_STRING_QQ, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
103 self.StyleSetSpec(wx.stc.STC_PL_STRING_QX, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
104 self.StyleSetSpec(wx.stc.STC_PL_STRING_QR, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
105 self.StyleSetSpec(wx.stc.STC_PL_STRING_QW, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
106 self.StyleSetSpec(wx.stc.STC_PL_BACKTICKS, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces)
107 self.StyleSetSpec(wx.stc.STC_PL_WORD, "face:%(font)s,fore:#00007F,bold,size:%(size)d" % faces) # keyword
108 self.StyleSetSpec(wx.stc.STC_PL_IDENTIFIER, "face:%(font)s,fore:#%(color)s,face:%(font)s,size:%(size)d" % faces)
109
110 # Default
111 self.StyleSetSpec(wx.stc.STC_PL_ARRAY, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
112 self.StyleSetSpec(wx.stc.STC_PL_DATASECTION, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
113 self.StyleSetSpec(wx.stc.STC_PL_ERROR, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
114 self.StyleSetSpec(wx.stc.STC_PL_HASH, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
115 self.StyleSetSpec(wx.stc.STC_PL_HERE_DELIM, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
116 self.StyleSetSpec(wx.stc.STC_PL_HERE_Q, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
117 self.StyleSetSpec(wx.stc.STC_PL_HERE_QQ, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
118 self.StyleSetSpec(wx.stc.STC_PL_HERE_QX, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
119 self.StyleSetSpec(wx.stc.STC_PL_LONGQUOTE, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
120 self.StyleSetSpec(wx.stc.STC_PL_OPERATOR, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
121 self.StyleSetSpec(wx.stc.STC_PL_POD, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
122 self.StyleSetSpec(wx.stc.STC_PL_PREPROCESSOR, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
123 self.StyleSetSpec(wx.stc.STC_PL_PUNCTUATION, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
124 self.StyleSetSpec(wx.stc.STC_PL_REGEX, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
125 self.StyleSetSpec(wx.stc.STC_PL_REGSUBST, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
126 self.StyleSetSpec(wx.stc.STC_PL_SCALAR, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
127 self.StyleSetSpec(wx.stc.STC_PL_SYMBOLTABLE, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces)
128
129
130 class PerlOptionsPanel(STCTextEditor.TextOptionsPanel):
131
132 def __init__(self, parent, id):
133 STCTextEditor.TextOptionsPanel.__init__(self, parent, id, configPrefix = "Perl", label = "Perl", hasWordWrap = True, hasTabs = True)
134
135
136 PERLKEYWORDS = [
137 "abs",
138 "accept",
139 "alarm",
140 "atan2",
141 "bind",
142 "binmode",
143 "bless",
144 "caller",
145 "chdir",
146 "chmod",
147 "chomp",
148 "chop",
149 "chown",
150 "chr",
151 "chroot",
152 "close",
153 "closedir",
154 "connect",
155 "continue",
156 "cos",
157 "crypt",
158 "dbmclose",
159 "dbmopen",
160 "defined",
161 "delete",
162 "die",
163 "do",
164 "dump",
165 "each",
166 "endgrent",
167 "endhostent",
168 "endnetent",
169 "endprotoent",
170 "endpwent",
171 "endservent",
172 "eof",
173 "eval",
174 "exec",
175 "exists",
176 "exit",
177 "exp",
178 "fcntl",
179 "fileno",
180 "flock",
181 "fork",
182 "format",
183 "formline",
184 "getc",
185 "getgrent",
186 "getgrgid",
187 "getgrnam",
188 "gethostbyaddr",
189 "gethostbyname",
190 "gethostent",
191 "getlogin",
192 "getnetbyaddr",
193 "getnetbyname",
194 "getnetent",
195 "getpeername",
196 "getpgrp",
197 "getppid",
198 "getpriority",
199 "getprotobyname",
200 "getprotobynumber",
201 "getprotoent",
202 "getpwent",
203 "getpwnam",
204 "getpwuid",
205 "getservbyname",
206 "getservbyport",
207 "getservent",
208 "getsockname",
209 "getsockopt",
210 "glob",
211 "gmtime",
212 "goto",
213 "grep",
214 "hex",
215 "import",
216 "index",
217 "int",
218 "ioctl",
219 "join",
220 "keys",
221 "kill",
222 "last",
223 "lc",
224 "lcfirst",
225 "length",
226 "link",
227 "listen",
228 "local",
229 "localtime",
230 "log",
231 "lstat",
232 "m//",
233 "map",
234 "mkdir",
235 "msgctl",
236 "msgget",
237 "msgrcv",
238 "msgsnd",
239 "my",
240 "next",
241 "no",
242 "oct",
243 "open",
244 "opendir",
245 "ord",
246 "pack",
247 "package",
248 "pipe",
249 "pop",
250 "pos",
251 "print",
252 "printf",
253 "prototype",
254 "push",
255 "q/STRING/",
256 "qq/STRING/",
257 "quotemeta",
258 "qw",
259 "qw/STRING/",
260 "qx",
261 "qx/STRING/",
262 "rand",
263 "read",
264 "readdir",
265 "readline",
266 "readlink",
267 "readpipe",
268 "recv",
269 "redo",
270 "ref",
271 "rename",
272 "require",
273 "reset",
274 "return",
275 "reverse",
276 "rewinddir",
277 "rindex",
278 "rmdir",
279 "s///",
280 "scalar",
281 "seek",
282 "seekdir",
283 "select",
284 "semctl",
285 "semget",
286 "semop",
287 "send",
288 "setgrent",
289 "sethostent",
290 "setnetent",
291 "setpgrp",
292 "setpriority",
293 "setprotoent",
294 "setpwent",
295 "setservent",
296 "setsockopt",
297 "shift",
298 "shmctl",
299 "shmget",
300 "shmread",
301 "shmwrite",
302 "shutdown",
303 "sin",
304 "sleep",
305 "socket",
306 "socketpair",
307 "sort",
308 "splice",
309 "split",
310 "sprintf",
311 "sqrt",
312 "srand",
313 "stat",
314 "study",
315 "sub",
316 "substr",
317 "symlink",
318 "syscall",
319 "sysopen",
320 "sysread",
321 "sysseek",
322 "system",
323 "syswrite",
324 "tell",
325 "telldir",
326 "tie",
327 "tied",
328 "times",
329 "tr///",
330 "truncate",
331 "uc",
332 "ucfirst",
333 "umask",
334 "undef",
335 "unlink",
336 "unpack",
337 "unshift",
338 "untie",
339 "use",
340 "utime",
341 "values",
342 "vec",
343 "wait",
344 "waitpid",
345 "wantarray",
346 "warn",
347 "write",
348 "y///",
349 "eq",
350 "ne",
351 "lt",
352 "le",
353 "gt",
354 "ge",
355 "cmp",
356 "if",
357 "else"
358 "not",
359 "and",
360 "xor",
361 "or",
362 "if",
363 "while",
364 "until",
365 "for",
366 "foreach",
367 "last",
368 "next",
369 "redo",
370 "goto",
371 "STDIN",
372 "STDOUT",
373 "STDERR",
374 "WHEncE",
375 "BEGIN",
376 "END",
377 "require",
378 "integer",
379 "less",
380 "sigtrap",
381 "strict",
382 "subs"
383 ]
384
385
386 #----------------------------------------------------------------------------
387 # Icon Bitmaps - generated by encode_bitmaps.py
388 #----------------------------------------------------------------------------
389 from wx import ImageFromStream, BitmapFromImage
390 import cStringIO
391
392
393 def getPerlData():
394 return \
395 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
396 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
397 \x00\x01\x81IDAT8\x8d\xa5S1n\xe30\x10\x1cJ\xf9\x80;U\x04\x04~\xc06\xdc\xa9\
398 \x10\xd4\xb3K\xf2\x01\xf9\x01F\x92\xce\x8d:vI\x84\xdc\xd5\xaa\xdc%\xd1\x17\
399 \x0c\x17ns\xa7\x07,\x16\xe0G6E@B\x91\x9c*\x0b\x10 \xb9\xe4\xecpg\xa8T\x92\
400 \xe27q5^\xbc\xbf\xbd\n\x00\\\xdf\xdc\xaa\xb0\xf7\xfc\xf4(\xcc\x8c<\xcfqw\xff\
401 \xa0\xa6\x00PI\x8aa\x18\xa4m[\xd9\xedvb\xad\x95a\x18D%)\xfa\xbe\x97\xc5b!\
402 \xd6Z\xb1\xd6J\xdb\xb6\xa2\x92\x14\xe3\x91\x00\xc0r\xb5VZ\xeb\x08z<\x1e\xf1\
403 \xfe\xf6*]\xd7\xc1\x18\x03c\x0c\xea\xba\x063\xe3\xff\xbf\x0f\xf9\xf1\tD\x14\
404 \xe7\xce9\xec\xf7{\x00\x80\xf7\xfe\x1b\xf88\x920\xf1\xde\xc7j\xcc\x8c,\xcb\
405 \xe2:\xe4\xeb\xba\x06\x80o,"\x03\xad5\x0e\x87C\xacz>\x9fAD\xb1\xba\xd6\x1aD\
406 \x04f\x063\xcf\x19\\\xdf\xdc\xaa\xa2(p:\x9d\xe0\xbd\x07\x11\xc19\x07\xad5\
407 \x98\x19\xce9l\xb7[\x10\x11\xf2<\x9f\x03\x00\xc0\xcb\x9f\xbf\xaa,\xcbX!\xcb2\
408 t]\x17\xf3M\xd3\xc4\'\xc5\x98\xca\x12d\xddl6\x12d\x0c\x12\xab$\x85\xb5Vf2N\
409 \x83\x88P\x14\x05\xbc\xf7h\x9a\x06UUE\xda\xc6\x98\xcbM\x1c\x871\x06\xde{TU\
410 \x05\xe0\xcb\'\xe1RY\x96X\xae\xd6\xd1\x91\x17\x19\x00_]_\xae\xd6\x8a\x88\xf0\
411 \xfc\xf4(\xe1\xd2\xb4\x07?\x02\x8c\x0f\x8e\x1d85\xd2\xc5\x06\xf6}?\xf3|\x18\
412 \xb3\xdco\xbf\xf3\'`\xa6\xbc1\xa7\xd6\xcb\xbf\x00\x00\x00\x00IEND\xaeB`\x82'\
413
414
415 def getPerlBitmap():
416 return BitmapFromImage(getPerlImage())
417
418 def getPerlImage():
419 stream = cStringIO.StringIO(getPerlData())
420 return ImageFromStream(stream)
421
422 def getPerlIcon():
423 return wx.IconFromBitmap(getPerlBitmap())