gitlab-pygments.rb 0.3.2 → 0.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (199) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +71 -0
  4. data/Gemfile +1 -1
  5. data/LICENSE +17 -0
  6. data/README.md +28 -1
  7. data/Rakefile +2 -5
  8. data/lexers +0 -0
  9. data/lib/pygments/mentos.py +19 -12
  10. data/lib/pygments/popen.rb +21 -4
  11. data/lib/pygments/version.rb +1 -1
  12. data/pygments.rb.gemspec +2 -0
  13. data/test/test_pygments.rb +13 -2
  14. data/vendor/custom_lexers/github.py +206 -3
  15. data/vendor/pygments-main/AUTHORS +41 -3
  16. data/vendor/pygments-main/CHANGES +132 -5
  17. data/vendor/pygments-main/LICENSE +1 -1
  18. data/vendor/pygments-main/Makefile +1 -1
  19. data/vendor/pygments-main/REVISION +1 -1
  20. data/vendor/pygments-main/docs/generate.py +1 -1
  21. data/vendor/pygments-main/docs/src/api.txt +1 -1
  22. data/vendor/pygments-main/docs/src/index.txt +1 -1
  23. data/vendor/pygments-main/docs/src/integrate.txt +5 -0
  24. data/vendor/pygments-main/docs/src/java.txt +70 -0
  25. data/vendor/pygments-main/docs/src/lexerdevelopment.txt +52 -0
  26. data/vendor/pygments-main/external/autopygmentize +64 -0
  27. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +144 -0
  28. data/vendor/pygments-main/external/markdown-processor.py +2 -2
  29. data/vendor/pygments-main/external/moin-parser.py +1 -1
  30. data/vendor/pygments-main/external/rst-directive-old.py +1 -1
  31. data/vendor/pygments-main/external/rst-directive.py +1 -1
  32. data/vendor/pygments-main/pygmentize +1 -1
  33. data/vendor/pygments-main/pygments/__init__.py +2 -2
  34. data/vendor/pygments-main/pygments/cmdline.py +14 -6
  35. data/vendor/pygments-main/pygments/console.py +1 -1
  36. data/vendor/pygments-main/pygments/filter.py +1 -1
  37. data/vendor/pygments-main/pygments/filters/__init__.py +3 -4
  38. data/vendor/pygments-main/pygments/formatter.py +4 -1
  39. data/vendor/pygments-main/pygments/formatters/__init__.py +1 -1
  40. data/vendor/pygments-main/pygments/formatters/_mapping.py +3 -3
  41. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
  42. data/vendor/pygments-main/pygments/formatters/html.py +73 -2
  43. data/vendor/pygments-main/pygments/formatters/img.py +2 -2
  44. data/vendor/pygments-main/pygments/formatters/latex.py +9 -9
  45. data/vendor/pygments-main/pygments/formatters/other.py +1 -3
  46. data/vendor/pygments-main/pygments/formatters/rtf.py +1 -1
  47. data/vendor/pygments-main/pygments/formatters/svg.py +1 -1
  48. data/vendor/pygments-main/pygments/formatters/terminal.py +1 -1
  49. data/vendor/pygments-main/pygments/formatters/terminal256.py +1 -1
  50. data/vendor/pygments-main/pygments/lexer.py +78 -10
  51. data/vendor/pygments-main/pygments/lexers/__init__.py +13 -2
  52. data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1 -1
  53. data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +1 -1
  54. data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +5172 -0
  55. data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +1 -1
  56. data/vendor/pygments-main/pygments/lexers/_mapping.py +92 -36
  57. data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +562 -0
  58. data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +2 -2
  59. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +4 -3
  60. data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +557 -0
  61. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +11 -0
  62. data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +1072 -0
  63. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +360 -0
  64. data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +13 -3
  65. data/vendor/pygments-main/pygments/lexers/agile.py +525 -38
  66. data/vendor/pygments-main/pygments/lexers/asm.py +45 -7
  67. data/vendor/pygments-main/pygments/lexers/compiled.py +1257 -425
  68. data/vendor/pygments-main/pygments/lexers/dalvik.py +104 -0
  69. data/vendor/pygments-main/pygments/lexers/dotnet.py +97 -62
  70. data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
  71. data/vendor/pygments-main/pygments/lexers/functional.py +931 -32
  72. data/vendor/pygments-main/pygments/lexers/github.py +206 -3
  73. data/vendor/pygments-main/pygments/lexers/hdl.py +3 -3
  74. data/vendor/pygments-main/pygments/lexers/jvm.py +309 -44
  75. data/vendor/pygments-main/pygments/lexers/math.py +876 -30
  76. data/vendor/pygments-main/pygments/lexers/other.py +956 -517
  77. data/vendor/pygments-main/pygments/lexers/parsers.py +85 -2
  78. data/vendor/pygments-main/pygments/lexers/shell.py +81 -18
  79. data/vendor/pygments-main/pygments/lexers/special.py +1 -1
  80. data/vendor/pygments-main/pygments/lexers/sql.py +2 -2
  81. data/vendor/pygments-main/pygments/lexers/templates.py +119 -8
  82. data/vendor/pygments-main/pygments/lexers/text.py +155 -15
  83. data/vendor/pygments-main/pygments/lexers/web.py +1578 -397
  84. data/vendor/pygments-main/pygments/modeline.py +40 -0
  85. data/vendor/pygments-main/pygments/plugin.py +1 -1
  86. data/vendor/pygments-main/pygments/scanner.py +1 -1
  87. data/vendor/pygments-main/pygments/style.py +1 -1
  88. data/vendor/pygments-main/pygments/styles/__init__.py +1 -1
  89. data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
  90. data/vendor/pygments-main/pygments/styles/borland.py +1 -1
  91. data/vendor/pygments-main/pygments/styles/bw.py +1 -1
  92. data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
  93. data/vendor/pygments-main/pygments/styles/default.py +1 -1
  94. data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
  95. data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
  96. data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
  97. data/vendor/pygments-main/pygments/styles/manni.py +1 -1
  98. data/vendor/pygments-main/pygments/styles/monokai.py +1 -1
  99. data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
  100. data/vendor/pygments-main/pygments/styles/native.py +1 -1
  101. data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
  102. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -1
  103. data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
  104. data/vendor/pygments-main/pygments/styles/tango.py +1 -1
  105. data/vendor/pygments-main/pygments/styles/trac.py +1 -1
  106. data/vendor/pygments-main/pygments/styles/vim.py +1 -1
  107. data/vendor/pygments-main/pygments/styles/vs.py +1 -1
  108. data/vendor/pygments-main/pygments/token.py +1 -1
  109. data/vendor/pygments-main/pygments/unistring.py +36 -26
  110. data/vendor/pygments-main/pygments/util.py +46 -1
  111. data/vendor/pygments-main/scripts/check_sources.py +2 -2
  112. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +2 -0
  113. data/vendor/pygments-main/scripts/find_codetags.py +1 -1
  114. data/vendor/pygments-main/scripts/find_error.py +5 -6
  115. data/vendor/pygments-main/setup.cfg +1 -0
  116. data/vendor/pygments-main/setup.py +6 -4
  117. data/vendor/pygments-main/tests/examplefiles/BOM.js +1 -0
  118. data/vendor/pygments-main/tests/examplefiles/Config.in.cache +1973 -0
  119. data/vendor/pygments-main/tests/examplefiles/Deflate.fs +578 -0
  120. data/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 +66 -0
  121. data/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc +104 -0
  122. data/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc +671 -0
  123. data/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 +23 -0
  124. data/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +25 -0
  125. data/vendor/pygments-main/tests/examplefiles/bigtest.nsi +308 -0
  126. data/vendor/pygments-main/tests/examplefiles/ca65_example +284 -0
  127. data/vendor/pygments-main/tests/examplefiles/cbmbas_example +9 -0
  128. data/vendor/pygments-main/tests/examplefiles/classes.dylan +89 -4
  129. data/vendor/pygments-main/tests/examplefiles/example.Rd +78 -0
  130. data/vendor/pygments-main/tests/examplefiles/example.bug +54 -0
  131. data/vendor/pygments-main/tests/examplefiles/example.ceylon +52 -0
  132. data/vendor/pygments-main/tests/examplefiles/example.clay +33 -0
  133. data/vendor/pygments-main/tests/examplefiles/example.cob +3556 -0
  134. data/vendor/pygments-main/tests/examplefiles/example.hx +142 -0
  135. data/vendor/pygments-main/tests/examplefiles/example.jag +48 -0
  136. data/vendor/pygments-main/tests/examplefiles/example.lagda +19 -0
  137. data/vendor/pygments-main/tests/examplefiles/example.monkey +152 -0
  138. data/vendor/pygments-main/tests/examplefiles/example.msc +43 -0
  139. data/vendor/pygments-main/tests/examplefiles/example.prg +161 -0
  140. data/vendor/pygments-main/tests/examplefiles/example.reg +19 -0
  141. data/vendor/pygments-main/tests/examplefiles/example.rexx +50 -0
  142. data/vendor/pygments-main/tests/examplefiles/example.rkt +95 -0
  143. data/vendor/pygments-main/tests/examplefiles/example.rpf +4 -0
  144. data/vendor/pygments-main/tests/examplefiles/example.shell-session +45 -0
  145. data/vendor/pygments-main/tests/examplefiles/example.stan +108 -0
  146. data/vendor/pygments-main/tests/examplefiles/example.ts +28 -0
  147. data/vendor/pygments-main/tests/examplefiles/example.xtend +34 -0
  148. data/vendor/pygments-main/tests/examplefiles/example2.msc +79 -0
  149. data/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +133 -0
  150. data/vendor/pygments-main/tests/examplefiles/grammar-test.p6 +22 -0
  151. data/vendor/pygments-main/tests/examplefiles/hello.smali +40 -0
  152. data/vendor/pygments-main/tests/examplefiles/hello.sp +9 -0
  153. data/vendor/pygments-main/tests/examplefiles/http_request_example +2 -1
  154. data/vendor/pygments-main/tests/examplefiles/http_response_example +4 -2
  155. data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +71 -0
  156. data/vendor/pygments-main/tests/examplefiles/json.lasso +301 -0
  157. data/vendor/pygments-main/tests/examplefiles/json.lasso9 +213 -0
  158. data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +41 -0
  159. data/vendor/pygments-main/tests/examplefiles/logos_example.xm +28 -0
  160. data/vendor/pygments-main/tests/examplefiles/matlab_sample +5 -2
  161. data/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +455 -0
  162. data/vendor/pygments-main/tests/examplefiles/mg_sample.pro +73 -0
  163. data/vendor/pygments-main/tests/examplefiles/minehunt.qml +112 -0
  164. data/vendor/pygments-main/tests/examplefiles/nanomsg.intr +95 -0
  165. data/vendor/pygments-main/tests/examplefiles/objc_example.m +7 -0
  166. data/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +163 -0
  167. data/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb +4 -0
  168. data/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +4 -0
  169. data/vendor/pygments-main/tests/examplefiles/robotframework.txt +39 -0
  170. data/vendor/pygments-main/tests/examplefiles/rust_example.rs +233 -0
  171. data/vendor/pygments-main/tests/examplefiles/session.dylan-console +9 -0
  172. data/vendor/pygments-main/tests/examplefiles/swig_java.swg +1329 -0
  173. data/vendor/pygments-main/tests/examplefiles/swig_std_vector.i +225 -0
  174. data/vendor/pygments-main/tests/examplefiles/test.R +149 -115
  175. data/vendor/pygments-main/tests/examplefiles/test.agda +102 -0
  176. data/vendor/pygments-main/tests/examplefiles/test.bb +95 -0
  177. data/vendor/pygments-main/tests/examplefiles/test.cu +36 -0
  178. data/vendor/pygments-main/tests/examplefiles/test.ebnf +31 -0
  179. data/vendor/pygments-main/tests/examplefiles/test.opa +10 -0
  180. data/vendor/pygments-main/tests/examplefiles/test.p6 +252 -0
  181. data/vendor/pygments-main/tests/examplefiles/test2.pypylog +120 -0
  182. data/vendor/pygments-main/tests/examplefiles/type.lisp +16 -0
  183. data/vendor/pygments-main/tests/examplefiles/unix-io.lid +37 -0
  184. data/vendor/pygments-main/tests/old_run.py +1 -1
  185. data/vendor/pygments-main/tests/run.py +3 -2
  186. data/vendor/pygments-main/tests/support/tags +36 -0
  187. data/vendor/pygments-main/tests/test_basic_api.py +4 -3
  188. data/vendor/pygments-main/tests/test_clexer.py +1 -1
  189. data/vendor/pygments-main/tests/test_cmdline.py +1 -1
  190. data/vendor/pygments-main/tests/test_examplefiles.py +3 -1
  191. data/vendor/pygments-main/tests/test_html_formatter.py +17 -1
  192. data/vendor/pygments-main/tests/test_latex_formatter.py +1 -1
  193. data/vendor/pygments-main/tests/test_lexers_other.py +68 -0
  194. data/vendor/pygments-main/tests/test_perllexer.py +1 -1
  195. data/vendor/pygments-main/tests/test_regexlexer.py +1 -1
  196. data/vendor/pygments-main/tests/test_token.py +1 -1
  197. data/vendor/pygments-main/tests/test_using_api.py +1 -1
  198. data/vendor/pygments-main/tests/test_util.py +22 -3
  199. metadata +84 -16
@@ -0,0 +1,213 @@
1
+
2
+ /**
3
+ trait_json_serialize
4
+ Objects with this trait will be assumed to convert to json data
5
+ when its ->asString method is called
6
+ */
7
+ define trait_json_serialize => trait {
8
+ require asString()
9
+ }
10
+
11
+ define json_serialize(e::bytes)::string => ('"' + (string(#e)->Replace(`\`, `\\`) & Replace('\"', '\\"') & Replace('\r', '\\r') & Replace('\n', '\\n') & Replace('\t', '\\t') & Replace('\f', '\\f') & Replace('\b', '\\b') &) + '"')
12
+ define json_serialize(e::string)::string => ('"' + (string(#e)->Replace(`\`, `\\`) & Replace('\"', '\\"') & Replace('\r', '\\r') & Replace('\n', '\\n') & Replace('\t', '\\t') & Replace('\f', '\\f') & Replace('\b', '\\b') &) + '"')
13
+ define json_serialize(e::json_literal)::string => (#e->asstring)
14
+ define json_serialize(e::integer)::string => (#e->asstring)
15
+ define json_serialize(e::decimal)::string => (#e->asstring)
16
+ define json_serialize(e::boolean)::string => (#e->asstring)
17
+ define json_serialize(e::null)::string => ('null')
18
+ define json_serialize(e::date)::string => ('"' + #e->format(#e->gmt ? '%QT%TZ' | '%Q%T') + '"')
19
+ /*
20
+ define json_serialize(e::array)::string => {
21
+ local(output) = '';
22
+ local(delimit) = '';
23
+ #e->foreach => { #output += #delimit + json_serialize(#1); #delimit = ', '; }
24
+ return('[' + #output + ']');
25
+ }
26
+ define json_serialize(e::staticarray)::string => {
27
+ local(output) = '';
28
+ local(delimit) = '';
29
+ #e->foreach => { #output += #delimit + json_serialize(#1); #delimit = ', '; }
30
+ return('[' + #output + ']');
31
+ }
32
+ */
33
+ define json_serialize(e::trait_forEach)::string => {
34
+ local(output) = '';
35
+ local(delimit) = '';
36
+ #e->foreach => { #output += #delimit + json_serialize(#1); #delimit = ', '; }
37
+ return('[' + #output + ']');
38
+ }
39
+ define json_serialize(e::map)::string => {
40
+ local(output = with pr in #e->eachPair
41
+ select json_serialize(#pr->first->asString) + ': ' + json_serialize(#pr->second))
42
+ return '{' + #output->join(',') + '}'
43
+ }
44
+ define json_serialize(e::json_object)::string => {
45
+ local(output) = '';
46
+ local(delimit) = '';
47
+ #e->foreachpair => { #output += #delimit + #1->first + ': ' + json_serialize(#1->second); #delimit = ', '; }
48
+ return('{' + #output + '}');
49
+ }
50
+ define json_serialize(e::trait_json_serialize) => #e->asString
51
+ define json_serialize(e::any)::string => json_serialize('<LassoNativeType>' + #e->serialize + '</LassoNativeType>')
52
+
53
+ // Bil Corry fixes for decoding json
54
+ define json_consume_string(ibytes::bytes) => {
55
+ local(obytes) = bytes;
56
+ local(temp) = 0;
57
+ while((#temp := #ibytes->export8bits) != 34);
58
+ #obytes->import8bits(#temp);
59
+ (#temp == 92) ? #obytes->import8bits(#ibytes->export8bits); // Escape \
60
+ /while;
61
+ local(output = string(#obytes)->unescape)
62
+ //Replace('\\"', '\"') & Replace('\\r', '\r') & Replace('\\n', '\n') & Replace('\\t', '\t') & Replace('\\f', '\f') & Replace('\\b', '\b') &;
63
+ if(#output->BeginsWith('<LassoNativeType>') && #output->EndsWith('</LassoNativeType>'));
64
+ Protect;
65
+ return serialization_reader(xml(#output - '<LassoNativeType>' - '</LassoNativeType>'))->read
66
+ /Protect;
67
+ else( (#output->size == 16 or #output->size == 15) and regexp(`\d{8}T\d{6}Z?`, '', #output)->matches)
68
+ return date(#output, -Format=#output->size == 16?`yyyyMMdd'T'HHmmssZ`|`yyyyMMdd'T'HHmmss`)
69
+ /if
70
+ return #output
71
+ }
72
+
73
+ // Bil Corry fix + Ke fix
74
+ define json_consume_token(ibytes::bytes, temp::integer) => {
75
+
76
+ local(obytes = bytes->import8bits(#temp) &,
77
+ delimit = array(9, 10, 13, 32, 44, 58, 93, 125)) // \t\r\n ,:]}
78
+
79
+ while(#delimit !>> (#temp := #ibytes->export8bits))
80
+ #obytes->import8bits(#temp)
81
+ /while
82
+
83
+ #temp == 125? // }
84
+ #ibytes->marker -= 1
85
+ //============================================================================
86
+ // Is also end of token if end of array[]
87
+ #temp == 93? // ]
88
+ #ibytes->marker -= 1
89
+ //............................................................................
90
+
91
+ local(output = string(#obytes))
92
+ #output == 'true'?
93
+ return true
94
+ #output == 'false'?
95
+ return false
96
+ #output == 'null'?
97
+ return null
98
+ string_IsNumeric(#output)?
99
+ return (#output >> '.')? decimal(#output) | integer(#output)
100
+
101
+ return #output
102
+ }
103
+
104
+ // Bil Corry fix
105
+ define json_consume_array(ibytes::bytes)::array => {
106
+ Local(output) = array;
107
+ local(delimit) = array( 9, 10, 13, 32, 44); // \t\r\n ,
108
+ local(temp) = 0;
109
+ While((#temp := #ibytes->export8bits) != 93); // ]
110
+ If(#delimit >> #temp);
111
+ // Discard whitespace
112
+ Else(#temp == 34); // "
113
+ #output->insert(json_consume_string(#ibytes));
114
+ Else(#temp == 91); // [
115
+ #output->insert(json_consume_array(#ibytes));
116
+ Else(#temp == 123); // {
117
+ #output->insert(json_consume_object(#ibytes));
118
+ Else;
119
+ #output->insert(json_consume_token(#ibytes, #temp));
120
+ (#temp == 93) ? Loop_Abort;
121
+ /If;
122
+ /While;
123
+ Return(#output);
124
+ }
125
+
126
+ // Bil Corry fix
127
+ define json_consume_object(ibytes::bytes)::map => {
128
+ Local('output' = map,
129
+ 'delimit' = array( 9, 10, 13, 32, 44), // \t\r\n ,
130
+ 'temp' = 0,
131
+ 'key' = null,
132
+ 'val' = null);
133
+ While((#temp := #ibytes->export8bits) != 125); // }
134
+ If(#delimit >> #temp);
135
+ // Discard whitespace
136
+ Else((#key !== null) && (#temp == 34)); // "
137
+ #output->insert(#key = json_consume_string(#ibytes));
138
+ #key = null;
139
+ Else((#key !== null) && (#temp == 91)); // [
140
+ #output->insert(#key = json_consume_array(#ibytes));
141
+ #key = null;
142
+ Else((#key !== null) && (#temp == 123)); // {
143
+ #output->insert(#key = json_consume_object(#ibytes));
144
+ #key = null;
145
+ Else((#key !== null));
146
+ #output->insert(#key = json_consume_token(#ibytes, #temp));
147
+ #key = null;
148
+ Else;
149
+ #key = json_consume_string(#ibytes);
150
+ while(#delimit >> (#temp := #ibytes->export8bits));
151
+ /while;
152
+ #temp != 58 ? Loop_Abort;
153
+ /If;
154
+ /While;
155
+
156
+ If((#output >> '__jsonclass__') && (#output->Find('__jsonclass__')->isa('array')) && (#output->Find('__jsonclass__')->size >= 2) && (#output->Find('__jsonclass__')->First == 'deserialize'));
157
+ Return(#output->find('__jsonclass__')->Second->First);
158
+ Else((#output >> 'native') && (#output >> 'comment') && (#output->find('comment') == 'http://www.lassosoft.com/json'));
159
+ Return(#output->find('native'));
160
+ /If;
161
+ Return(#output);
162
+ }
163
+
164
+ // Bil Corry fix + Ke fix
165
+ define json_deserialize(ibytes::bytes)::any => {
166
+ #ibytes->removeLeading(bom_utf8);
167
+
168
+ //============================================================================
169
+ // Reset marker on provided bytes
170
+ #ibytes->marker = 0
171
+ //............................................................................
172
+
173
+ Local(temp) = #ibytes->export8bits;
174
+ If(#temp == 91); // [
175
+ Return(json_consume_array(#ibytes));
176
+ Else(#temp == 123); // {
177
+ Return(json_consume_object(#ibytes));
178
+ else(#temp == 34) // "
179
+ return json_consume_string(#ibytes)
180
+ /If;
181
+ }
182
+
183
+ define json_deserialize(s::string) => json_deserialize(bytes(#s))
184
+
185
+ /**! json_literal - This is a subclass of String used for JSON encoding.
186
+
187
+ A json_literal works exactly like a string, but will be inserted directly
188
+ rather than being encoded into JSON. This allows JavaScript elements
189
+ like functions to be inserted into JSON objects. This is most useful
190
+ when the JSON object will be used within a JavaScript on the local page.
191
+ [Map: 'fn'=Literal('function(){ ...})] => {'fn': function(){ ...}}
192
+ **/
193
+ define json_literal => type {
194
+ parent string
195
+ }
196
+
197
+ /**! json_object - This is a subclass of Map used for JSON encoding.
198
+
199
+ An object works exactly like a map, but when it is encoded into JSON all
200
+ of the keys will be inserted literally. This makes it easy to create a
201
+ JavaScript object without extraneous quote marks.
202
+ Object('name'='value') => {name: "value"}
203
+ **/
204
+ define json_object => type {
205
+ parent map
206
+ public onCreate(...) => ..onCreate(:#rest or (:))
207
+ }
208
+
209
+ define json_rpccall(method::string, params=map, id='', host='') => {
210
+ #id == '' ? #host = Lasso_UniqueID;
211
+ #host == '' ? #host = 'http://localhost/lassoapps.8/rpc/rpc.lasso';
212
+ Return(Decode_JSON(Include_URL(#host, -PostParams=Encode_JSON(Map('method' = #method, 'params' = #params, 'id' = #id)))));
213
+ }
@@ -0,0 +1,41 @@
1
+ a = -> [1 to 50]
2
+ const b = --> [2 til 5]
3
+ var c = ~~> 10_000_000km * 500ms - 16~ff / 32~lol
4
+ e = (a) -> (b) ~> (c) --> (d, e) ~~> <[list of words]>
5
+ dashes-identifiers = ->
6
+ a - a b -- c 1-1 1- -1 a- a a -a
7
+ underscores_i$d = ->
8
+ /regexp1/
9
+ //regexp2//g
10
+ 'strings' and "strings" and \strings
11
+
12
+ [2 til 10]
13
+ |> map (* 2)
14
+ |> filter (> 5)
15
+ |> fold (+)
16
+
17
+ obj =
18
+ prop1: 1
19
+ prop2: 2
20
+
21
+ class Class extends Anc-est-or
22
+ (args) ->
23
+ <- # Comment
24
+ <~ /* Comment */
25
+ void undefined yes no on off
26
+ a.void b.undefined c.off d.if f.no g.not
27
+ avoid bundefined coff dif fno gnot
28
+ "inter #{2 + 2} #variable"
29
+ '''HELLO 'world' '''
30
+
31
+ copy = (from, to, callback) -->
32
+ error, data <- read file
33
+ return callback error if error?
34
+ error <~ write file, data
35
+ return callback error if error?
36
+ callback()
37
+
38
+ take(n, [x, ...xs]:list) =
39
+ | n <= 0 => []
40
+ | empty list => []
41
+ | otherwise => [x] +++ take n - 1, xs
@@ -0,0 +1,28 @@
1
+ %hook ABC
2
+ - (id)a:(B)b {
3
+ %log;
4
+ return %orig(nil);
5
+ }
6
+ %end
7
+
8
+ %subclass DEF: NSObject
9
+ - (id)init {
10
+ [%c(RuntimeAccessibleClass) alloc];
11
+ return nil;
12
+ }
13
+ %end
14
+
15
+ %group OptionalHooks
16
+ %hook ABC
17
+ - (void)release {
18
+ [self retain];
19
+ %orig;
20
+ }
21
+ %end
22
+ %end
23
+
24
+ %ctor {
25
+ %init;
26
+ if(OptionalCondition)
27
+ %init(OptionalHooks);
28
+ }
@@ -13,7 +13,8 @@ end
13
13
  a = rand(30);
14
14
  b = rand(30);
15
15
 
16
- c = a .* b ./ a \ (b .* a + b - a);
16
+ c = a .* b ./ a \ ... comment at end of line and continuation
17
+ (b .* a + b - a);
17
18
 
18
19
  c = a' * b'; % note: these ticks are for transpose, not quotes.
19
20
 
@@ -24,4 +25,6 @@ disp('a comment symbol, %, in a string');
24
25
  function y=myfunc(x)
25
26
  y = exp(x);
26
27
 
27
-
28
+ {%
29
+ a block comment
30
+ %}
@@ -0,0 +1,455 @@
1
+ module Treetop
2
+ module Compiler
3
+ grammar Metagrammar
4
+ rule treetop_file
5
+ requires:(space? require_statement)* prefix:space? module_or_grammar suffix:space? {
6
+ def compile
7
+ requires.text_value + prefix.text_value + module_or_grammar.compile + suffix.text_value
8
+ end
9
+ }
10
+ end
11
+
12
+ rule require_statement
13
+ prefix:space? "require" [ \t]+ [^\n\r]+ [\n\r]
14
+ end
15
+
16
+ rule module_or_grammar
17
+ module_declaration / grammar
18
+ end
19
+
20
+ rule module_declaration
21
+ prefix:('module' space name:([A-Z] alphanumeric_char* ('::' [A-Z] alphanumeric_char*)*) space) module_contents:(module_declaration / grammar) suffix:(space 'end') {
22
+ def compile
23
+ prefix.text_value + module_contents.compile + suffix.text_value
24
+ end
25
+
26
+ def parser_name
27
+ prefix.name.text_value+'::'+module_contents.parser_name
28
+ end
29
+ }
30
+ end
31
+
32
+ rule grammar
33
+ 'grammar' space grammar_name space ('do' space)? declaration_sequence space? 'end' <Grammar>
34
+ end
35
+
36
+ rule grammar_name
37
+ ([A-Z] alphanumeric_char*)
38
+ end
39
+
40
+ rule declaration_sequence
41
+ head:declaration tail:(space declaration)* <DeclarationSequence> {
42
+ def declarations
43
+ [head] + tail
44
+ end
45
+
46
+ def tail
47
+ super.elements.map { |elt| elt.declaration }
48
+ end
49
+ }
50
+ /
51
+ '' {
52
+ def compile(builder)
53
+ end
54
+ }
55
+ end
56
+
57
+ rule declaration
58
+ parsing_rule / include_declaration
59
+ end
60
+
61
+ rule include_declaration
62
+ 'include' space [A-Z] (alphanumeric_char / '::')* {
63
+ def compile(builder)
64
+ builder << text_value
65
+ end
66
+ }
67
+ end
68
+
69
+ rule parsing_rule
70
+ 'rule' space nonterminal space ('do' space)? parsing_expression space 'end' <ParsingRule>
71
+ end
72
+
73
+ rule parsing_expression
74
+ choice / sequence / primary
75
+ end
76
+
77
+ rule choice
78
+ head:alternative tail:(space? '/' space? alternative)+ <Choice> {
79
+ def alternatives
80
+ [head] + tail
81
+ end
82
+
83
+ def tail
84
+ super.elements.map {|elt| elt.alternative}
85
+ end
86
+
87
+ def inline_modules
88
+ (alternatives.map {|alt| alt.inline_modules }).flatten
89
+ end
90
+ }
91
+ end
92
+
93
+ rule sequence
94
+ head:labeled_sequence_primary tail:(space labeled_sequence_primary)+ node_class_declarations <Sequence> {
95
+ def sequence_elements
96
+ [head] + tail
97
+ end
98
+
99
+ def tail
100
+ super.elements.map {|elt| elt.labeled_sequence_primary }
101
+ end
102
+
103
+ def inline_modules
104
+ (sequence_elements.map {|elt| elt.inline_modules}).flatten +
105
+ [sequence_element_accessor_module] +
106
+ node_class_declarations.inline_modules
107
+ end
108
+
109
+ def inline_module_name
110
+ node_class_declarations.inline_module_name
111
+ end
112
+ }
113
+ end
114
+
115
+ rule alternative
116
+ sequence / primary
117
+ end
118
+
119
+ rule primary
120
+ prefix atomic {
121
+ def compile(address, builder, parent_expression=nil)
122
+ prefix.compile(address, builder, self)
123
+ end
124
+
125
+ def prefixed_expression
126
+ atomic
127
+ end
128
+
129
+ def inline_modules
130
+ atomic.inline_modules
131
+ end
132
+
133
+ def inline_module_name
134
+ nil
135
+ end
136
+ }
137
+ /
138
+ prefix space? predicate_block {
139
+ def compile(address, builder, parent_expression=nil)
140
+ prefix.compile(address, builder, self)
141
+ end
142
+ def prefixed_expression
143
+ predicate_block
144
+ end
145
+ def inline_modules
146
+ []
147
+ end
148
+ }
149
+ /
150
+ atomic suffix node_class_declarations {
151
+ def compile(address, builder, parent_expression=nil)
152
+ suffix.compile(address, builder, self)
153
+ end
154
+
155
+ def optional_expression
156
+ atomic
157
+ end
158
+
159
+ def node_class_name
160
+ node_class_declarations.node_class_name
161
+ end
162
+
163
+ def inline_modules
164
+ atomic.inline_modules + node_class_declarations.inline_modules
165
+ end
166
+
167
+ def inline_module_name
168
+ node_class_declarations.inline_module_name
169
+ end
170
+ }
171
+ /
172
+ atomic node_class_declarations {
173
+ def compile(address, builder, parent_expression=nil)
174
+ atomic.compile(address, builder, self)
175
+ end
176
+
177
+ def node_class_name
178
+ node_class_declarations.node_class_name
179
+ end
180
+
181
+ def inline_modules
182
+ atomic.inline_modules + node_class_declarations.inline_modules
183
+ end
184
+
185
+ def inline_module_name
186
+ node_class_declarations.inline_module_name
187
+ end
188
+ }
189
+ end
190
+
191
+ rule labeled_sequence_primary
192
+ label sequence_primary {
193
+ def compile(lexical_address, builder)
194
+ sequence_primary.compile(lexical_address, builder)
195
+ end
196
+
197
+ def inline_modules
198
+ sequence_primary.inline_modules
199
+ end
200
+
201
+ def label_name
202
+ if label.name
203
+ label.name
204
+ elsif sequence_primary.instance_of?(Nonterminal)
205
+ sequence_primary.text_value
206
+ else
207
+ nil
208
+ end
209
+ end
210
+ }
211
+ end
212
+
213
+ rule label
214
+ (alpha_char alphanumeric_char*) ':' {
215
+ def name
216
+ elements[0].text_value
217
+ end
218
+ }
219
+ /
220
+ '' {
221
+ def name
222
+ nil
223
+ end
224
+ }
225
+ end
226
+
227
+ rule sequence_primary
228
+ prefix atomic {
229
+ def compile(lexical_address, builder)
230
+ prefix.compile(lexical_address, builder, self)
231
+ end
232
+
233
+ def prefixed_expression
234
+ elements[1]
235
+ end
236
+
237
+ def inline_modules
238
+ atomic.inline_modules
239
+ end
240
+
241
+ def inline_module_name
242
+ nil
243
+ end
244
+ }
245
+ /
246
+ prefix space? predicate_block {
247
+ def compile(address, builder, parent_expression=nil)
248
+ prefix.compile(address, builder, self)
249
+ end
250
+ def prefixed_expression
251
+ predicate_block
252
+ end
253
+ def inline_modules
254
+ []
255
+ end
256
+ }
257
+ /
258
+ atomic suffix {
259
+ def compile(lexical_address, builder)
260
+ suffix.compile(lexical_address, builder, self)
261
+ end
262
+
263
+ def node_class_name
264
+ nil
265
+ end
266
+
267
+ def inline_modules
268
+ atomic.inline_modules
269
+ end
270
+
271
+ def inline_module_name
272
+ nil
273
+ end
274
+ }
275
+ /
276
+ atomic
277
+ end
278
+
279
+ rule suffix
280
+ repetition_suffix / optional_suffix
281
+ end
282
+
283
+ rule optional_suffix
284
+ '?' <Optional>
285
+ end
286
+
287
+ rule node_class_declarations
288
+ node_class_expression trailing_inline_module {
289
+ def node_class_name
290
+ node_class_expression.node_class_name
291
+ end
292
+
293
+ def inline_modules
294
+ trailing_inline_module.inline_modules
295
+ end
296
+
297
+ def inline_module
298
+ trailing_inline_module.inline_module
299
+ end
300
+
301
+ def inline_module_name
302
+ inline_module.module_name if inline_module
303
+ end
304
+ }
305
+ end
306
+
307
+ rule repetition_suffix
308
+ '+' <OneOrMore> / '*' <ZeroOrMore> / occurrence_range
309
+ end
310
+
311
+ rule occurrence_range
312
+ space? min:([0-9])* '..' max:([0-9])* <OccurrenceRange>
313
+ end
314
+
315
+ rule prefix
316
+ '&' <AndPredicate> / '!' <NotPredicate> / '~' <TransientPrefix>
317
+ end
318
+
319
+ rule atomic
320
+ terminal
321
+ /
322
+ nonterminal
323
+ /
324
+ parenthesized_expression
325
+ end
326
+
327
+ rule parenthesized_expression
328
+ '(' space? parsing_expression space? ')' <ParenthesizedExpression> {
329
+ def inline_modules
330
+ parsing_expression.inline_modules
331
+ end
332
+ }
333
+ end
334
+
335
+ rule nonterminal
336
+ !keyword_inside_grammar (alpha_char alphanumeric_char*) <Nonterminal>
337
+ end
338
+
339
+ rule terminal
340
+ quoted_string / character_class / anything_symbol
341
+ end
342
+
343
+ rule quoted_string
344
+ (single_quoted_string / double_quoted_string) {
345
+ def string
346
+ super.text_value
347
+ end
348
+ }
349
+ end
350
+
351
+ rule double_quoted_string
352
+ '"' string:(!'"' ("\\\\" / '\"' / .))* '"' <Terminal>
353
+ end
354
+
355
+ rule single_quoted_string
356
+ "'" string:(!"'" ("\\\\" / "\\'" / .))* "'" <Terminal>
357
+ end
358
+
359
+ rule character_class
360
+ '[' characters:(!']' ('\\' . / bracket_expression / !'\\' .))+ ']' <CharacterClass> {
361
+ def characters
362
+ super.text_value
363
+ end
364
+ }
365
+ end
366
+
367
+ rule bracket_expression
368
+ '[:' '^'? (
369
+ 'alnum' / 'alpha' / 'blank' / 'cntrl' / 'digit' / 'graph' / 'lower' /
370
+ 'print' / 'punct' / 'space' / 'upper' / 'xdigit' / 'word'
371
+ ) ':]'
372
+ end
373
+
374
+ rule anything_symbol
375
+ '.' <AnythingSymbol>
376
+ end
377
+
378
+ rule node_class_expression
379
+ space '<' (!'>' .)+ '>' {
380
+ def node_class_name
381
+ elements[2].text_value
382
+ end
383
+ }
384
+ /
385
+ '' {
386
+ def node_class_name
387
+ nil
388
+ end
389
+ }
390
+ end
391
+
392
+ rule trailing_inline_module
393
+ space inline_module {
394
+ def inline_modules
395
+ [inline_module]
396
+ end
397
+
398
+ def inline_module_name
399
+ inline_module.module_name
400
+ end
401
+ }
402
+ /
403
+ '' {
404
+ def inline_modules
405
+ []
406
+ end
407
+
408
+ def inline_module
409
+ nil
410
+ end
411
+
412
+ def inline_module_name
413
+ nil
414
+ end
415
+ }
416
+ end
417
+
418
+ rule predicate_block
419
+ '' inline_module <PredicateBlock>
420
+ end
421
+
422
+ rule inline_module
423
+ '{' (inline_module / ![{}] .)* '}' <InlineModule>
424
+ end
425
+
426
+ rule keyword_inside_grammar
427
+ ('rule' / 'end') !non_space_char
428
+ end
429
+
430
+ rule non_space_char
431
+ !space .
432
+ end
433
+
434
+ rule alpha_char
435
+ [A-Za-z_]
436
+ end
437
+
438
+ rule alphanumeric_char
439
+ alpha_char / [0-9]
440
+ end
441
+
442
+ rule space
443
+ (white / comment_to_eol)+
444
+ end
445
+
446
+ rule comment_to_eol
447
+ '#' (!"\n" .)*
448
+ end
449
+
450
+ rule white
451
+ [ \t\n\r]
452
+ end
453
+ end
454
+ end
455
+ end