codemirror-rails 3.02 → 3.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +1 -1
  3. data/LICENSE +1 -1
  4. data/codemirror-rails.gemspec +1 -0
  5. data/doc/CodeMirror-LICENSE +5 -1
  6. data/lib/codemirror/rails/version.rb +2 -2
  7. data/vendor/assets/javascripts/codemirror/{utils → addons/dialog}/dialog.js +4 -0
  8. data/vendor/assets/javascripts/codemirror/addons/display/placeholder.js +54 -0
  9. data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +54 -0
  10. data/vendor/assets/javascripts/codemirror/{utils → addons/edit}/closetag.js +9 -8
  11. data/vendor/assets/javascripts/codemirror/{utils → addons/edit}/continuecomment.js +12 -4
  12. data/vendor/assets/javascripts/codemirror/addons/edit/continuelist.js +25 -0
  13. data/vendor/assets/javascripts/codemirror/{utils → addons/edit}/matchbrackets.js +30 -11
  14. data/vendor/assets/javascripts/codemirror/addons/fold/brace-fold.js +31 -0
  15. data/vendor/assets/javascripts/codemirror/addons/fold/foldcode.js +32 -0
  16. data/vendor/assets/javascripts/codemirror/addons/fold/indent-fold.js +11 -0
  17. data/vendor/assets/javascripts/codemirror/addons/fold/xml-fold.js +64 -0
  18. data/vendor/assets/javascripts/codemirror/addons/hint/html-hint.js +582 -0
  19. data/vendor/assets/javascripts/codemirror/{utils → addons/hint}/javascript-hint.js +15 -11
  20. data/vendor/assets/javascripts/codemirror/{utils → addons/hint}/pig-hint.js +19 -19
  21. data/vendor/assets/javascripts/codemirror/{utils → addons/hint}/python-hint.js +2 -2
  22. data/vendor/assets/javascripts/codemirror/addons/hint/show-hint.js +180 -0
  23. data/vendor/assets/javascripts/codemirror/{utils → addons/hint}/xml-hint.js +5 -18
  24. data/vendor/assets/javascripts/codemirror/addons/lint/javascript-lint.js +127 -0
  25. data/vendor/assets/javascripts/codemirror/addons/lint/json-lint.js +14 -0
  26. data/vendor/assets/javascripts/codemirror/addons/lint/lint.js +197 -0
  27. data/vendor/assets/javascripts/codemirror/{utils → addons/mode}/loadmode.js +0 -0
  28. data/vendor/assets/javascripts/codemirror/{utils → addons/mode}/multiplex.js +2 -2
  29. data/vendor/assets/javascripts/codemirror/{utils → addons/mode}/overlay.js +2 -2
  30. data/vendor/assets/javascripts/codemirror/{utils → addons/runmode}/colorize.js +0 -0
  31. data/vendor/assets/javascripts/codemirror/{utils → addons/runmode}/runmode-standalone.js +2 -3
  32. data/vendor/assets/javascripts/codemirror/{utils → addons/runmode}/runmode.js +0 -0
  33. data/vendor/assets/javascripts/codemirror/addons/runmode/runmode.node.js +89 -0
  34. data/vendor/assets/javascripts/codemirror/addons/search/match-highlighter.js +60 -0
  35. data/vendor/assets/javascripts/codemirror/{utils → addons/search}/search.js +5 -5
  36. data/vendor/assets/javascripts/codemirror/{utils → addons/search}/searchcursor.js +37 -30
  37. data/vendor/assets/javascripts/codemirror/addons/selection/active-line.js +39 -0
  38. data/vendor/assets/javascripts/codemirror/addons/selection/mark-selection.js +34 -0
  39. data/vendor/assets/javascripts/codemirror/keymaps/vim.js +721 -188
  40. data/vendor/assets/javascripts/codemirror/modes/asterisk.js +6 -6
  41. data/vendor/assets/javascripts/codemirror/modes/clike.js +14 -14
  42. data/vendor/assets/javascripts/codemirror/modes/clojure.js +23 -7
  43. data/vendor/assets/javascripts/codemirror/modes/coffeescript.js +2 -2
  44. data/vendor/assets/javascripts/codemirror/modes/css.js +337 -235
  45. data/vendor/assets/javascripts/codemirror/modes/ecl.js +12 -12
  46. data/vendor/assets/javascripts/codemirror/modes/erlang.js +1 -1
  47. data/vendor/assets/javascripts/codemirror/modes/gas.js +326 -0
  48. data/vendor/assets/javascripts/codemirror/modes/gfm.js +1 -0
  49. data/vendor/assets/javascripts/codemirror/modes/haskell.js +26 -26
  50. data/vendor/assets/javascripts/codemirror/modes/haxe.js +17 -17
  51. data/vendor/assets/javascripts/codemirror/modes/htmlembedded.js +6 -6
  52. data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +43 -23
  53. data/vendor/assets/javascripts/codemirror/modes/javascript.js +78 -33
  54. data/vendor/assets/javascripts/codemirror/modes/jinja2.js +2 -2
  55. data/vendor/assets/javascripts/codemirror/modes/less.js +38 -38
  56. data/vendor/assets/javascripts/codemirror/modes/livescript.js +267 -0
  57. data/vendor/assets/javascripts/codemirror/modes/lua.js +7 -7
  58. data/vendor/assets/javascripts/codemirror/modes/markdown.js +108 -57
  59. data/vendor/assets/javascripts/codemirror/modes/mirc.js +177 -0
  60. data/vendor/assets/javascripts/codemirror/modes/ntriples.js +22 -22
  61. data/vendor/assets/javascripts/codemirror/modes/ocaml.js +1 -1
  62. data/vendor/assets/javascripts/codemirror/modes/perl.js +791 -791
  63. data/vendor/assets/javascripts/codemirror/modes/php.js +1 -1
  64. data/vendor/assets/javascripts/codemirror/modes/pig.js +163 -163
  65. data/vendor/assets/javascripts/codemirror/modes/python.js +31 -31
  66. data/vendor/assets/javascripts/codemirror/modes/q.js +124 -0
  67. data/vendor/assets/javascripts/codemirror/modes/rst.js +486 -250
  68. data/vendor/assets/javascripts/codemirror/modes/sass.js +3 -3
  69. data/vendor/assets/javascripts/codemirror/modes/scss_test.js +80 -0
  70. data/vendor/assets/javascripts/codemirror/modes/shell.js +2 -2
  71. data/vendor/assets/javascripts/codemirror/modes/sieve.js +10 -10
  72. data/vendor/assets/javascripts/codemirror/modes/smalltalk.js +129 -129
  73. data/vendor/assets/javascripts/codemirror/modes/smarty.js +3 -3
  74. data/vendor/assets/javascripts/codemirror/modes/sparql.js +1 -1
  75. data/vendor/assets/javascripts/codemirror/modes/sql.js +23 -23
  76. data/vendor/assets/javascripts/codemirror/modes/stex.js +192 -121
  77. data/vendor/assets/javascripts/codemirror/modes/tcl.js +131 -0
  78. data/vendor/assets/javascripts/codemirror/modes/test.js +64 -0
  79. data/vendor/assets/javascripts/codemirror/modes/tiddlywiki.js +345 -345
  80. data/vendor/assets/javascripts/codemirror/modes/tiki.js +297 -298
  81. data/vendor/assets/javascripts/codemirror/modes/turtle.js +145 -0
  82. data/vendor/assets/javascripts/codemirror/modes/vb.js +31 -32
  83. data/vendor/assets/javascripts/codemirror/modes/vbscript.js +4 -4
  84. data/vendor/assets/javascripts/codemirror/modes/xml.js +10 -6
  85. data/vendor/assets/javascripts/codemirror/modes/xquery.js +55 -55
  86. data/vendor/assets/javascripts/codemirror/modes/yaml.js +90 -90
  87. data/vendor/assets/javascripts/codemirror/modes/z80.js +82 -110
  88. data/vendor/assets/javascripts/codemirror.js +1914 -1115
  89. data/vendor/assets/stylesheets/codemirror/{utils → addons/dialog}/dialog.css +0 -0
  90. data/vendor/assets/stylesheets/codemirror/addons/hint/show-hint.css +38 -0
  91. data/vendor/assets/stylesheets/codemirror/addons/lint/lint.css +96 -0
  92. data/vendor/assets/stylesheets/codemirror/modes/tiki.css +2 -2
  93. data/vendor/assets/stylesheets/codemirror/themes/ambiance-mobile.css +0 -1
  94. data/vendor/assets/stylesheets/codemirror/themes/ambiance.css +0 -1
  95. data/vendor/assets/stylesheets/codemirror/themes/eclipse.css +2 -2
  96. data/vendor/assets/stylesheets/codemirror/themes/erlang-dark.css +5 -5
  97. data/vendor/assets/stylesheets/codemirror/themes/midnight.css +52 -0
  98. data/vendor/assets/stylesheets/codemirror/themes/xq-light.css +43 -0
  99. data/vendor/assets/stylesheets/codemirror.css +16 -10
  100. metadata +60 -52
  101. data/vendor/assets/javascripts/codemirror/modes/mysql.js +0 -203
  102. data/vendor/assets/javascripts/codemirror/modes/plsql.js +0 -216
  103. data/vendor/assets/javascripts/codemirror/utils/collapserange.js +0 -68
  104. data/vendor/assets/javascripts/codemirror/utils/continuelist.js +0 -28
  105. data/vendor/assets/javascripts/codemirror/utils/foldcode.js +0 -183
  106. data/vendor/assets/javascripts/codemirror/utils/formatting.js +0 -114
  107. data/vendor/assets/javascripts/codemirror/utils/match-highlighter.js +0 -46
  108. data/vendor/assets/javascripts/codemirror/utils/simple-hint.js +0 -102
  109. data/vendor/assets/stylesheets/codemirror/utils/simple-hint.css +0 -16
@@ -1,816 +1,816 @@
1
1
  // CodeMirror2 mode/perl/perl.js (text/x-perl) beta 0.10 (2011-11-08)
2
2
  // This is a part of CodeMirror from https://github.com/sabaca/CodeMirror_mode_perl (mail@sabaca.com)
3
3
  CodeMirror.defineMode("perl",function(){
4
- // http://perldoc.perl.org
5
- var PERL={ // null - magic touch
6
- // 1 - keyword
7
- // 2 - def
8
- // 3 - atom
9
- // 4 - operator
10
- // 5 - variable-2 (predefined)
11
- // [x,y] - x=1,2,3; y=must be defined if x{...}
12
- // PERL operators
13
- '->' : 4,
14
- '++' : 4,
15
- '--' : 4,
16
- '**' : 4,
17
- // ! ~ \ and unary + and -
18
- '=~' : 4,
19
- '!~' : 4,
20
- '*' : 4,
21
- '/' : 4,
22
- '%' : 4,
23
- 'x' : 4,
24
- '+' : 4,
25
- '-' : 4,
26
- '.' : 4,
27
- '<<' : 4,
28
- '>>' : 4,
29
- // named unary operators
30
- '<' : 4,
31
- '>' : 4,
32
- '<=' : 4,
33
- '>=' : 4,
34
- 'lt' : 4,
35
- 'gt' : 4,
36
- 'le' : 4,
37
- 'ge' : 4,
38
- '==' : 4,
39
- '!=' : 4,
40
- '<=>' : 4,
41
- 'eq' : 4,
42
- 'ne' : 4,
43
- 'cmp' : 4,
44
- '~~' : 4,
45
- '&' : 4,
46
- '|' : 4,
47
- '^' : 4,
48
- '&&' : 4,
49
- '||' : 4,
50
- '//' : 4,
51
- '..' : 4,
52
- '...' : 4,
53
- '?' : 4,
54
- ':' : 4,
55
- '=' : 4,
56
- '+=' : 4,
57
- '-=' : 4,
58
- '*=' : 4, // etc. ???
59
- ',' : 4,
60
- '=>' : 4,
61
- '::' : 4,
62
- // list operators (rightward)
63
- 'not' : 4,
64
- 'and' : 4,
65
- 'or' : 4,
66
- 'xor' : 4,
67
- // PERL predefined variables (I know, what this is a paranoid idea, but may be needed for people, who learn PERL, and for me as well, ...and may be for you?;)
68
- 'BEGIN' : [5,1],
69
- 'END' : [5,1],
70
- 'PRINT' : [5,1],
71
- 'PRINTF' : [5,1],
72
- 'GETC' : [5,1],
73
- 'READ' : [5,1],
74
- 'READLINE' : [5,1],
75
- 'DESTROY' : [5,1],
76
- 'TIE' : [5,1],
77
- 'TIEHANDLE' : [5,1],
78
- 'UNTIE' : [5,1],
79
- 'STDIN' : 5,
80
- 'STDIN_TOP' : 5,
81
- 'STDOUT' : 5,
82
- 'STDOUT_TOP' : 5,
83
- 'STDERR' : 5,
84
- 'STDERR_TOP' : 5,
85
- '$ARG' : 5,
86
- '$_' : 5,
87
- '@ARG' : 5,
88
- '@_' : 5,
89
- '$LIST_SEPARATOR' : 5,
90
- '$"' : 5,
91
- '$PROCESS_ID' : 5,
92
- '$PID' : 5,
93
- '$$' : 5,
94
- '$REAL_GROUP_ID' : 5,
95
- '$GID' : 5,
96
- '$(' : 5,
97
- '$EFFECTIVE_GROUP_ID' : 5,
98
- '$EGID' : 5,
99
- '$)' : 5,
100
- '$PROGRAM_NAME' : 5,
101
- '$0' : 5,
102
- '$SUBSCRIPT_SEPARATOR' : 5,
103
- '$SUBSEP' : 5,
104
- '$;' : 5,
105
- '$REAL_USER_ID' : 5,
106
- '$UID' : 5,
107
- '$<' : 5,
108
- '$EFFECTIVE_USER_ID' : 5,
109
- '$EUID' : 5,
110
- '$>' : 5,
111
- '$a' : 5,
112
- '$b' : 5,
113
- '$COMPILING' : 5,
114
- '$^C' : 5,
115
- '$DEBUGGING' : 5,
116
- '$^D' : 5,
117
- '${^ENCODING}' : 5,
118
- '$ENV' : 5,
119
- '%ENV' : 5,
120
- '$SYSTEM_FD_MAX' : 5,
121
- '$^F' : 5,
122
- '@F' : 5,
123
- '${^GLOBAL_PHASE}' : 5,
124
- '$^H' : 5,
125
- '%^H' : 5,
126
- '@INC' : 5,
127
- '%INC' : 5,
128
- '$INPLACE_EDIT' : 5,
129
- '$^I' : 5,
130
- '$^M' : 5,
131
- '$OSNAME' : 5,
132
- '$^O' : 5,
133
- '${^OPEN}' : 5,
134
- '$PERLDB' : 5,
135
- '$^P' : 5,
136
- '$SIG' : 5,
137
- '%SIG' : 5,
138
- '$BASETIME' : 5,
139
- '$^T' : 5,
140
- '${^TAINT}' : 5,
141
- '${^UNICODE}' : 5,
142
- '${^UTF8CACHE}' : 5,
143
- '${^UTF8LOCALE}' : 5,
144
- '$PERL_VERSION' : 5,
145
- '$^V' : 5,
146
- '${^WIN32_SLOPPY_STAT}' : 5,
147
- '$EXECUTABLE_NAME' : 5,
148
- '$^X' : 5,
149
- '$1' : 5, // - regexp $1, $2...
150
- '$MATCH' : 5,
151
- '$&' : 5,
152
- '${^MATCH}' : 5,
153
- '$PREMATCH' : 5,
154
- '$`' : 5,
155
- '${^PREMATCH}' : 5,
156
- '$POSTMATCH' : 5,
157
- "$'" : 5,
158
- '${^POSTMATCH}' : 5,
159
- '$LAST_PAREN_MATCH' : 5,
160
- '$+' : 5,
161
- '$LAST_SUBMATCH_RESULT' : 5,
162
- '$^N' : 5,
163
- '@LAST_MATCH_END' : 5,
164
- '@+' : 5,
165
- '%LAST_PAREN_MATCH' : 5,
166
- '%+' : 5,
167
- '@LAST_MATCH_START' : 5,
168
- '@-' : 5,
169
- '%LAST_MATCH_START' : 5,
170
- '%-' : 5,
171
- '$LAST_REGEXP_CODE_RESULT' : 5,
172
- '$^R' : 5,
173
- '${^RE_DEBUG_FLAGS}' : 5,
174
- '${^RE_TRIE_MAXBUF}' : 5,
175
- '$ARGV' : 5,
176
- '@ARGV' : 5,
177
- 'ARGV' : 5,
178
- 'ARGVOUT' : 5,
179
- '$OUTPUT_FIELD_SEPARATOR' : 5,
180
- '$OFS' : 5,
181
- '$,' : 5,
182
- '$INPUT_LINE_NUMBER' : 5,
183
- '$NR' : 5,
184
- '$.' : 5,
185
- '$INPUT_RECORD_SEPARATOR' : 5,
186
- '$RS' : 5,
187
- '$/' : 5,
188
- '$OUTPUT_RECORD_SEPARATOR' : 5,
189
- '$ORS' : 5,
190
- '$\\' : 5,
191
- '$OUTPUT_AUTOFLUSH' : 5,
192
- '$|' : 5,
193
- '$ACCUMULATOR' : 5,
194
- '$^A' : 5,
195
- '$FORMAT_FORMFEED' : 5,
196
- '$^L' : 5,
197
- '$FORMAT_PAGE_NUMBER' : 5,
198
- '$%' : 5,
199
- '$FORMAT_LINES_LEFT' : 5,
200
- '$-' : 5,
201
- '$FORMAT_LINE_BREAK_CHARACTERS' : 5,
202
- '$:' : 5,
203
- '$FORMAT_LINES_PER_PAGE' : 5,
204
- '$=' : 5,
205
- '$FORMAT_TOP_NAME' : 5,
206
- '$^' : 5,
207
- '$FORMAT_NAME' : 5,
208
- '$~' : 5,
209
- '${^CHILD_ERROR_NATIVE}' : 5,
210
- '$EXTENDED_OS_ERROR' : 5,
211
- '$^E' : 5,
212
- '$EXCEPTIONS_BEING_CAUGHT' : 5,
213
- '$^S' : 5,
214
- '$WARNING' : 5,
215
- '$^W' : 5,
216
- '${^WARNING_BITS}' : 5,
217
- '$OS_ERROR' : 5,
218
- '$ERRNO' : 5,
219
- '$!' : 5,
220
- '%OS_ERROR' : 5,
221
- '%ERRNO' : 5,
222
- '%!' : 5,
223
- '$CHILD_ERROR' : 5,
224
- '$?' : 5,
225
- '$EVAL_ERROR' : 5,
226
- '$@' : 5,
227
- '$OFMT' : 5,
228
- '$#' : 5,
229
- '$*' : 5,
230
- '$ARRAY_BASE' : 5,
231
- '$[' : 5,
232
- '$OLD_PERL_VERSION' : 5,
233
- '$]' : 5,
234
- // PERL blocks
235
- 'if' :[1,1],
236
- elsif :[1,1],
237
- 'else' :[1,1],
238
- 'while' :[1,1],
239
- unless :[1,1],
240
- 'for' :[1,1],
241
- foreach :[1,1],
242
- // PERL functions
243
- 'abs' :1, // - absolute value function
244
- accept :1, // - accept an incoming socket connect
245
- alarm :1, // - schedule a SIGALRM
246
- 'atan2' :1, // - arctangent of Y/X in the range -PI to PI
247
- bind :1, // - binds an address to a socket
248
- binmode :1, // - prepare binary files for I/O
249
- bless :1, // - create an object
250
- bootstrap :1, //
251
- 'break' :1, // - break out of a "given" block
252
- caller :1, // - get context of the current subroutine call
253
- chdir :1, // - change your current working directory
254
- chmod :1, // - changes the permissions on a list of files
255
- chomp :1, // - remove a trailing record separator from a string
256
- chop :1, // - remove the last character from a string
257
- chown :1, // - change the owership on a list of files
258
- chr :1, // - get character this number represents
259
- chroot :1, // - make directory new root for path lookups
260
- close :1, // - close file (or pipe or socket) handle
261
- closedir :1, // - close directory handle
262
- connect :1, // - connect to a remote socket
263
- 'continue' :[1,1], // - optional trailing block in a while or foreach
264
- 'cos' :1, // - cosine function
265
- crypt :1, // - one-way passwd-style encryption
266
- dbmclose :1, // - breaks binding on a tied dbm file
267
- dbmopen :1, // - create binding on a tied dbm file
268
- 'default' :1, //
269
- defined :1, // - test whether a value, variable, or function is defined
270
- 'delete' :1, // - deletes a value from a hash
271
- die :1, // - raise an exception or bail out
272
- 'do' :1, // - turn a BLOCK into a TERM
273
- dump :1, // - create an immediate core dump
274
- each :1, // - retrieve the next key/value pair from a hash
275
- endgrent :1, // - be done using group file
276
- endhostent :1, // - be done using hosts file
277
- endnetent :1, // - be done using networks file
278
- endprotoent :1, // - be done using protocols file
279
- endpwent :1, // - be done using passwd file
280
- endservent :1, // - be done using services file
281
- eof :1, // - test a filehandle for its end
282
- 'eval' :1, // - catch exceptions or compile and run code
283
- 'exec' :1, // - abandon this program to run another
284
- exists :1, // - test whether a hash key is present
285
- exit :1, // - terminate this program
286
- 'exp' :1, // - raise I to a power
287
- fcntl :1, // - file control system call
288
- fileno :1, // - return file descriptor from filehandle
289
- flock :1, // - lock an entire file with an advisory lock
290
- fork :1, // - create a new process just like this one
291
- format :1, // - declare a picture format with use by the write() function
292
- formline :1, // - internal function used for formats
293
- getc :1, // - get the next character from the filehandle
294
- getgrent :1, // - get next group record
295
- getgrgid :1, // - get group record given group user ID
296
- getgrnam :1, // - get group record given group name
297
- gethostbyaddr :1, // - get host record given its address
298
- gethostbyname :1, // - get host record given name
299
- gethostent :1, // - get next hosts record
300
- getlogin :1, // - return who logged in at this tty
301
- getnetbyaddr :1, // - get network record given its address
302
- getnetbyname :1, // - get networks record given name
303
- getnetent :1, // - get next networks record
304
- getpeername :1, // - find the other end of a socket connection
305
- getpgrp :1, // - get process group
306
- getppid :1, // - get parent process ID
307
- getpriority :1, // - get current nice value
308
- getprotobyname :1, // - get protocol record given name
309
- getprotobynumber :1, // - get protocol record numeric protocol
310
- getprotoent :1, // - get next protocols record
311
- getpwent :1, // - get next passwd record
312
- getpwnam :1, // - get passwd record given user login name
313
- getpwuid :1, // - get passwd record given user ID
314
- getservbyname :1, // - get services record given its name
315
- getservbyport :1, // - get services record given numeric port
316
- getservent :1, // - get next services record
317
- getsockname :1, // - retrieve the sockaddr for a given socket
318
- getsockopt :1, // - get socket options on a given socket
319
- given :1, //
320
- glob :1, // - expand filenames using wildcards
321
- gmtime :1, // - convert UNIX time into record or string using Greenwich time
322
- 'goto' :1, // - create spaghetti code
323
- grep :1, // - locate elements in a list test true against a given criterion
324
- hex :1, // - convert a string to a hexadecimal number
325
- 'import' :1, // - patch a module's namespace into your own
326
- index :1, // - find a substring within a string
327
- 'int' :1, // - get the integer portion of a number
328
- ioctl :1, // - system-dependent device control system call
329
- 'join' :1, // - join a list into a string using a separator
330
- keys :1, // - retrieve list of indices from a hash
331
- kill :1, // - send a signal to a process or process group
332
- last :1, // - exit a block prematurely
333
- lc :1, // - return lower-case version of a string
334
- lcfirst :1, // - return a string with just the next letter in lower case
335
- length :1, // - return the number of bytes in a string
336
- 'link' :1, // - create a hard link in the filesytem
337
- listen :1, // - register your socket as a server
338
- local : 2, // - create a temporary value for a global variable (dynamic scoping)
339
- localtime :1, // - convert UNIX time into record or string using local time
340
- lock :1, // - get a thread lock on a variable, subroutine, or method
341
- 'log' :1, // - retrieve the natural logarithm for a number
342
- lstat :1, // - stat a symbolic link
343
- m :null, // - match a string with a regular expression pattern
344
- map :1, // - apply a change to a list to get back a new list with the changes
345
- mkdir :1, // - create a directory
346
- msgctl :1, // - SysV IPC message control operations
347
- msgget :1, // - get SysV IPC message queue
348
- msgrcv :1, // - receive a SysV IPC message from a message queue
349
- msgsnd :1, // - send a SysV IPC message to a message queue
350
- my : 2, // - declare and assign a local variable (lexical scoping)
351
- 'new' :1, //
352
- next :1, // - iterate a block prematurely
353
- no :1, // - unimport some module symbols or semantics at compile time
354
- oct :1, // - convert a string to an octal number
355
- open :1, // - open a file, pipe, or descriptor
356
- opendir :1, // - open a directory
357
- ord :1, // - find a character's numeric representation
358
- our : 2, // - declare and assign a package variable (lexical scoping)
359
- pack :1, // - convert a list into a binary representation
360
- 'package' :1, // - declare a separate global namespace
361
- pipe :1, // - open a pair of connected filehandles
362
- pop :1, // - remove the last element from an array and return it
363
- pos :1, // - find or set the offset for the last/next m//g search
364
- print :1, // - output a list to a filehandle
365
- printf :1, // - output a formatted list to a filehandle
366
- prototype :1, // - get the prototype (if any) of a subroutine
367
- push :1, // - append one or more elements to an array
368
- q :null, // - singly quote a string
369
- qq :null, // - doubly quote a string
370
- qr :null, // - Compile pattern
371
- quotemeta :null, // - quote regular expression magic characters
372
- qw :null, // - quote a list of words
373
- qx :null, // - backquote quote a string
374
- rand :1, // - retrieve the next pseudorandom number
375
- read :1, // - fixed-length buffered input from a filehandle
376
- readdir :1, // - get a directory from a directory handle
377
- readline :1, // - fetch a record from a file
378
- readlink :1, // - determine where a symbolic link is pointing
379
- readpipe :1, // - execute a system command and collect standard output
380
- recv :1, // - receive a message over a Socket
381
- redo :1, // - start this loop iteration over again
382
- ref :1, // - find out the type of thing being referenced
383
- rename :1, // - change a filename
384
- require :1, // - load in external functions from a library at runtime
385
- reset :1, // - clear all variables of a given name
386
- 'return' :1, // - get out of a function early
387
- reverse :1, // - flip a string or a list
388
- rewinddir :1, // - reset directory handle
389
- rindex :1, // - right-to-left substring search
390
- rmdir :1, // - remove a directory
391
- s :null, // - replace a pattern with a string
392
- say :1, // - print with newline
393
- scalar :1, // - force a scalar context
394
- seek :1, // - reposition file pointer for random-access I/O
395
- seekdir :1, // - reposition directory pointer
396
- select :1, // - reset default output or do I/O multiplexing
397
- semctl :1, // - SysV semaphore control operations
398
- semget :1, // - get set of SysV semaphores
399
- semop :1, // - SysV semaphore operations
400
- send :1, // - send a message over a socket
401
- setgrent :1, // - prepare group file for use
402
- sethostent :1, // - prepare hosts file for use
403
- setnetent :1, // - prepare networks file for use
404
- setpgrp :1, // - set the process group of a process
405
- setpriority :1, // - set a process's nice value
406
- setprotoent :1, // - prepare protocols file for use
407
- setpwent :1, // - prepare passwd file for use
408
- setservent :1, // - prepare services file for use
409
- setsockopt :1, // - set some socket options
410
- shift :1, // - remove the first element of an array, and return it
411
- shmctl :1, // - SysV shared memory operations
412
- shmget :1, // - get SysV shared memory segment identifier
413
- shmread :1, // - read SysV shared memory
414
- shmwrite :1, // - write SysV shared memory
415
- shutdown :1, // - close down just half of a socket connection
416
- 'sin' :1, // - return the sine of a number
417
- sleep :1, // - block for some number of seconds
418
- socket :1, // - create a socket
419
- socketpair :1, // - create a pair of sockets
420
- 'sort' :1, // - sort a list of values
421
- splice :1, // - add or remove elements anywhere in an array
422
- 'split' :1, // - split up a string using a regexp delimiter
423
- sprintf :1, // - formatted print into a string
424
- 'sqrt' :1, // - square root function
425
- srand :1, // - seed the random number generator
426
- stat :1, // - get a file's status information
427
- state :1, // - declare and assign a state variable (persistent lexical scoping)
428
- study :1, // - optimize input data for repeated searches
429
- 'sub' :1, // - declare a subroutine, possibly anonymously
430
- 'substr' :1, // - get or alter a portion of a stirng
431
- symlink :1, // - create a symbolic link to a file
432
- syscall :1, // - execute an arbitrary system call
433
- sysopen :1, // - open a file, pipe, or descriptor
434
- sysread :1, // - fixed-length unbuffered input from a filehandle
435
- sysseek :1, // - position I/O pointer on handle used with sysread and syswrite
436
- system :1, // - run a separate program
437
- syswrite :1, // - fixed-length unbuffered output to a filehandle
438
- tell :1, // - get current seekpointer on a filehandle
439
- telldir :1, // - get current seekpointer on a directory handle
440
- tie :1, // - bind a variable to an object class
441
- tied :1, // - get a reference to the object underlying a tied variable
442
- time :1, // - return number of seconds since 1970
443
- times :1, // - return elapsed time for self and child processes
444
- tr :null, // - transliterate a string
445
- truncate :1, // - shorten a file
446
- uc :1, // - return upper-case version of a string
447
- ucfirst :1, // - return a string with just the next letter in upper case
448
- umask :1, // - set file creation mode mask
449
- undef :1, // - remove a variable or function definition
450
- unlink :1, // - remove one link to a file
451
- unpack :1, // - convert binary structure into normal perl variables
452
- unshift :1, // - prepend more elements to the beginning of a list
453
- untie :1, // - break a tie binding to a variable
454
- use :1, // - load in a module at compile time
455
- utime :1, // - set a file's last access and modify times
456
- values :1, // - return a list of the values in a hash
457
- vec :1, // - test or set particular bits in a string
458
- wait :1, // - wait for any child process to die
459
- waitpid :1, // - wait for a particular child process to die
460
- wantarray :1, // - get void vs scalar vs list context of current subroutine call
461
- warn :1, // - print debugging info
462
- when :1, //
463
- write :1, // - print a picture record
464
- y :null}; // - transliterate a string
4
+ // http://perldoc.perl.org
5
+ var PERL={ // null - magic touch
6
+ // 1 - keyword
7
+ // 2 - def
8
+ // 3 - atom
9
+ // 4 - operator
10
+ // 5 - variable-2 (predefined)
11
+ // [x,y] - x=1,2,3; y=must be defined if x{...}
12
+ // PERL operators
13
+ '->' : 4,
14
+ '++' : 4,
15
+ '--' : 4,
16
+ '**' : 4,
17
+ // ! ~ \ and unary + and -
18
+ '=~' : 4,
19
+ '!~' : 4,
20
+ '*' : 4,
21
+ '/' : 4,
22
+ '%' : 4,
23
+ 'x' : 4,
24
+ '+' : 4,
25
+ '-' : 4,
26
+ '.' : 4,
27
+ '<<' : 4,
28
+ '>>' : 4,
29
+ // named unary operators
30
+ '<' : 4,
31
+ '>' : 4,
32
+ '<=' : 4,
33
+ '>=' : 4,
34
+ 'lt' : 4,
35
+ 'gt' : 4,
36
+ 'le' : 4,
37
+ 'ge' : 4,
38
+ '==' : 4,
39
+ '!=' : 4,
40
+ '<=>' : 4,
41
+ 'eq' : 4,
42
+ 'ne' : 4,
43
+ 'cmp' : 4,
44
+ '~~' : 4,
45
+ '&' : 4,
46
+ '|' : 4,
47
+ '^' : 4,
48
+ '&&' : 4,
49
+ '||' : 4,
50
+ '//' : 4,
51
+ '..' : 4,
52
+ '...' : 4,
53
+ '?' : 4,
54
+ ':' : 4,
55
+ '=' : 4,
56
+ '+=' : 4,
57
+ '-=' : 4,
58
+ '*=' : 4, // etc. ???
59
+ ',' : 4,
60
+ '=>' : 4,
61
+ '::' : 4,
62
+ // list operators (rightward)
63
+ 'not' : 4,
64
+ 'and' : 4,
65
+ 'or' : 4,
66
+ 'xor' : 4,
67
+ // PERL predefined variables (I know, what this is a paranoid idea, but may be needed for people, who learn PERL, and for me as well, ...and may be for you?;)
68
+ 'BEGIN' : [5,1],
69
+ 'END' : [5,1],
70
+ 'PRINT' : [5,1],
71
+ 'PRINTF' : [5,1],
72
+ 'GETC' : [5,1],
73
+ 'READ' : [5,1],
74
+ 'READLINE' : [5,1],
75
+ 'DESTROY' : [5,1],
76
+ 'TIE' : [5,1],
77
+ 'TIEHANDLE' : [5,1],
78
+ 'UNTIE' : [5,1],
79
+ 'STDIN' : 5,
80
+ 'STDIN_TOP' : 5,
81
+ 'STDOUT' : 5,
82
+ 'STDOUT_TOP' : 5,
83
+ 'STDERR' : 5,
84
+ 'STDERR_TOP' : 5,
85
+ '$ARG' : 5,
86
+ '$_' : 5,
87
+ '@ARG' : 5,
88
+ '@_' : 5,
89
+ '$LIST_SEPARATOR' : 5,
90
+ '$"' : 5,
91
+ '$PROCESS_ID' : 5,
92
+ '$PID' : 5,
93
+ '$$' : 5,
94
+ '$REAL_GROUP_ID' : 5,
95
+ '$GID' : 5,
96
+ '$(' : 5,
97
+ '$EFFECTIVE_GROUP_ID' : 5,
98
+ '$EGID' : 5,
99
+ '$)' : 5,
100
+ '$PROGRAM_NAME' : 5,
101
+ '$0' : 5,
102
+ '$SUBSCRIPT_SEPARATOR' : 5,
103
+ '$SUBSEP' : 5,
104
+ '$;' : 5,
105
+ '$REAL_USER_ID' : 5,
106
+ '$UID' : 5,
107
+ '$<' : 5,
108
+ '$EFFECTIVE_USER_ID' : 5,
109
+ '$EUID' : 5,
110
+ '$>' : 5,
111
+ '$a' : 5,
112
+ '$b' : 5,
113
+ '$COMPILING' : 5,
114
+ '$^C' : 5,
115
+ '$DEBUGGING' : 5,
116
+ '$^D' : 5,
117
+ '${^ENCODING}' : 5,
118
+ '$ENV' : 5,
119
+ '%ENV' : 5,
120
+ '$SYSTEM_FD_MAX' : 5,
121
+ '$^F' : 5,
122
+ '@F' : 5,
123
+ '${^GLOBAL_PHASE}' : 5,
124
+ '$^H' : 5,
125
+ '%^H' : 5,
126
+ '@INC' : 5,
127
+ '%INC' : 5,
128
+ '$INPLACE_EDIT' : 5,
129
+ '$^I' : 5,
130
+ '$^M' : 5,
131
+ '$OSNAME' : 5,
132
+ '$^O' : 5,
133
+ '${^OPEN}' : 5,
134
+ '$PERLDB' : 5,
135
+ '$^P' : 5,
136
+ '$SIG' : 5,
137
+ '%SIG' : 5,
138
+ '$BASETIME' : 5,
139
+ '$^T' : 5,
140
+ '${^TAINT}' : 5,
141
+ '${^UNICODE}' : 5,
142
+ '${^UTF8CACHE}' : 5,
143
+ '${^UTF8LOCALE}' : 5,
144
+ '$PERL_VERSION' : 5,
145
+ '$^V' : 5,
146
+ '${^WIN32_SLOPPY_STAT}' : 5,
147
+ '$EXECUTABLE_NAME' : 5,
148
+ '$^X' : 5,
149
+ '$1' : 5, // - regexp $1, $2...
150
+ '$MATCH' : 5,
151
+ '$&' : 5,
152
+ '${^MATCH}' : 5,
153
+ '$PREMATCH' : 5,
154
+ '$`' : 5,
155
+ '${^PREMATCH}' : 5,
156
+ '$POSTMATCH' : 5,
157
+ "$'" : 5,
158
+ '${^POSTMATCH}' : 5,
159
+ '$LAST_PAREN_MATCH' : 5,
160
+ '$+' : 5,
161
+ '$LAST_SUBMATCH_RESULT' : 5,
162
+ '$^N' : 5,
163
+ '@LAST_MATCH_END' : 5,
164
+ '@+' : 5,
165
+ '%LAST_PAREN_MATCH' : 5,
166
+ '%+' : 5,
167
+ '@LAST_MATCH_START' : 5,
168
+ '@-' : 5,
169
+ '%LAST_MATCH_START' : 5,
170
+ '%-' : 5,
171
+ '$LAST_REGEXP_CODE_RESULT' : 5,
172
+ '$^R' : 5,
173
+ '${^RE_DEBUG_FLAGS}' : 5,
174
+ '${^RE_TRIE_MAXBUF}' : 5,
175
+ '$ARGV' : 5,
176
+ '@ARGV' : 5,
177
+ 'ARGV' : 5,
178
+ 'ARGVOUT' : 5,
179
+ '$OUTPUT_FIELD_SEPARATOR' : 5,
180
+ '$OFS' : 5,
181
+ '$,' : 5,
182
+ '$INPUT_LINE_NUMBER' : 5,
183
+ '$NR' : 5,
184
+ '$.' : 5,
185
+ '$INPUT_RECORD_SEPARATOR' : 5,
186
+ '$RS' : 5,
187
+ '$/' : 5,
188
+ '$OUTPUT_RECORD_SEPARATOR' : 5,
189
+ '$ORS' : 5,
190
+ '$\\' : 5,
191
+ '$OUTPUT_AUTOFLUSH' : 5,
192
+ '$|' : 5,
193
+ '$ACCUMULATOR' : 5,
194
+ '$^A' : 5,
195
+ '$FORMAT_FORMFEED' : 5,
196
+ '$^L' : 5,
197
+ '$FORMAT_PAGE_NUMBER' : 5,
198
+ '$%' : 5,
199
+ '$FORMAT_LINES_LEFT' : 5,
200
+ '$-' : 5,
201
+ '$FORMAT_LINE_BREAK_CHARACTERS' : 5,
202
+ '$:' : 5,
203
+ '$FORMAT_LINES_PER_PAGE' : 5,
204
+ '$=' : 5,
205
+ '$FORMAT_TOP_NAME' : 5,
206
+ '$^' : 5,
207
+ '$FORMAT_NAME' : 5,
208
+ '$~' : 5,
209
+ '${^CHILD_ERROR_NATIVE}' : 5,
210
+ '$EXTENDED_OS_ERROR' : 5,
211
+ '$^E' : 5,
212
+ '$EXCEPTIONS_BEING_CAUGHT' : 5,
213
+ '$^S' : 5,
214
+ '$WARNING' : 5,
215
+ '$^W' : 5,
216
+ '${^WARNING_BITS}' : 5,
217
+ '$OS_ERROR' : 5,
218
+ '$ERRNO' : 5,
219
+ '$!' : 5,
220
+ '%OS_ERROR' : 5,
221
+ '%ERRNO' : 5,
222
+ '%!' : 5,
223
+ '$CHILD_ERROR' : 5,
224
+ '$?' : 5,
225
+ '$EVAL_ERROR' : 5,
226
+ '$@' : 5,
227
+ '$OFMT' : 5,
228
+ '$#' : 5,
229
+ '$*' : 5,
230
+ '$ARRAY_BASE' : 5,
231
+ '$[' : 5,
232
+ '$OLD_PERL_VERSION' : 5,
233
+ '$]' : 5,
234
+ // PERL blocks
235
+ 'if' :[1,1],
236
+ elsif :[1,1],
237
+ 'else' :[1,1],
238
+ 'while' :[1,1],
239
+ unless :[1,1],
240
+ 'for' :[1,1],
241
+ foreach :[1,1],
242
+ // PERL functions
243
+ 'abs' :1, // - absolute value function
244
+ accept :1, // - accept an incoming socket connect
245
+ alarm :1, // - schedule a SIGALRM
246
+ 'atan2' :1, // - arctangent of Y/X in the range -PI to PI
247
+ bind :1, // - binds an address to a socket
248
+ binmode :1, // - prepare binary files for I/O
249
+ bless :1, // - create an object
250
+ bootstrap :1, //
251
+ 'break' :1, // - break out of a "given" block
252
+ caller :1, // - get context of the current subroutine call
253
+ chdir :1, // - change your current working directory
254
+ chmod :1, // - changes the permissions on a list of files
255
+ chomp :1, // - remove a trailing record separator from a string
256
+ chop :1, // - remove the last character from a string
257
+ chown :1, // - change the owership on a list of files
258
+ chr :1, // - get character this number represents
259
+ chroot :1, // - make directory new root for path lookups
260
+ close :1, // - close file (or pipe or socket) handle
261
+ closedir :1, // - close directory handle
262
+ connect :1, // - connect to a remote socket
263
+ 'continue' :[1,1], // - optional trailing block in a while or foreach
264
+ 'cos' :1, // - cosine function
265
+ crypt :1, // - one-way passwd-style encryption
266
+ dbmclose :1, // - breaks binding on a tied dbm file
267
+ dbmopen :1, // - create binding on a tied dbm file
268
+ 'default' :1, //
269
+ defined :1, // - test whether a value, variable, or function is defined
270
+ 'delete' :1, // - deletes a value from a hash
271
+ die :1, // - raise an exception or bail out
272
+ 'do' :1, // - turn a BLOCK into a TERM
273
+ dump :1, // - create an immediate core dump
274
+ each :1, // - retrieve the next key/value pair from a hash
275
+ endgrent :1, // - be done using group file
276
+ endhostent :1, // - be done using hosts file
277
+ endnetent :1, // - be done using networks file
278
+ endprotoent :1, // - be done using protocols file
279
+ endpwent :1, // - be done using passwd file
280
+ endservent :1, // - be done using services file
281
+ eof :1, // - test a filehandle for its end
282
+ 'eval' :1, // - catch exceptions or compile and run code
283
+ 'exec' :1, // - abandon this program to run another
284
+ exists :1, // - test whether a hash key is present
285
+ exit :1, // - terminate this program
286
+ 'exp' :1, // - raise I to a power
287
+ fcntl :1, // - file control system call
288
+ fileno :1, // - return file descriptor from filehandle
289
+ flock :1, // - lock an entire file with an advisory lock
290
+ fork :1, // - create a new process just like this one
291
+ format :1, // - declare a picture format with use by the write() function
292
+ formline :1, // - internal function used for formats
293
+ getc :1, // - get the next character from the filehandle
294
+ getgrent :1, // - get next group record
295
+ getgrgid :1, // - get group record given group user ID
296
+ getgrnam :1, // - get group record given group name
297
+ gethostbyaddr :1, // - get host record given its address
298
+ gethostbyname :1, // - get host record given name
299
+ gethostent :1, // - get next hosts record
300
+ getlogin :1, // - return who logged in at this tty
301
+ getnetbyaddr :1, // - get network record given its address
302
+ getnetbyname :1, // - get networks record given name
303
+ getnetent :1, // - get next networks record
304
+ getpeername :1, // - find the other end of a socket connection
305
+ getpgrp :1, // - get process group
306
+ getppid :1, // - get parent process ID
307
+ getpriority :1, // - get current nice value
308
+ getprotobyname :1, // - get protocol record given name
309
+ getprotobynumber :1, // - get protocol record numeric protocol
310
+ getprotoent :1, // - get next protocols record
311
+ getpwent :1, // - get next passwd record
312
+ getpwnam :1, // - get passwd record given user login name
313
+ getpwuid :1, // - get passwd record given user ID
314
+ getservbyname :1, // - get services record given its name
315
+ getservbyport :1, // - get services record given numeric port
316
+ getservent :1, // - get next services record
317
+ getsockname :1, // - retrieve the sockaddr for a given socket
318
+ getsockopt :1, // - get socket options on a given socket
319
+ given :1, //
320
+ glob :1, // - expand filenames using wildcards
321
+ gmtime :1, // - convert UNIX time into record or string using Greenwich time
322
+ 'goto' :1, // - create spaghetti code
323
+ grep :1, // - locate elements in a list test true against a given criterion
324
+ hex :1, // - convert a string to a hexadecimal number
325
+ 'import' :1, // - patch a module's namespace into your own
326
+ index :1, // - find a substring within a string
327
+ 'int' :1, // - get the integer portion of a number
328
+ ioctl :1, // - system-dependent device control system call
329
+ 'join' :1, // - join a list into a string using a separator
330
+ keys :1, // - retrieve list of indices from a hash
331
+ kill :1, // - send a signal to a process or process group
332
+ last :1, // - exit a block prematurely
333
+ lc :1, // - return lower-case version of a string
334
+ lcfirst :1, // - return a string with just the next letter in lower case
335
+ length :1, // - return the number of bytes in a string
336
+ 'link' :1, // - create a hard link in the filesytem
337
+ listen :1, // - register your socket as a server
338
+ local : 2, // - create a temporary value for a global variable (dynamic scoping)
339
+ localtime :1, // - convert UNIX time into record or string using local time
340
+ lock :1, // - get a thread lock on a variable, subroutine, or method
341
+ 'log' :1, // - retrieve the natural logarithm for a number
342
+ lstat :1, // - stat a symbolic link
343
+ m :null, // - match a string with a regular expression pattern
344
+ map :1, // - apply a change to a list to get back a new list with the changes
345
+ mkdir :1, // - create a directory
346
+ msgctl :1, // - SysV IPC message control operations
347
+ msgget :1, // - get SysV IPC message queue
348
+ msgrcv :1, // - receive a SysV IPC message from a message queue
349
+ msgsnd :1, // - send a SysV IPC message to a message queue
350
+ my : 2, // - declare and assign a local variable (lexical scoping)
351
+ 'new' :1, //
352
+ next :1, // - iterate a block prematurely
353
+ no :1, // - unimport some module symbols or semantics at compile time
354
+ oct :1, // - convert a string to an octal number
355
+ open :1, // - open a file, pipe, or descriptor
356
+ opendir :1, // - open a directory
357
+ ord :1, // - find a character's numeric representation
358
+ our : 2, // - declare and assign a package variable (lexical scoping)
359
+ pack :1, // - convert a list into a binary representation
360
+ 'package' :1, // - declare a separate global namespace
361
+ pipe :1, // - open a pair of connected filehandles
362
+ pop :1, // - remove the last element from an array and return it
363
+ pos :1, // - find or set the offset for the last/next m//g search
364
+ print :1, // - output a list to a filehandle
365
+ printf :1, // - output a formatted list to a filehandle
366
+ prototype :1, // - get the prototype (if any) of a subroutine
367
+ push :1, // - append one or more elements to an array
368
+ q :null, // - singly quote a string
369
+ qq :null, // - doubly quote a string
370
+ qr :null, // - Compile pattern
371
+ quotemeta :null, // - quote regular expression magic characters
372
+ qw :null, // - quote a list of words
373
+ qx :null, // - backquote quote a string
374
+ rand :1, // - retrieve the next pseudorandom number
375
+ read :1, // - fixed-length buffered input from a filehandle
376
+ readdir :1, // - get a directory from a directory handle
377
+ readline :1, // - fetch a record from a file
378
+ readlink :1, // - determine where a symbolic link is pointing
379
+ readpipe :1, // - execute a system command and collect standard output
380
+ recv :1, // - receive a message over a Socket
381
+ redo :1, // - start this loop iteration over again
382
+ ref :1, // - find out the type of thing being referenced
383
+ rename :1, // - change a filename
384
+ require :1, // - load in external functions from a library at runtime
385
+ reset :1, // - clear all variables of a given name
386
+ 'return' :1, // - get out of a function early
387
+ reverse :1, // - flip a string or a list
388
+ rewinddir :1, // - reset directory handle
389
+ rindex :1, // - right-to-left substring search
390
+ rmdir :1, // - remove a directory
391
+ s :null, // - replace a pattern with a string
392
+ say :1, // - print with newline
393
+ scalar :1, // - force a scalar context
394
+ seek :1, // - reposition file pointer for random-access I/O
395
+ seekdir :1, // - reposition directory pointer
396
+ select :1, // - reset default output or do I/O multiplexing
397
+ semctl :1, // - SysV semaphore control operations
398
+ semget :1, // - get set of SysV semaphores
399
+ semop :1, // - SysV semaphore operations
400
+ send :1, // - send a message over a socket
401
+ setgrent :1, // - prepare group file for use
402
+ sethostent :1, // - prepare hosts file for use
403
+ setnetent :1, // - prepare networks file for use
404
+ setpgrp :1, // - set the process group of a process
405
+ setpriority :1, // - set a process's nice value
406
+ setprotoent :1, // - prepare protocols file for use
407
+ setpwent :1, // - prepare passwd file for use
408
+ setservent :1, // - prepare services file for use
409
+ setsockopt :1, // - set some socket options
410
+ shift :1, // - remove the first element of an array, and return it
411
+ shmctl :1, // - SysV shared memory operations
412
+ shmget :1, // - get SysV shared memory segment identifier
413
+ shmread :1, // - read SysV shared memory
414
+ shmwrite :1, // - write SysV shared memory
415
+ shutdown :1, // - close down just half of a socket connection
416
+ 'sin' :1, // - return the sine of a number
417
+ sleep :1, // - block for some number of seconds
418
+ socket :1, // - create a socket
419
+ socketpair :1, // - create a pair of sockets
420
+ 'sort' :1, // - sort a list of values
421
+ splice :1, // - add or remove elements anywhere in an array
422
+ 'split' :1, // - split up a string using a regexp delimiter
423
+ sprintf :1, // - formatted print into a string
424
+ 'sqrt' :1, // - square root function
425
+ srand :1, // - seed the random number generator
426
+ stat :1, // - get a file's status information
427
+ state :1, // - declare and assign a state variable (persistent lexical scoping)
428
+ study :1, // - optimize input data for repeated searches
429
+ 'sub' :1, // - declare a subroutine, possibly anonymously
430
+ 'substr' :1, // - get or alter a portion of a stirng
431
+ symlink :1, // - create a symbolic link to a file
432
+ syscall :1, // - execute an arbitrary system call
433
+ sysopen :1, // - open a file, pipe, or descriptor
434
+ sysread :1, // - fixed-length unbuffered input from a filehandle
435
+ sysseek :1, // - position I/O pointer on handle used with sysread and syswrite
436
+ system :1, // - run a separate program
437
+ syswrite :1, // - fixed-length unbuffered output to a filehandle
438
+ tell :1, // - get current seekpointer on a filehandle
439
+ telldir :1, // - get current seekpointer on a directory handle
440
+ tie :1, // - bind a variable to an object class
441
+ tied :1, // - get a reference to the object underlying a tied variable
442
+ time :1, // - return number of seconds since 1970
443
+ times :1, // - return elapsed time for self and child processes
444
+ tr :null, // - transliterate a string
445
+ truncate :1, // - shorten a file
446
+ uc :1, // - return upper-case version of a string
447
+ ucfirst :1, // - return a string with just the next letter in upper case
448
+ umask :1, // - set file creation mode mask
449
+ undef :1, // - remove a variable or function definition
450
+ unlink :1, // - remove one link to a file
451
+ unpack :1, // - convert binary structure into normal perl variables
452
+ unshift :1, // - prepend more elements to the beginning of a list
453
+ untie :1, // - break a tie binding to a variable
454
+ use :1, // - load in a module at compile time
455
+ utime :1, // - set a file's last access and modify times
456
+ values :1, // - return a list of the values in a hash
457
+ vec :1, // - test or set particular bits in a string
458
+ wait :1, // - wait for any child process to die
459
+ waitpid :1, // - wait for a particular child process to die
460
+ wantarray :1, // - get void vs scalar vs list context of current subroutine call
461
+ warn :1, // - print debugging info
462
+ when :1, //
463
+ write :1, // - print a picture record
464
+ y :null}; // - transliterate a string
465
465
 
466
- var RXstyle="string-2";
467
- var RXmodifiers=/[goseximacplud]/; // NOTE: "m", "s", "y" and "tr" need to correct real modifiers for each regexp type
466
+ var RXstyle="string-2";
467
+ var RXmodifiers=/[goseximacplud]/; // NOTE: "m", "s", "y" and "tr" need to correct real modifiers for each regexp type
468
468
 
469
- function tokenChain(stream,state,chain,style,tail){ // NOTE: chain.length > 2 is not working now (it's for s[...][...]geos;)
470
- state.chain=null; // 12 3tail
471
- state.style=null;
472
- state.tail=null;
473
- state.tokenize=function(stream,state){
474
- var e=false,c,i=0;
475
- while(c=stream.next()){
476
- if(c===chain[i]&&!e){
477
- if(chain[++i]!==undefined){
478
- state.chain=chain[i];
479
- state.style=style;
480
- state.tail=tail;}
481
- else if(tail)
482
- stream.eatWhile(tail);
483
- state.tokenize=tokenPerl;
484
- return style;}
485
- e=!e&&c=="\\";}
486
- return style;};
487
- return state.tokenize(stream,state);}
469
+ function tokenChain(stream,state,chain,style,tail){ // NOTE: chain.length > 2 is not working now (it's for s[...][...]geos;)
470
+ state.chain=null; // 12 3tail
471
+ state.style=null;
472
+ state.tail=null;
473
+ state.tokenize=function(stream,state){
474
+ var e=false,c,i=0;
475
+ while(c=stream.next()){
476
+ if(c===chain[i]&&!e){
477
+ if(chain[++i]!==undefined){
478
+ state.chain=chain[i];
479
+ state.style=style;
480
+ state.tail=tail;}
481
+ else if(tail)
482
+ stream.eatWhile(tail);
483
+ state.tokenize=tokenPerl;
484
+ return style;}
485
+ e=!e&&c=="\\";}
486
+ return style;};
487
+ return state.tokenize(stream,state);}
488
488
 
489
- function tokenSOMETHING(stream,state,string){
490
- state.tokenize=function(stream,state){
491
- if(stream.string==string)
492
- state.tokenize=tokenPerl;
493
- stream.skipToEnd();
494
- return "string";};
495
- return state.tokenize(stream,state);}
489
+ function tokenSOMETHING(stream,state,string){
490
+ state.tokenize=function(stream,state){
491
+ if(stream.string==string)
492
+ state.tokenize=tokenPerl;
493
+ stream.skipToEnd();
494
+ return "string";};
495
+ return state.tokenize(stream,state);}
496
496
 
497
- function tokenPerl(stream,state){
498
- if(stream.eatSpace())
499
- return null;
500
- if(state.chain)
501
- return tokenChain(stream,state,state.chain,state.style,state.tail);
502
- if(stream.match(/^\-?[\d\.]/,false))
503
- if(stream.match(/^(\-?(\d*\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F]+|0b[01]+|\d+(e[+-]?\d+)?)/))
504
- return 'number';
505
- if(stream.match(/^<<(?=\w)/)){ // NOTE: <<SOMETHING\n...\nSOMETHING\n
506
- stream.eatWhile(/\w/);
507
- return tokenSOMETHING(stream,state,stream.current().substr(2));}
508
- if(stream.sol()&&stream.match(/^\=item(?!\w)/)){// NOTE: \n=item...\n=cut\n
509
- return tokenSOMETHING(stream,state,'=cut');}
510
- var ch=stream.next();
511
- if(ch=='"'||ch=="'"){ // NOTE: ' or " or <<'SOMETHING'\n...\nSOMETHING\n or <<"SOMETHING"\n...\nSOMETHING\n
512
- if(stream.prefix(3)=="<<"+ch){
513
- var p=stream.pos;
514
- stream.eatWhile(/\w/);
515
- var n=stream.current().substr(1);
516
- if(n&&stream.eat(ch))
517
- return tokenSOMETHING(stream,state,n);
518
- stream.pos=p;}
519
- return tokenChain(stream,state,[ch],"string");}
520
- if(ch=="q"){
521
- var c=stream.look(-2);
522
- if(!(c&&/\w/.test(c))){
523
- c=stream.look(0);
524
- if(c=="x"){
525
- c=stream.look(1);
526
- if(c=="("){
527
- stream.eatSuffix(2);
528
- return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);}
529
- if(c=="["){
530
- stream.eatSuffix(2);
531
- return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);}
532
- if(c=="{"){
533
- stream.eatSuffix(2);
534
- return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);}
535
- if(c=="<"){
536
- stream.eatSuffix(2);
537
- return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);}
538
- if(/[\^'"!~\/]/.test(c)){
539
- stream.eatSuffix(1);
540
- return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}}
541
- else if(c=="q"){
542
- c=stream.look(1);
543
- if(c=="("){
544
- stream.eatSuffix(2);
545
- return tokenChain(stream,state,[")"],"string");}
546
- if(c=="["){
547
- stream.eatSuffix(2);
548
- return tokenChain(stream,state,["]"],"string");}
549
- if(c=="{"){
550
- stream.eatSuffix(2);
551
- return tokenChain(stream,state,["}"],"string");}
552
- if(c=="<"){
553
- stream.eatSuffix(2);
554
- return tokenChain(stream,state,[">"],"string");}
555
- if(/[\^'"!~\/]/.test(c)){
556
- stream.eatSuffix(1);
557
- return tokenChain(stream,state,[stream.eat(c)],"string");}}
558
- else if(c=="w"){
559
- c=stream.look(1);
560
- if(c=="("){
561
- stream.eatSuffix(2);
562
- return tokenChain(stream,state,[")"],"bracket");}
563
- if(c=="["){
564
- stream.eatSuffix(2);
565
- return tokenChain(stream,state,["]"],"bracket");}
566
- if(c=="{"){
567
- stream.eatSuffix(2);
568
- return tokenChain(stream,state,["}"],"bracket");}
569
- if(c=="<"){
570
- stream.eatSuffix(2);
571
- return tokenChain(stream,state,[">"],"bracket");}
572
- if(/[\^'"!~\/]/.test(c)){
573
- stream.eatSuffix(1);
574
- return tokenChain(stream,state,[stream.eat(c)],"bracket");}}
575
- else if(c=="r"){
576
- c=stream.look(1);
577
- if(c=="("){
578
- stream.eatSuffix(2);
579
- return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);}
580
- if(c=="["){
581
- stream.eatSuffix(2);
582
- return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);}
583
- if(c=="{"){
584
- stream.eatSuffix(2);
585
- return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);}
586
- if(c=="<"){
587
- stream.eatSuffix(2);
588
- return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);}
589
- if(/[\^'"!~\/]/.test(c)){
590
- stream.eatSuffix(1);
591
- return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}}
592
- else if(/[\^'"!~\/(\[{<]/.test(c)){
593
- if(c=="("){
594
- stream.eatSuffix(1);
595
- return tokenChain(stream,state,[")"],"string");}
596
- if(c=="["){
597
- stream.eatSuffix(1);
598
- return tokenChain(stream,state,["]"],"string");}
599
- if(c=="{"){
600
- stream.eatSuffix(1);
601
- return tokenChain(stream,state,["}"],"string");}
602
- if(c=="<"){
603
- stream.eatSuffix(1);
604
- return tokenChain(stream,state,[">"],"string");}
605
- if(/[\^'"!~\/]/.test(c)){
606
- return tokenChain(stream,state,[stream.eat(c)],"string");}}}}
607
- if(ch=="m"){
608
- var c=stream.look(-2);
609
- if(!(c&&/\w/.test(c))){
610
- c=stream.eat(/[(\[{<\^'"!~\/]/);
611
- if(c){
612
- if(/[\^'"!~\/]/.test(c)){
613
- return tokenChain(stream,state,[c],RXstyle,RXmodifiers);}
614
- if(c=="("){
615
- return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);}
616
- if(c=="["){
617
- return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);}
618
- if(c=="{"){
619
- return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);}
620
- if(c=="<"){
621
- return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);}}}}
622
- if(ch=="s"){
623
- var c=/[\/>\]})\w]/.test(stream.look(-2));
624
- if(!c){
625
- c=stream.eat(/[(\[{<\^'"!~\/]/);
626
- if(c){
627
- if(c=="[")
628
- return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers);
629
- if(c=="{")
630
- return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers);
631
- if(c=="<")
632
- return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers);
633
- if(c=="(")
634
- return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers);
635
- return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}
636
- if(ch=="y"){
637
- var c=/[\/>\]})\w]/.test(stream.look(-2));
638
- if(!c){
639
- c=stream.eat(/[(\[{<\^'"!~\/]/);
640
- if(c){
641
- if(c=="[")
642
- return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers);
643
- if(c=="{")
644
- return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers);
645
- if(c=="<")
646
- return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers);
647
- if(c=="(")
648
- return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers);
649
- return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}
650
- if(ch=="t"){
651
- var c=/[\/>\]})\w]/.test(stream.look(-2));
652
- if(!c){
653
- c=stream.eat("r");if(c){
654
- c=stream.eat(/[(\[{<\^'"!~\/]/);
655
- if(c){
656
- if(c=="[")
657
- return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers);
658
- if(c=="{")
659
- return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers);
660
- if(c=="<")
661
- return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers);
662
- if(c=="(")
663
- return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers);
664
- return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}}
665
- if(ch=="`"){
666
- return tokenChain(stream,state,[ch],"variable-2");}
667
- if(ch=="/"){
668
- if(!/~\s*$/.test(stream.prefix()))
669
- return "operator";
670
- else
671
- return tokenChain(stream,state,[ch],RXstyle,RXmodifiers);}
672
- if(ch=="$"){
673
- var p=stream.pos;
674
- if(stream.eatWhile(/\d/)||stream.eat("{")&&stream.eatWhile(/\d/)&&stream.eat("}"))
675
- return "variable-2";
676
- else
677
- stream.pos=p;}
678
- if(/[$@%]/.test(ch)){
679
- var p=stream.pos;
680
- if(stream.eat("^")&&stream.eat(/[A-Z]/)||!/[@$%&]/.test(stream.look(-2))&&stream.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){
681
- var c=stream.current();
682
- if(PERL[c])
683
- return "variable-2";}
684
- stream.pos=p;}
685
- if(/[$@%&]/.test(ch)){
686
- if(stream.eatWhile(/[\w$\[\]]/)||stream.eat("{")&&stream.eatWhile(/[\w$\[\]]/)&&stream.eat("}")){
687
- var c=stream.current();
688
- if(PERL[c])
689
- return "variable-2";
690
- else
691
- return "variable";}}
692
- if(ch=="#"){
693
- if(stream.look(-2)!="$"){
694
- stream.skipToEnd();
695
- return "comment";}}
696
- if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(ch)){
697
- var p=stream.pos;
698
- stream.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/);
699
- if(PERL[stream.current()])
700
- return "operator";
701
- else
702
- stream.pos=p;}
703
- if(ch=="_"){
704
- if(stream.pos==1){
705
- if(stream.suffix(6)=="_END__"){
706
- return tokenChain(stream,state,['\0'],"comment");}
707
- else if(stream.suffix(7)=="_DATA__"){
708
- return tokenChain(stream,state,['\0'],"variable-2");}
709
- else if(stream.suffix(7)=="_C__"){
710
- return tokenChain(stream,state,['\0'],"string");}}}
711
- if(/\w/.test(ch)){
712
- var p=stream.pos;
713
- if(stream.look(-2)=="{"&&(stream.look(0)=="}"||stream.eatWhile(/\w/)&&stream.look(0)=="}"))
714
- return "string";
715
- else
716
- stream.pos=p;}
717
- if(/[A-Z]/.test(ch)){
718
- var l=stream.look(-2);
719
- var p=stream.pos;
720
- stream.eatWhile(/[A-Z_]/);
721
- if(/[\da-z]/.test(stream.look(0))){
722
- stream.pos=p;}
723
- else{
724
- var c=PERL[stream.current()];
725
- if(!c)
726
- return "meta";
727
- if(c[1])
728
- c=c[0];
729
- if(l!=":"){
730
- if(c==1)
731
- return "keyword";
732
- else if(c==2)
733
- return "def";
734
- else if(c==3)
735
- return "atom";
736
- else if(c==4)
737
- return "operator";
738
- else if(c==5)
739
- return "variable-2";
740
- else
741
- return "meta";}
742
- else
743
- return "meta";}}
744
- if(/[a-zA-Z_]/.test(ch)){
745
- var l=stream.look(-2);
746
- stream.eatWhile(/\w/);
747
- var c=PERL[stream.current()];
748
- if(!c)
749
- return "meta";
750
- if(c[1])
751
- c=c[0];
752
- if(l!=":"){
753
- if(c==1)
754
- return "keyword";
755
- else if(c==2)
756
- return "def";
757
- else if(c==3)
758
- return "atom";
759
- else if(c==4)
760
- return "operator";
761
- else if(c==5)
762
- return "variable-2";
763
- else
764
- return "meta";}
765
- else
766
- return "meta";}
767
- return null;}
497
+ function tokenPerl(stream,state){
498
+ if(stream.eatSpace())
499
+ return null;
500
+ if(state.chain)
501
+ return tokenChain(stream,state,state.chain,state.style,state.tail);
502
+ if(stream.match(/^\-?[\d\.]/,false))
503
+ if(stream.match(/^(\-?(\d*\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F]+|0b[01]+|\d+(e[+-]?\d+)?)/))
504
+ return 'number';
505
+ if(stream.match(/^<<(?=\w)/)){ // NOTE: <<SOMETHING\n...\nSOMETHING\n
506
+ stream.eatWhile(/\w/);
507
+ return tokenSOMETHING(stream,state,stream.current().substr(2));}
508
+ if(stream.sol()&&stream.match(/^\=item(?!\w)/)){// NOTE: \n=item...\n=cut\n
509
+ return tokenSOMETHING(stream,state,'=cut');}
510
+ var ch=stream.next();
511
+ if(ch=='"'||ch=="'"){ // NOTE: ' or " or <<'SOMETHING'\n...\nSOMETHING\n or <<"SOMETHING"\n...\nSOMETHING\n
512
+ if(stream.prefix(3)=="<<"+ch){
513
+ var p=stream.pos;
514
+ stream.eatWhile(/\w/);
515
+ var n=stream.current().substr(1);
516
+ if(n&&stream.eat(ch))
517
+ return tokenSOMETHING(stream,state,n);
518
+ stream.pos=p;}
519
+ return tokenChain(stream,state,[ch],"string");}
520
+ if(ch=="q"){
521
+ var c=stream.look(-2);
522
+ if(!(c&&/\w/.test(c))){
523
+ c=stream.look(0);
524
+ if(c=="x"){
525
+ c=stream.look(1);
526
+ if(c=="("){
527
+ stream.eatSuffix(2);
528
+ return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);}
529
+ if(c=="["){
530
+ stream.eatSuffix(2);
531
+ return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);}
532
+ if(c=="{"){
533
+ stream.eatSuffix(2);
534
+ return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);}
535
+ if(c=="<"){
536
+ stream.eatSuffix(2);
537
+ return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);}
538
+ if(/[\^'"!~\/]/.test(c)){
539
+ stream.eatSuffix(1);
540
+ return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}}
541
+ else if(c=="q"){
542
+ c=stream.look(1);
543
+ if(c=="("){
544
+ stream.eatSuffix(2);
545
+ return tokenChain(stream,state,[")"],"string");}
546
+ if(c=="["){
547
+ stream.eatSuffix(2);
548
+ return tokenChain(stream,state,["]"],"string");}
549
+ if(c=="{"){
550
+ stream.eatSuffix(2);
551
+ return tokenChain(stream,state,["}"],"string");}
552
+ if(c=="<"){
553
+ stream.eatSuffix(2);
554
+ return tokenChain(stream,state,[">"],"string");}
555
+ if(/[\^'"!~\/]/.test(c)){
556
+ stream.eatSuffix(1);
557
+ return tokenChain(stream,state,[stream.eat(c)],"string");}}
558
+ else if(c=="w"){
559
+ c=stream.look(1);
560
+ if(c=="("){
561
+ stream.eatSuffix(2);
562
+ return tokenChain(stream,state,[")"],"bracket");}
563
+ if(c=="["){
564
+ stream.eatSuffix(2);
565
+ return tokenChain(stream,state,["]"],"bracket");}
566
+ if(c=="{"){
567
+ stream.eatSuffix(2);
568
+ return tokenChain(stream,state,["}"],"bracket");}
569
+ if(c=="<"){
570
+ stream.eatSuffix(2);
571
+ return tokenChain(stream,state,[">"],"bracket");}
572
+ if(/[\^'"!~\/]/.test(c)){
573
+ stream.eatSuffix(1);
574
+ return tokenChain(stream,state,[stream.eat(c)],"bracket");}}
575
+ else if(c=="r"){
576
+ c=stream.look(1);
577
+ if(c=="("){
578
+ stream.eatSuffix(2);
579
+ return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);}
580
+ if(c=="["){
581
+ stream.eatSuffix(2);
582
+ return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);}
583
+ if(c=="{"){
584
+ stream.eatSuffix(2);
585
+ return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);}
586
+ if(c=="<"){
587
+ stream.eatSuffix(2);
588
+ return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);}
589
+ if(/[\^'"!~\/]/.test(c)){
590
+ stream.eatSuffix(1);
591
+ return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}}
592
+ else if(/[\^'"!~\/(\[{<]/.test(c)){
593
+ if(c=="("){
594
+ stream.eatSuffix(1);
595
+ return tokenChain(stream,state,[")"],"string");}
596
+ if(c=="["){
597
+ stream.eatSuffix(1);
598
+ return tokenChain(stream,state,["]"],"string");}
599
+ if(c=="{"){
600
+ stream.eatSuffix(1);
601
+ return tokenChain(stream,state,["}"],"string");}
602
+ if(c=="<"){
603
+ stream.eatSuffix(1);
604
+ return tokenChain(stream,state,[">"],"string");}
605
+ if(/[\^'"!~\/]/.test(c)){
606
+ return tokenChain(stream,state,[stream.eat(c)],"string");}}}}
607
+ if(ch=="m"){
608
+ var c=stream.look(-2);
609
+ if(!(c&&/\w/.test(c))){
610
+ c=stream.eat(/[(\[{<\^'"!~\/]/);
611
+ if(c){
612
+ if(/[\^'"!~\/]/.test(c)){
613
+ return tokenChain(stream,state,[c],RXstyle,RXmodifiers);}
614
+ if(c=="("){
615
+ return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);}
616
+ if(c=="["){
617
+ return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);}
618
+ if(c=="{"){
619
+ return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);}
620
+ if(c=="<"){
621
+ return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);}}}}
622
+ if(ch=="s"){
623
+ var c=/[\/>\]})\w]/.test(stream.look(-2));
624
+ if(!c){
625
+ c=stream.eat(/[(\[{<\^'"!~\/]/);
626
+ if(c){
627
+ if(c=="[")
628
+ return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers);
629
+ if(c=="{")
630
+ return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers);
631
+ if(c=="<")
632
+ return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers);
633
+ if(c=="(")
634
+ return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers);
635
+ return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}
636
+ if(ch=="y"){
637
+ var c=/[\/>\]})\w]/.test(stream.look(-2));
638
+ if(!c){
639
+ c=stream.eat(/[(\[{<\^'"!~\/]/);
640
+ if(c){
641
+ if(c=="[")
642
+ return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers);
643
+ if(c=="{")
644
+ return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers);
645
+ if(c=="<")
646
+ return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers);
647
+ if(c=="(")
648
+ return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers);
649
+ return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}
650
+ if(ch=="t"){
651
+ var c=/[\/>\]})\w]/.test(stream.look(-2));
652
+ if(!c){
653
+ c=stream.eat("r");if(c){
654
+ c=stream.eat(/[(\[{<\^'"!~\/]/);
655
+ if(c){
656
+ if(c=="[")
657
+ return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers);
658
+ if(c=="{")
659
+ return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers);
660
+ if(c=="<")
661
+ return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers);
662
+ if(c=="(")
663
+ return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers);
664
+ return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}}
665
+ if(ch=="`"){
666
+ return tokenChain(stream,state,[ch],"variable-2");}
667
+ if(ch=="/"){
668
+ if(!/~\s*$/.test(stream.prefix()))
669
+ return "operator";
670
+ else
671
+ return tokenChain(stream,state,[ch],RXstyle,RXmodifiers);}
672
+ if(ch=="$"){
673
+ var p=stream.pos;
674
+ if(stream.eatWhile(/\d/)||stream.eat("{")&&stream.eatWhile(/\d/)&&stream.eat("}"))
675
+ return "variable-2";
676
+ else
677
+ stream.pos=p;}
678
+ if(/[$@%]/.test(ch)){
679
+ var p=stream.pos;
680
+ if(stream.eat("^")&&stream.eat(/[A-Z]/)||!/[@$%&]/.test(stream.look(-2))&&stream.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){
681
+ var c=stream.current();
682
+ if(PERL[c])
683
+ return "variable-2";}
684
+ stream.pos=p;}
685
+ if(/[$@%&]/.test(ch)){
686
+ if(stream.eatWhile(/[\w$\[\]]/)||stream.eat("{")&&stream.eatWhile(/[\w$\[\]]/)&&stream.eat("}")){
687
+ var c=stream.current();
688
+ if(PERL[c])
689
+ return "variable-2";
690
+ else
691
+ return "variable";}}
692
+ if(ch=="#"){
693
+ if(stream.look(-2)!="$"){
694
+ stream.skipToEnd();
695
+ return "comment";}}
696
+ if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(ch)){
697
+ var p=stream.pos;
698
+ stream.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/);
699
+ if(PERL[stream.current()])
700
+ return "operator";
701
+ else
702
+ stream.pos=p;}
703
+ if(ch=="_"){
704
+ if(stream.pos==1){
705
+ if(stream.suffix(6)=="_END__"){
706
+ return tokenChain(stream,state,['\0'],"comment");}
707
+ else if(stream.suffix(7)=="_DATA__"){
708
+ return tokenChain(stream,state,['\0'],"variable-2");}
709
+ else if(stream.suffix(7)=="_C__"){
710
+ return tokenChain(stream,state,['\0'],"string");}}}
711
+ if(/\w/.test(ch)){
712
+ var p=stream.pos;
713
+ if(stream.look(-2)=="{"&&(stream.look(0)=="}"||stream.eatWhile(/\w/)&&stream.look(0)=="}"))
714
+ return "string";
715
+ else
716
+ stream.pos=p;}
717
+ if(/[A-Z]/.test(ch)){
718
+ var l=stream.look(-2);
719
+ var p=stream.pos;
720
+ stream.eatWhile(/[A-Z_]/);
721
+ if(/[\da-z]/.test(stream.look(0))){
722
+ stream.pos=p;}
723
+ else{
724
+ var c=PERL[stream.current()];
725
+ if(!c)
726
+ return "meta";
727
+ if(c[1])
728
+ c=c[0];
729
+ if(l!=":"){
730
+ if(c==1)
731
+ return "keyword";
732
+ else if(c==2)
733
+ return "def";
734
+ else if(c==3)
735
+ return "atom";
736
+ else if(c==4)
737
+ return "operator";
738
+ else if(c==5)
739
+ return "variable-2";
740
+ else
741
+ return "meta";}
742
+ else
743
+ return "meta";}}
744
+ if(/[a-zA-Z_]/.test(ch)){
745
+ var l=stream.look(-2);
746
+ stream.eatWhile(/\w/);
747
+ var c=PERL[stream.current()];
748
+ if(!c)
749
+ return "meta";
750
+ if(c[1])
751
+ c=c[0];
752
+ if(l!=":"){
753
+ if(c==1)
754
+ return "keyword";
755
+ else if(c==2)
756
+ return "def";
757
+ else if(c==3)
758
+ return "atom";
759
+ else if(c==4)
760
+ return "operator";
761
+ else if(c==5)
762
+ return "variable-2";
763
+ else
764
+ return "meta";}
765
+ else
766
+ return "meta";}
767
+ return null;}
768
768
 
769
- return{
770
- startState:function(){
771
- return{
772
- tokenize:tokenPerl,
773
- chain:null,
774
- style:null,
775
- tail:null};},
776
- token:function(stream,state){
777
- return (state.tokenize||tokenPerl)(stream,state);},
778
- electricChars:"{}"};});
769
+ return{
770
+ startState:function(){
771
+ return{
772
+ tokenize:tokenPerl,
773
+ chain:null,
774
+ style:null,
775
+ tail:null};},
776
+ token:function(stream,state){
777
+ return (state.tokenize||tokenPerl)(stream,state);},
778
+ electricChars:"{}"};});
779
779
 
780
780
  CodeMirror.defineMIME("text/x-perl", "perl");
781
781
 
782
782
  // it's like "peek", but need for look-ahead or look-behind if index < 0
783
783
  CodeMirror.StringStream.prototype.look=function(c){
784
- return this.string.charAt(this.pos+(c||0));};
784
+ return this.string.charAt(this.pos+(c||0));};
785
785
 
786
786
  // return a part of prefix of current stream from current position
787
787
  CodeMirror.StringStream.prototype.prefix=function(c){
788
- if(c){
789
- var x=this.pos-c;
790
- return this.string.substr((x>=0?x:0),c);}
791
- else{
792
- return this.string.substr(0,this.pos-1);}};
788
+ if(c){
789
+ var x=this.pos-c;
790
+ return this.string.substr((x>=0?x:0),c);}
791
+ else{
792
+ return this.string.substr(0,this.pos-1);}};
793
793
 
794
794
  // return a part of suffix of current stream from current position
795
795
  CodeMirror.StringStream.prototype.suffix=function(c){
796
- var y=this.string.length;
797
- var x=y-this.pos+1;
798
- return this.string.substr(this.pos,(c&&c<y?c:x));};
796
+ var y=this.string.length;
797
+ var x=y-this.pos+1;
798
+ return this.string.substr(this.pos,(c&&c<y?c:x));};
799
799
 
800
800
  // return a part of suffix of current stream from current position and change current position
801
801
  CodeMirror.StringStream.prototype.nsuffix=function(c){
802
- var p=this.pos;
803
- var l=c||(this.string.length-this.pos+1);
804
- this.pos+=l;
805
- return this.string.substr(p,l);};
802
+ var p=this.pos;
803
+ var l=c||(this.string.length-this.pos+1);
804
+ this.pos+=l;
805
+ return this.string.substr(p,l);};
806
806
 
807
807
  // eating and vomiting a part of stream from current position
808
808
  CodeMirror.StringStream.prototype.eatSuffix=function(c){
809
- var x=this.pos+c;
810
- var y;
811
- if(x<=0)
812
- this.pos=0;
813
- else if(x>=(y=this.string.length-1))
814
- this.pos=y;
815
- else
816
- this.pos=x;};
809
+ var x=this.pos+c;
810
+ var y;
811
+ if(x<=0)
812
+ this.pos=0;
813
+ else if(x>=(y=this.string.length-1))
814
+ this.pos=y;
815
+ else
816
+ this.pos=x;};