ledger_web 1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. data/.gitignore +10 -0
  2. data/LICENSE +7 -0
  3. data/README.md +140 -0
  4. data/Rakefile +11 -0
  5. data/bin/ledger_web +14 -0
  6. data/ledger_web.gemspec +26 -0
  7. data/lib/ledger_web/app.rb +69 -0
  8. data/lib/ledger_web/config.rb +87 -0
  9. data/lib/ledger_web/db/migrate/20111226180900_initial_schema.rb +38 -0
  10. data/lib/ledger_web/db/migrate/20111231132900_add_views.rb +37 -0
  11. data/lib/ledger_web/db.rb +54 -0
  12. data/lib/ledger_web/helpers.rb +62 -0
  13. data/lib/ledger_web/public/bootstrap-dropdown.js +55 -0
  14. data/lib/ledger_web/public/bootstrap.min.css +356 -0
  15. data/lib/ledger_web/public/codemirror/keymap/emacs.js +29 -0
  16. data/lib/ledger_web/public/codemirror/keymap/vim.js +76 -0
  17. data/lib/ledger_web/public/codemirror/lib/codemirror.css +104 -0
  18. data/lib/ledger_web/public/codemirror/lib/codemirror.js +2761 -0
  19. data/lib/ledger_web/public/codemirror/lib/util/dialog.css +23 -0
  20. data/lib/ledger_web/public/codemirror/lib/util/dialog.js +63 -0
  21. data/lib/ledger_web/public/codemirror/lib/util/foldcode.js +66 -0
  22. data/lib/ledger_web/public/codemirror/lib/util/formatting.js +291 -0
  23. data/lib/ledger_web/public/codemirror/lib/util/javascript-hint.js +83 -0
  24. data/lib/ledger_web/public/codemirror/lib/util/overlay.js +51 -0
  25. data/lib/ledger_web/public/codemirror/lib/util/runmode.js +27 -0
  26. data/lib/ledger_web/public/codemirror/lib/util/search.js +114 -0
  27. data/lib/ledger_web/public/codemirror/lib/util/searchcursor.js +117 -0
  28. data/lib/ledger_web/public/codemirror/lib/util/simple-hint.css +16 -0
  29. data/lib/ledger_web/public/codemirror/lib/util/simple-hint.js +66 -0
  30. data/lib/ledger_web/public/codemirror/mode/clike/clike.js +249 -0
  31. data/lib/ledger_web/public/codemirror/mode/clike/index.html +101 -0
  32. data/lib/ledger_web/public/codemirror/mode/clojure/clojure.js +207 -0
  33. data/lib/ledger_web/public/codemirror/mode/clojure/index.html +66 -0
  34. data/lib/ledger_web/public/codemirror/mode/coffeescript/LICENSE +22 -0
  35. data/lib/ledger_web/public/codemirror/mode/coffeescript/coffeescript.js +325 -0
  36. data/lib/ledger_web/public/codemirror/mode/coffeescript/index.html +721 -0
  37. data/lib/ledger_web/public/codemirror/mode/css/css.js +124 -0
  38. data/lib/ledger_web/public/codemirror/mode/css/index.html +55 -0
  39. data/lib/ledger_web/public/codemirror/mode/diff/diff.css +3 -0
  40. data/lib/ledger_web/public/codemirror/mode/diff/diff.js +13 -0
  41. data/lib/ledger_web/public/codemirror/mode/diff/index.html +99 -0
  42. data/lib/ledger_web/public/codemirror/mode/gfm/gfm.js +108 -0
  43. data/lib/ledger_web/public/codemirror/mode/gfm/index.html +47 -0
  44. data/lib/ledger_web/public/codemirror/mode/groovy/groovy.js +210 -0
  45. data/lib/ledger_web/public/codemirror/mode/groovy/index.html +71 -0
  46. data/lib/ledger_web/public/codemirror/mode/haskell/haskell.js +242 -0
  47. data/lib/ledger_web/public/codemirror/mode/haskell/index.html +60 -0
  48. data/lib/ledger_web/public/codemirror/mode/htmlembedded/htmlembedded.js +68 -0
  49. data/lib/ledger_web/public/codemirror/mode/htmlembedded/index.html +49 -0
  50. data/lib/ledger_web/public/codemirror/mode/htmlmixed/htmlmixed.js +83 -0
  51. data/lib/ledger_web/public/codemirror/mode/htmlmixed/index.html +51 -0
  52. data/lib/ledger_web/public/codemirror/mode/javascript/index.html +77 -0
  53. data/lib/ledger_web/public/codemirror/mode/javascript/javascript.js +360 -0
  54. data/lib/ledger_web/public/codemirror/mode/jinja2/index.html +37 -0
  55. data/lib/ledger_web/public/codemirror/mode/jinja2/jinja2.js +42 -0
  56. data/lib/ledger_web/public/codemirror/mode/lua/index.html +72 -0
  57. data/lib/ledger_web/public/codemirror/mode/lua/lua.js +140 -0
  58. data/lib/ledger_web/public/codemirror/mode/markdown/index.html +339 -0
  59. data/lib/ledger_web/public/codemirror/mode/markdown/markdown.js +242 -0
  60. data/lib/ledger_web/public/codemirror/mode/ntriples/index.html +32 -0
  61. data/lib/ledger_web/public/codemirror/mode/ntriples/ntriples.js +172 -0
  62. data/lib/ledger_web/public/codemirror/mode/pascal/LICENSE +7 -0
  63. data/lib/ledger_web/public/codemirror/mode/pascal/index.html +48 -0
  64. data/lib/ledger_web/public/codemirror/mode/pascal/pascal.js +138 -0
  65. data/lib/ledger_web/public/codemirror/mode/perl/LICENSE +19 -0
  66. data/lib/ledger_web/public/codemirror/mode/perl/index.html +62 -0
  67. data/lib/ledger_web/public/codemirror/mode/perl/perl.js +816 -0
  68. data/lib/ledger_web/public/codemirror/mode/php/index.html +48 -0
  69. data/lib/ledger_web/public/codemirror/mode/php/php.js +120 -0
  70. data/lib/ledger_web/public/codemirror/mode/plsql/index.html +62 -0
  71. data/lib/ledger_web/public/codemirror/mode/plsql/plsql.js +217 -0
  72. data/lib/ledger_web/public/codemirror/mode/python/LICENSE.txt +21 -0
  73. data/lib/ledger_web/public/codemirror/mode/python/index.html +122 -0
  74. data/lib/ledger_web/public/codemirror/mode/python/python.js +333 -0
  75. data/lib/ledger_web/public/codemirror/mode/r/LICENSE +24 -0
  76. data/lib/ledger_web/public/codemirror/mode/r/index.html +73 -0
  77. data/lib/ledger_web/public/codemirror/mode/r/r.js +141 -0
  78. data/lib/ledger_web/public/codemirror/mode/rpm/changes/changes.js +19 -0
  79. data/lib/ledger_web/public/codemirror/mode/rpm/changes/index.html +53 -0
  80. data/lib/ledger_web/public/codemirror/mode/rpm/spec/index.html +99 -0
  81. data/lib/ledger_web/public/codemirror/mode/rpm/spec/spec.css +5 -0
  82. data/lib/ledger_web/public/codemirror/mode/rpm/spec/spec.js +66 -0
  83. data/lib/ledger_web/public/codemirror/mode/rst/index.html +525 -0
  84. data/lib/ledger_web/public/codemirror/mode/rst/rst.js +326 -0
  85. data/lib/ledger_web/public/codemirror/mode/ruby/LICENSE +24 -0
  86. data/lib/ledger_web/public/codemirror/mode/ruby/index.html +171 -0
  87. data/lib/ledger_web/public/codemirror/mode/ruby/ruby.js +195 -0
  88. data/lib/ledger_web/public/codemirror/mode/rust/index.html +48 -0
  89. data/lib/ledger_web/public/codemirror/mode/rust/rust.js +411 -0
  90. data/lib/ledger_web/public/codemirror/mode/scheme/index.html +64 -0
  91. data/lib/ledger_web/public/codemirror/mode/scheme/scheme.js +202 -0
  92. data/lib/ledger_web/public/codemirror/mode/smalltalk/index.html +55 -0
  93. data/lib/ledger_web/public/codemirror/mode/smalltalk/smalltalk.js +139 -0
  94. data/lib/ledger_web/public/codemirror/mode/sparql/index.html +40 -0
  95. data/lib/ledger_web/public/codemirror/mode/sparql/sparql.js +143 -0
  96. data/lib/ledger_web/public/codemirror/mode/stex/index.html +95 -0
  97. data/lib/ledger_web/public/codemirror/mode/stex/stex.js +167 -0
  98. data/lib/ledger_web/public/codemirror/mode/tiddlywiki/index.html +183 -0
  99. data/lib/ledger_web/public/codemirror/mode/tiddlywiki/tiddlywiki.css +21 -0
  100. data/lib/ledger_web/public/codemirror/mode/tiddlywiki/tiddlywiki.js +374 -0
  101. data/lib/ledger_web/public/codemirror/mode/velocity/index.html +103 -0
  102. data/lib/ledger_web/public/codemirror/mode/velocity/velocity.js +146 -0
  103. data/lib/ledger_web/public/codemirror/mode/xml/index.html +44 -0
  104. data/lib/ledger_web/public/codemirror/mode/xml/xml.js +252 -0
  105. data/lib/ledger_web/public/codemirror/mode/xmlpure/index.html +59 -0
  106. data/lib/ledger_web/public/codemirror/mode/xmlpure/xmlpure.js +485 -0
  107. data/lib/ledger_web/public/codemirror/mode/yaml/index.html +67 -0
  108. data/lib/ledger_web/public/codemirror/mode/yaml/yaml.js +95 -0
  109. data/lib/ledger_web/public/codemirror/theme/cobalt.css +18 -0
  110. data/lib/ledger_web/public/codemirror/theme/eclipse.css +25 -0
  111. data/lib/ledger_web/public/codemirror/theme/elegant.css +10 -0
  112. data/lib/ledger_web/public/codemirror/theme/monokai.css +28 -0
  113. data/lib/ledger_web/public/codemirror/theme/neat.css +9 -0
  114. data/lib/ledger_web/public/codemirror/theme/night.css +21 -0
  115. data/lib/ledger_web/public/codemirror/theme/rubyblue.css +21 -0
  116. data/lib/ledger_web/public/jquery-1.7.1.min.js +4 -0
  117. data/lib/ledger_web/public/jquery.tablesorter.min.js +4 -0
  118. data/lib/ledger_web/public/ledger.css +14 -0
  119. data/lib/ledger_web/report.rb +187 -0
  120. data/lib/ledger_web/reports/savings_rate.erb +49 -0
  121. data/lib/ledger_web/version.rb +3 -0
  122. data/lib/ledger_web/views/error.erb +5 -0
  123. data/lib/ledger_web/views/help.erb +6 -0
  124. data/lib/ledger_web/views/layout.erb +44 -0
  125. data/lib/ledger_web/views/table.erb +31 -0
  126. data/lib/ledger_web/watcher.rb +37 -0
  127. data/lib/ledger_web.rb +20 -0
  128. metadata +229 -0
@@ -0,0 +1,816 @@
1
+ // CodeMirror2 mode/perl/perl.js (text/x-perl) beta 0.10 (2011-11-08)
2
+ // This is a part of CodeMirror from https://github.com/sabaca/CodeMirror_mode_perl (mail@sabaca.com)
3
+ CodeMirror.defineMode("perl",function(config,parserConfig){
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
+
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
+
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
+
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
+
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
+
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
+
780
+ CodeMirror.defineMIME("text/x-perl", "perl");
781
+
782
+ // it's like "peek", but need for look-ahead or look-behind if index < 0
783
+ CodeMirror.StringStream.prototype.look=function(c){
784
+ return this.string.charAt(this.pos+(c||0))};
785
+
786
+ // return a part of prefix of current stream from current position
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)}};
793
+
794
+ // return a part of suffix of current stream from current position
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))};
799
+
800
+ // return a part of suffix of current stream from current position and change current position
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)};
806
+
807
+ // eating and vomiting a part of stream from current position
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};