mirah 0.0.7-java → 0.0.8-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. data/History.txt +181 -0
  2. data/README.txt +6 -10
  3. data/Rakefile +86 -9
  4. data/bin/mirah +2 -0
  5. data/bin/mirahc +2 -0
  6. data/bin/mirahp +2 -0
  7. data/{bin/dubyp → examples/interfaces.mirah} +16 -9
  8. data/examples/macros/square.mirah +12 -0
  9. data/examples/macros/square_int.mirah +12 -0
  10. data/examples/macros/string-each-char.mirah +14 -0
  11. data/examples/maven/README.txt +2 -0
  12. data/examples/maven/pom.xml +23 -0
  13. data/examples/maven/src/main/mirah/hello_mirah.mirah +9 -0
  14. data/examples/rosettacode/100-doors.mirah +44 -0
  15. data/examples/rosettacode/99-bottles-of-beer.mirah +13 -0
  16. data/examples/rosettacode/README.txt +9 -0
  17. data/examples/rosettacode/boolean-values.mirah +29 -0
  18. data/examples/rosettacode/comments.mirah +2 -0
  19. data/examples/rosettacode/copy-a-string.mirah +10 -0
  20. data/examples/rosettacode/count-occurrences-of-a-substring.mirah +40 -0
  21. data/examples/rosettacode/create-a-file.mirah +6 -0
  22. data/examples/rosettacode/empty-string.mirah +9 -0
  23. data/examples/rosettacode/factorial.mirah +10 -0
  24. data/examples/rosettacode/fibonacci.mirah +21 -0
  25. data/examples/rosettacode/file-size.mirah +5 -0
  26. data/examples/rosettacode/fizz-buzz.mirah +21 -0
  27. data/examples/rosettacode/flatten-a-list.mirah +24 -0
  28. data/examples/rosettacode/guess-the-number.mirah +21 -0
  29. data/examples/rosettacode/is-string-numeric.mirah +127 -0
  30. data/examples/rosettacode/palindrome.mirah +14 -0
  31. data/examples/rosettacode/repeat-a-string.mirah +9 -0
  32. data/examples/rosettacode/reverse-a-string.mirah +6 -0
  33. data/examples/rosettacode/rot-13.mirah +20 -0
  34. data/examples/rosettacode/user-input.mirah +4 -0
  35. data/examples/sort_closure.mirah +1 -1
  36. data/javalib/dynalink-0.2.jar +0 -0
  37. data/javalib/mirah-bootstrap.jar +0 -0
  38. data/lib/mirah.rb +7 -16
  39. data/lib/mirah/ast.rb +22 -92
  40. data/lib/mirah/ast/call.rb +41 -9
  41. data/lib/mirah/ast/class.rb +34 -6
  42. data/lib/mirah/ast/flow.rb +17 -5
  43. data/lib/mirah/ast/intrinsics.rb +50 -8
  44. data/lib/mirah/ast/literal.rb +7 -0
  45. data/lib/mirah/ast/local.rb +9 -1
  46. data/lib/mirah/ast/method.rb +21 -8
  47. data/lib/mirah/ast/scope.rb +1 -1
  48. data/lib/mirah/ast/structure.rb +81 -15
  49. data/lib/mirah/ast/type.rb +4 -0
  50. data/{bin/dubyc → lib/mirah/commands.rb} +4 -11
  51. data/lib/mirah/commands/base.rb +54 -0
  52. data/lib/mirah/commands/compile.rb +39 -0
  53. data/{examples/wiki/Rakefile → lib/mirah/commands/parse.rb} +18 -17
  54. data/lib/mirah/commands/run.rb +73 -0
  55. data/lib/mirah/compiler.rb +37 -417
  56. data/lib/mirah/compiler/call.rb +45 -0
  57. data/lib/mirah/compiler/class.rb +81 -0
  58. data/lib/mirah/compiler/flow.rb +109 -0
  59. data/lib/mirah/compiler/literal.rb +130 -0
  60. data/lib/mirah/compiler/local.rb +59 -0
  61. data/lib/mirah/compiler/method.rb +44 -0
  62. data/lib/mirah/compiler/structure.rb +65 -0
  63. data/lib/mirah/compiler/type.rb +27 -0
  64. data/lib/mirah/env.rb +4 -6
  65. data/lib/mirah/generator.rb +61 -0
  66. data/lib/mirah/jvm/compiler.rb +8 -867
  67. data/lib/mirah/jvm/compiler/base.rb +270 -0
  68. data/lib/mirah/jvm/compiler/java_source.rb +779 -0
  69. data/lib/mirah/jvm/compiler/jvm_bytecode.rb +851 -0
  70. data/lib/mirah/jvm/method_lookup.rb +21 -2
  71. data/lib/mirah/jvm/source_generator/builder.rb +10 -13
  72. data/lib/mirah/jvm/source_generator/loops.rb +99 -93
  73. data/lib/mirah/jvm/source_generator/precompile.rb +3 -2
  74. data/lib/mirah/jvm/typer.rb +3 -3
  75. data/lib/mirah/jvm/types.rb +10 -426
  76. data/lib/mirah/jvm/types/array_type.rb +62 -0
  77. data/lib/mirah/jvm/types/basic_types.rb +1 -0
  78. data/lib/mirah/jvm/types/dynamic_type.rb +46 -0
  79. data/lib/mirah/jvm/types/factory.rb +23 -5
  80. data/lib/mirah/jvm/types/interface_definition.rb +20 -0
  81. data/lib/mirah/jvm/types/intrinsics.rb +15 -3
  82. data/lib/mirah/jvm/types/meta_type.rb +45 -0
  83. data/lib/mirah/jvm/types/methods.rb +12 -5
  84. data/lib/mirah/jvm/types/null_type.rb +27 -0
  85. data/lib/mirah/jvm/types/primitive_type.rb +38 -0
  86. data/lib/mirah/jvm/types/source_mirror.rb +266 -0
  87. data/lib/mirah/jvm/types/type.rb +173 -0
  88. data/lib/mirah/jvm/types/type_definition.rb +55 -0
  89. data/lib/mirah/jvm/types/unreachable_type.rb +27 -0
  90. data/lib/mirah/jvm/types/void_type.rb +19 -0
  91. data/lib/mirah/parser.rb +90 -0
  92. data/lib/mirah/plugin/gwt.rb +5 -5
  93. data/lib/mirah/plugin/java.rb +1 -1
  94. data/lib/mirah/transform.rb +4 -321
  95. data/lib/mirah/transform/ast_ext.rb +63 -0
  96. data/lib/mirah/transform/error.rb +13 -0
  97. data/lib/mirah/transform/helper.rb +761 -0
  98. data/lib/mirah/transform/transformer.rb +255 -0
  99. data/lib/mirah/typer.rb +2 -383
  100. data/{bin/duby → lib/mirah/typer/base.rb} +12 -10
  101. data/lib/mirah/typer/simple.rb +377 -0
  102. data/lib/mirah/util/argument_processor.rb +114 -0
  103. data/lib/mirah/util/class_loader.rb +37 -0
  104. data/lib/mirah/util/compilation_state.rb +51 -0
  105. data/lib/mirah/util/process_errors.rb +33 -0
  106. data/lib/mirah/version.rb +1 -1
  107. data/lib/mirah_task.rb +3 -2
  108. data/test/{test_ast.rb → core/test_ast.rb} +6 -0
  109. data/test/{test_compilation.rb → core/test_compilation.rb} +0 -0
  110. data/test/{test_env.rb → core/test_env.rb} +24 -25
  111. data/test/{test_macros.rb → core/test_macros.rb} +2 -4
  112. data/test/{test_typer.rb → core/test_typer.rb} +0 -3
  113. data/test/jvm/bytecode_test_helper.rb +181 -0
  114. data/test/{test_javac_compiler.rb → jvm/javac_test_helper.rb} +38 -22
  115. data/test/jvm/test_enumerable.rb +304 -0
  116. data/test/{test_java_typer.rb → jvm/test_java_typer.rb} +2 -4
  117. data/test/{test_jvm_compiler.rb → jvm/test_jvm_compiler.rb} +146 -443
  118. data/test/jvm/test_macros.rb +147 -0
  119. data/test/jvm/test_main_method.rb +15 -0
  120. data/test/{test_gwt.rb → plugins/test_gwt.rb} +0 -2
  121. metadata +103 -91
  122. data/bin/jrubyp +0 -52
  123. data/examples/wiki/src/org/mirah/wiki/MirahWiki.duby +0 -339
  124. data/examples/wiki/src/org/mirah/wiki/edit.eduby.html +0 -42
  125. data/examples/wiki/src/org/mirah/wiki/error.eduby.html +0 -2
  126. data/examples/wiki/src/org/mirah/wiki/layout.eduby.html +0 -69
  127. data/examples/wiki/src/org/mirah/wiki/parser.eduby.html +0 -7
  128. data/examples/wiki/src/org/mirah/wiki/view.eduby.html +0 -15
  129. data/examples/wiki/war/WEB-INF/classes/test/HeredocContext.class +0 -0
  130. data/examples/wiki/war/WEB-INF/classes/test/MirahParser.class +0 -0
  131. data/examples/wiki/war/WEB-INF/lib/appengine-api.jar +0 -0
  132. data/examples/wiki/war/WEB-INF/lib/dubydatastore.jar +0 -0
  133. data/examples/wiki/war/WEB-INF/lib/jmeta-runtime.jar +0 -0
  134. data/examples/wiki/war/WEB-INF/lib/pegdown-stubs.jar +0 -0
  135. data/examples/wiki/war/WEB-INF/pegdown.jar +0 -0
  136. data/examples/wiki/war/app.yaml +0 -21
  137. data/examples/wiki/war/public/favicon.ico +0 -0
  138. data/examples/wiki/war/public/images/appengine_duby.png +0 -0
  139. data/examples/wiki/war/public/images/back.gif +0 -0
  140. data/examples/wiki/war/public/images/dir.gif +0 -0
  141. data/examples/wiki/war/public/images/file.gif +0 -0
  142. data/examples/wiki/war/public/javascripts/prettify.js +0 -61
  143. data/examples/wiki/war/public/robots.txt +0 -0
  144. data/examples/wiki/war/public/stylesheets/main.css +0 -156
  145. data/examples/wiki/war/public/stylesheets/prettify.css +0 -1
  146. data/examples/wiki/war/public/stylesheets/sh_style.css +0 -66
  147. data/examples/wiki/war/public/stylesheets/source.css +0 -21
  148. data/examples/wiki/war/public/wmd/images/bg-fill.png +0 -0
  149. data/examples/wiki/war/public/wmd/images/bg.png +0 -0
  150. data/examples/wiki/war/public/wmd/images/blockquote.png +0 -0
  151. data/examples/wiki/war/public/wmd/images/bold.png +0 -0
  152. data/examples/wiki/war/public/wmd/images/code.png +0 -0
  153. data/examples/wiki/war/public/wmd/images/h1.png +0 -0
  154. data/examples/wiki/war/public/wmd/images/hr.png +0 -0
  155. data/examples/wiki/war/public/wmd/images/img.png +0 -0
  156. data/examples/wiki/war/public/wmd/images/italic.png +0 -0
  157. data/examples/wiki/war/public/wmd/images/link.png +0 -0
  158. data/examples/wiki/war/public/wmd/images/ol.png +0 -0
  159. data/examples/wiki/war/public/wmd/images/redo.png +0 -0
  160. data/examples/wiki/war/public/wmd/images/separator.png +0 -0
  161. data/examples/wiki/war/public/wmd/images/ul.png +0 -0
  162. data/examples/wiki/war/public/wmd/images/undo.png +0 -0
  163. data/examples/wiki/war/public/wmd/images/wmd-on.png +0 -0
  164. data/examples/wiki/war/public/wmd/images/wmd.png +0 -0
  165. data/examples/wiki/war/public/wmd/showdown.js +0 -421
  166. data/examples/wiki/war/public/wmd/wmd-base.js +0 -1799
  167. data/examples/wiki/war/public/wmd/wmd-plus.js +0 -311
  168. data/examples/wiki/war/public/wmd/wmd.js +0 -73
  169. data/examples/wiki/war/src/org/mirah/wiki/MirahWiki.duby +0 -339
  170. data/examples/wiki/war/src/org/mirah/wiki/edit.eduby.html +0 -42
  171. data/examples/wiki/war/src/org/mirah/wiki/error.eduby.html +0 -2
  172. data/examples/wiki/war/src/org/mirah/wiki/layout.eduby.html +0 -69
  173. data/examples/wiki/war/src/org/mirah/wiki/parser.eduby.html +0 -7
  174. data/examples/wiki/war/src/org/mirah/wiki/view.eduby.html +0 -15
  175. data/javalib/dynalink-0.1.jar +0 -0
  176. data/javalib/jsr292-mock.jar +0 -0
  177. data/lib/mirah/class_loader.rb +0 -35
  178. data/lib/mirah/compilation_state.rb +0 -28
  179. data/lib/mirah/impl.rb +0 -273
  180. data/lib/mirah/jvm/base.rb +0 -267
  181. data/lib/mirah/jvm/source_compiler.rb +0 -760
  182. data/lib/mirah/transform2.rb +0 -752
@@ -1,311 +0,0 @@
1
- var Attacklab=Attacklab||{};
2
- Attacklab.wmdPlus=function(){
3
- this.symboltable;
4
- var _1=top;
5
- var _2=_1["Attacklab"];
6
- var _3=_1["document"];
7
- var _4=_1["RegExp"];
8
- var _5=_1["navigator"];
9
- var _6=_2.Util;
10
- var _7=_2.Position;
11
- var _8=_2.Command;
12
- _8.doAutoindent=function(_9){
13
- _9.before=_9.before.replace(/(\n|^)[ ]{0,3}([*+-]|\d+[.])[ \t]*\n$/,"\n\n");
14
- _9.before=_9.before.replace(/(\n|^)[ ]{0,3}>[ \t]*\n$/,"\n\n");
15
- _9.before=_9.before.replace(/(\n|^)[ \t]+\n$/,"\n\n");
16
- if(/(\n|^)[ ]{0,3}([*+-]|\d+[.])[ \t]+.*\n$/.test(_9.before)){
17
- if(_8.doList){
18
- _8.doList(_9);
19
- }
20
- }
21
- if(/(\n|^)[ ]{0,3}>[ \t]+.*\n$/.test(_9.before)){
22
- if(_8.doBlockquote){
23
- _8.doBlockquote(_9);
24
- }
25
- }
26
- if(/(\n|^)(\t|[ ]{4,}).*\n$/.test(_9.before)){
27
- if(_8.doCode){
28
- _8.doCode(_9);
29
- }
30
- }
31
- };
32
- _8.doBlockquote=function(_a){
33
- _a.selection=_a.selection.replace(/^(\n*)([^\r]+?)(\n*)$/,function(_b,_c,_d,_e){
34
- _a.before+=_c;
35
- _a.after=_e+_a.after;
36
- return _d;
37
- });
38
- _a.before=_a.before.replace(/(>[ \t]*)$/,function(_f,_10){
39
- _a.selection=_10+_a.selection;
40
- return "";
41
- });
42
- _a.selection=_a.selection.replace(/^(\s|>)+$/,"");
43
- _a.selection=_a.selection||"Blockquote";
44
- if(_a.before){
45
- _a.before=_a.before.replace(/\n?$/,"\n");
46
- }
47
- if(_a.after){
48
- _a.after=_a.after.replace(/^\n?/,"\n");
49
- }
50
- _a.before=_a.before.replace(/(((\n|^)(\n[ \t]*)*>(.+\n)*.*)+(\n[ \t]*)*$)/,function(_11){
51
- _a.startTag=_11;
52
- return "";
53
- });
54
- _a.after=_a.after.replace(/^(((\n|^)(\n[ \t]*)*>(.+\n)*.*)+(\n[ \t]*)*)/,function(_12){
55
- _a.endTag=_12;
56
- return "";
57
- });
58
- var _13=function(_14){
59
- var _15=_14?"> ":"";
60
- if(_a.startTag){
61
- _a.startTag=_a.startTag.replace(/\n((>|\s)*)\n$/,function(_16,_17){
62
- return "\n"+_17.replace(/^[ ]{0,3}>?[ \t]*$/gm,_15)+"\n";
63
- });
64
- }
65
- if(_a.endTag){
66
- _a.endTag=_a.endTag.replace(/^\n((>|\s)*)\n/,function(_18,_19){
67
- return "\n"+_19.replace(/^[ ]{0,3}>?[ \t]*$/gm,_15)+"\n";
68
- });
69
- }
70
- };
71
- if(/^(?![ ]{0,3}>)/m.test(_a.selection)){
72
- _8.wrap(_a,_2.wmd_env.lineLength-2);
73
- _a.selection=_a.selection.replace(/^/gm,"> ");
74
- _13(true);
75
- _a.skipLines();
76
- }else{
77
- _a.selection=_a.selection.replace(/^[ ]{0,3}> ?/gm,"");
78
- _8.unwrap(_a);
79
- _13(false);
80
- if(!/^(\n|^)[ ]{0,3}>/.test(_a.selection)){
81
- if(_a.startTag){
82
- _a.startTag=_a.startTag.replace(/\n{0,2}$/,"\n\n");
83
- }
84
- }
85
- if(!/(\n|^)[ ]{0,3}>.*$/.test(_a.selection)){
86
- if(_a.endTag){
87
- _a.endTag=_a.endTag.replace(/^\n{0,2}/,"\n\n");
88
- }
89
- }
90
- }
91
- if(!/\n/.test(_a.selection)){
92
- _a.selection=_a.selection.replace(/^(> *)/,function(_1a,_1b){
93
- _a.startTag+=_1b;
94
- return "";
95
- });
96
- }
97
- };
98
- _8.doCode=function(_1c){
99
- var _1d=/\S[ ]*$/.test(_1c.before);
100
- var _1e=/^[ ]*\S/.test(_1c.after);
101
- if((!_1e&&!_1d)||/\n/.test(_1c.selection)){
102
- _1c.before=_1c.before.replace(/[ ]{4}$/,function(_1f){
103
- _1c.selection=_1f+_1c.selection;
104
- return "";
105
- });
106
- var _20=1;
107
- var _21=1;
108
- if(/\n(\t|[ ]{4,}).*\n$/.test(_1c.before)){
109
- _20=0;
110
- }
111
- if(/^\n(\t|[ ]{4,})/.test(_1c.after)){
112
- _21=0;
113
- }
114
- _1c.skipLines(_20,_21);
115
- if(!_1c.selection){
116
- _1c.startTag=" ";
117
- _1c.selection="print(\"code sample\");";
118
- return;
119
- }
120
- if(/^[ ]{0,3}\S/m.test(_1c.selection)){
121
- _1c.selection=_1c.selection.replace(/^/gm," ");
122
- }else{
123
- _1c.selection=_1c.selection.replace(/^[ ]{4}/gm,"");
124
- }
125
- }else{
126
- _1c.trimWhitespace();
127
- _1c.findTags(/`/,/`/);
128
- if(!_1c.startTag&&!_1c.endTag){
129
- _1c.startTag=_1c.endTag="`";
130
- if(!_1c.selection){
131
- _1c.selection="print(\"code sample\");";
132
- }
133
- }else{
134
- if(_1c.endTag&&!_1c.startTag){
135
- _1c.before+=_1c.endTag;
136
- _1c.endTag="";
137
- }else{
138
- _1c.startTag=_1c.endTag="";
139
- }
140
- }
141
- }
142
- };
143
- _8.autoindent={};
144
- _8.autoindent.textOp=_8.doAutoindent;
145
- _8.blockquote={};
146
- _8.blockquote.description="Blockquote <blockquote>";
147
- _8.blockquote.image="images/blockquote.png";
148
- _8.blockquote.key=".";
149
- _8.blockquote.keyCode=190;
150
- _8.blockquote.textOp=function(_22){
151
- return _8.doBlockquote(_22);
152
- };
153
- _8.code={};
154
- _8.code.description="Code Sample <pre><code>";
155
- _8.code.image="images/code.png";
156
- _8.code.key="k";
157
- _8.code.textOp=_8.doCode;
158
- _8.img={};
159
- _8.img.description="Image <img>";
160
- _8.img.image="images/img.png";
161
- _8.img.key="g";
162
- _8.img.textOp=function(_23,_24){
163
- return _8.doLinkOrImage(_23,true,_24);
164
- };
165
- _8.doList=function(_25,_26){
166
- var _27=/(([ ]{0,3}([*+-]|\d+[.])[ \t]+.*)(\n.+|\n{2,}([*+-].*|\d+[.])[ \t]+.*|\n{2,}[ \t]+\S.*)*)\n*/;
167
- var _28="";
168
- var _29=1;
169
- var _2a=function(){
170
- if(_26){
171
- var _2b=" "+_29+". ";
172
- _29++;
173
- return _2b;
174
- }
175
- var _2c=_28||"-";
176
- return " "+_2c+" ";
177
- };
178
- var _2d=function(_2e){
179
- if(_26==undefined){
180
- _26=/^\s*\d/.test(_2e);
181
- }
182
- _2e=_2e.replace(/^[ ]{0,3}([*+-]|\d+[.])\s/gm,function(_2f){
183
- return _2a();
184
- });
185
- return _2e;
186
- };
187
- var _30=function(){
188
- _31=_6.regexToString(_27);
189
- _31.expression="^\n*"+_31.expression;
190
- var _32=_6.stringToRegex(_31);
191
- _25.after=_25.after.replace(_32,_2d);
192
- };
193
- _25.findTags(/(\n|^)*[ ]{0,3}([*+-]|\d+[.])\s+/,null);
194
- var _33=/^\n/;
195
- if(_25.before&&!/\n$/.test(_25.before)&&!_33.test(_25.startTag)){
196
- _25.before+=_25.startTag;
197
- _25.startTag="";
198
- }
199
- if(_25.startTag){
200
- var _34=/\d+[.]/.test(_25.startTag);
201
- _25.startTag="";
202
- _25.selection=_25.selection.replace(/\n[ ]{4}/g,"\n");
203
- _8.unwrap(_25);
204
- _25.skipLines();
205
- if(_34){
206
- _30();
207
- }
208
- if(_26==_34){
209
- return;
210
- }
211
- }
212
- var _35=1;
213
- var _31=_6.regexToString(_27);
214
- _31.expression="(\\n|^)"+_31.expression+"$";
215
- var _36=_6.stringToRegex(_31);
216
- _25.before=_25.before.replace(_36,function(_37){
217
- if(/^\s*([*+-])/.test(_37)){
218
- _28=_4.$1;
219
- }
220
- _35=/[^\n]\n\n[^\n]/.test(_37)?1:0;
221
- return _2d(_37);
222
- });
223
- if(!_25.selection){
224
- _25.selection="List item";
225
- }
226
- var _38=_2a();
227
- var _39=1;
228
- _31=_6.regexToString(_27);
229
- _31.expression="^\n*"+_31.expression;
230
- _36=_6.stringToRegex(_31);
231
- _25.after=_25.after.replace(_36,function(_3a){
232
- _39=/[^\n]\n\n[^\n]/.test(_3a)?1:0;
233
- return _2d(_3a);
234
- });
235
- _25.trimWhitespace(true);
236
- _25.skipLines(_35,_39,true);
237
- _25.startTag=_38;
238
- var _3b=_38.replace(/./g," ");
239
- _8.wrap(_25,_2.wmd_env.lineLength-_3b.length);
240
- _25.selection=_25.selection.replace(/\n/g,"\n"+_3b);
241
- };
242
- _8.doHeading=function(_3c){
243
- _3c.selection=_3c.selection.replace(/\s+/g," ");
244
- _3c.selection=_3c.selection.replace(/(^\s+|\s+$)/g,"");
245
- var _3d=0;
246
- _3c.findTags(/#+[ ]*/,/[ ]*#+/);
247
- if(/#+/.test(_3c.startTag)){
248
- _3d=_4.lastMatch.length;
249
- }
250
- _3c.startTag=_3c.endTag="";
251
- _3c.findTags(null,/\s?(-+|=+)/);
252
- if(/=+/.test(_3c.endTag)){
253
- _3d=1;
254
- }
255
- if(/-+/.test(_3c.endTag)){
256
- _3d=2;
257
- }
258
- _3c.startTag=_3c.endTag="";
259
- _3c.skipLines(1,1);
260
- if(!_3c.selection){
261
- _3c.startTag="## ";
262
- _3c.selection="Heading";
263
- _3c.endTag=" ##";
264
- return;
265
- }
266
- var _3e=_3d==0?2:_3d-1;
267
- if(_3e){
268
- var _3f=_3e>=2?"-":"=";
269
- var _40=_3c.selection.length;
270
- if(_40>_2.wmd_env.lineLength){
271
- _40=_2.wmd_env.lineLength;
272
- }
273
- _3c.endTag="\n";
274
- while(_40--){
275
- _3c.endTag+=_3f;
276
- }
277
- }
278
- };
279
- _8.ol={};
280
- _8.ol.description="Numbered List <ol>";
281
- _8.ol.image="images/ol.png";
282
- _8.ol.key="o";
283
- _8.ol.textOp=function(_41){
284
- _8.doList(_41,true);
285
- };
286
- _8.ul={};
287
- _8.ul.description="Bulleted List <ul>";
288
- _8.ul.image="images/ul.png";
289
- _8.ul.key="u";
290
- _8.ul.textOp=function(_42){
291
- _8.doList(_42,false);
292
- };
293
- _8.h1={};
294
- _8.h1.description="Heading <h1>/<h2>";
295
- _8.h1.image="images/h1.png";
296
- _8.h1.key="h";
297
- _8.h1.textOp=_8.doHeading;
298
- _8.hr={};
299
- _8.hr.description="Horizontal Rule <hr>";
300
- _8.hr.image="images/hr.png";
301
- _8.hr.key="r";
302
- _8.hr.textOp=function(_43){
303
- _43.startTag="----------\n";
304
- _43.selection="";
305
- _43.skipLines(2,1,true);
306
- };
307
- };
308
- if(Attacklab.fileLoaded){
309
- Attacklab.fileLoaded("wmd-plus.js");
310
- }
311
-
@@ -1,73 +0,0 @@
1
- var Attacklab=Attacklab||{};
2
- Attacklab.wmd_env={};
3
- Attacklab.account_options={};
4
- Attacklab.wmd_defaults={version:1,output:"HTML",lineLength:40,delayLoad:false};
5
- if(!Attacklab.wmd){
6
- Attacklab.wmd=function(){
7
- Attacklab.loadEnv=function(){
8
- var _1=function(_2){
9
- if(!_2){
10
- return;
11
- }
12
- for(var _3 in _2){
13
- Attacklab.wmd_env[_3]=_2[_3];
14
- }
15
- };
16
- _1(Attacklab.wmd_defaults);
17
- _1(Attacklab.account_options);
18
- _1(top["wmd_options"]);
19
- Attacklab.full=true;
20
- var _4="bold italic | link blockquote code image | ol ul heading hr";
21
- Attacklab.wmd_env.buttons=Attacklab.wmd_env.buttons||_4;
22
- };
23
- Attacklab.loadEnv();
24
- var _5=["showdown.js","wmd-base.js","wmd-plus.js"];
25
- var _6=function(_7){
26
- };
27
- Attacklab.fileLoaded=function(_8){
28
- arguments.callee.count=arguments.callee.count||0;
29
- if(++arguments.callee.count>=_5.length){
30
- var go=function(){
31
- Attacklab.wmdBase();
32
- Attacklab.Util.startEditor();
33
- };
34
- if(Attacklab.wmd_env.delayLoad){
35
- window.setTimeout(go,0);
36
- }else{
37
- go();
38
- }
39
- }
40
- };
41
- Attacklab.editorInit=function(){
42
- Attacklab.wmdPlus();
43
- };
44
- var _a=function(_b,_c){
45
- var _d=Attacklab.basePath+_b;
46
- if(_c){
47
- _d+="?nocache="+(new Date()).getTime();
48
- }
49
- var _e=document.createElement("script");
50
- _e.src=_d;
51
- top.document.documentElement.firstChild.appendChild(_e);
52
- };
53
- var _f=function(_10){
54
- var _11=RegExp("(.*)"+_10+"(\\?(.+))?$","g");
55
- var _12=document.getElementsByTagName("script");
56
- for(var i=0;i<_12.length;i++){
57
- if(_11.test(_12[i].src)){
58
- var _14=RegExp.$1;
59
- if(/wmd-editor.com/.test(_12[i].src)){
60
- return null;
61
- }
62
- return _14;
63
- }
64
- }
65
- };
66
- Attacklab.basePath=_f("wmd.js")||"http://static.wmd-editor.com/v2/";
67
- for(var f,i=0;f=_5[i];i++){
68
- _a(f,false);
69
- }
70
- };
71
- Attacklab.wmd();
72
- }
73
-
@@ -1,339 +0,0 @@
1
- # Copyright (c) 2010 The Mirah project authors. All Rights Reserved.
2
- # All contributing project authors may be found in the NOTICE file.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- import javax.servlet.http.HttpServlet
17
- import javax.servlet.http.HttpServletRequest
18
- import javax.servlet.Filter
19
- import com.google.appengine.ext.duby.db.Model
20
- import com.google.appengine.api.datastore.Text
21
- import java.util.Date
22
- import org.pegdown.PegDownProcessorStub
23
- import com.google.appengine.api.users.UserServiceFactory
24
- import com.google.appengine.api.users.User
25
- import java.util.ArrayList
26
- import java.util.List
27
-
28
- class Page < Model
29
- property 'title', String
30
- property 'body', Text
31
- property 'userid', String
32
- property 'user', User
33
- property 'nickname', String
34
- property 'comment', String
35
- property 'created', Date
36
- property 'version', Long
37
- property 'locked', Boolean
38
- end
39
-
40
- class Helper < HttpServlet
41
- def markdown(text:String)
42
- return "" unless text
43
- flags = 0x5ff
44
- if @allow_html
45
- flags |= 0x200 unless @allow_html
46
- @html_markdown ||= PegDownProcessorStub.new(flags)
47
- @html_markdown.markdownToHtml(text)
48
- else
49
- @nohtml_markdown ||= PegDownProcessorStub.new(flags)
50
- @nohtml_markdown.markdownToHtml(text)
51
- end
52
- end
53
-
54
- def html=(enabled:boolean)
55
- @allow_html = enabled
56
- end
57
-
58
- def page_name(name:String)
59
- if name.nil?
60
- return "Main"
61
- else
62
- name = name.replaceAll("\\W", "")
63
- end
64
- if name.equals("")
65
- "Main"
66
- else
67
- name
68
- end
69
- end
70
-
71
- def h(text:String)
72
- return "" unless text
73
- text = text.replace("&", "&amp;")
74
- text = text.replace("<", "&lt;")
75
- text = text.replace(">", "&gt;")
76
- text = text.replace("\"", "&quot;")
77
- text.replace("'", "&#39;")
78
- end
79
-
80
- def h(o:Object)
81
- h(o.toString)
82
- end
83
-
84
- def_edb(layout, 'org/mirah/wiki/layout.eduby.html')
85
-
86
- def with_layout(content:String)
87
- @content = content
88
- layout
89
- end
90
-
91
- def title
92
- @title
93
- end
94
-
95
- def title=(title:String)
96
- @title = title
97
- end
98
-
99
- def users
100
- @users ||= UserServiceFactory.getUserService()
101
- end
102
-
103
- macro def admin?
104
- quote { users.isUserAdmin }
105
- end
106
-
107
- def user
108
- users.getCurrentUser
109
- end
110
-
111
- def nickname
112
- user.getNickname.replaceAll('@.*', '')
113
- end
114
-
115
- def extra_links
116
- @links ||= ArrayList.new
117
- end
118
-
119
- def url
120
- '/'
121
- end
122
- end
123
-
124
- class ViewPage < Helper
125
- def_edb(view, 'org/mirah/wiki/view.eduby.html')
126
-
127
- def doGet(request, response)
128
- @url = request.getRequestURI
129
- self.title = @name = page_name(request.getPathInfo)
130
- canonical = "/" + @name
131
- unless canonical.equals(request.getPathInfo)
132
- response.sendRedirect(canonical)
133
- return
134
- end
135
-
136
- @page = Page.get(@name)
137
- self.html = @page.locked if @page
138
- response.getWriter.write(with_layout(view))
139
- end
140
-
141
- def url
142
- @url
143
- end
144
-
145
- def extra_links
146
- links = ArrayList.new
147
- if @page
148
- can_edit = admin?
149
- can_edit = true unless @page.locked
150
- if can_edit
151
- links.add(["Edit", "/edit/#{@page.title}"])
152
- end
153
- end
154
- links.add(["New Page", "javascript:void(newPage())"])
155
- links
156
- end
157
- end
158
-
159
- import java.util.logging.Logger
160
-
161
- class EditPage < Helper
162
- def_edb(edit, 'org/mirah/wiki/edit.eduby.html')
163
- def_edb(error, 'org/mirah/wiki/error.eduby.html')
164
-
165
- def logger
166
- @logger ||= Logger.getLogger("EditPage")
167
- end
168
-
169
- def render(content:String)
170
- @response.setContentType("text/html; charset=utf-8")
171
- @response.getWriter.write(with_layout(content))
172
- end
173
-
174
- def url
175
- @url
176
- end
177
-
178
- def doGet(request, response)
179
- @url = request.getRequestURI
180
- @response = response
181
- @error = String(nil)
182
- @name = page_name(request.getPathInfo)
183
- @page = Page.get(@name)
184
- if @page && @page.locked
185
- unless admin?
186
- @error = "You are not authorized to edit this page"
187
- response.setStatus(403)
188
- render(error)
189
- return
190
- end
191
- end
192
- render(edit)
193
- end
194
-
195
- def doPost(_request, _response)
196
- @error = nil
197
- @response = _response
198
- @url = _request.getRequestURI
199
-
200
- # TODO scope inside blocks is not quite right
201
- this = self
202
- request = _request
203
- response = _response
204
- is_admin = admin?
205
-
206
- name = page_name(request.getPathInfo)
207
-
208
- begin
209
- edit_version = Long.parseLong(String(request.getParameter("version")))
210
- rescue NumberFormatException
211
- response.sendError(
212
- 400, "Invalid version '#{request.getParameter("version")}'")
213
- return
214
- end
215
-
216
- Model.transaction do
217
- orig_page = Page.get(name)
218
- current_version = orig_page ? orig_page.version : long(0)
219
- if current_version != edit_version
220
- @error = <<EOS
221
- Version conflict. You are trying to edit version #{edit_version}, but
222
- the current version is #{current_version}.
223
- EOS
224
- @page = orig_page
225
- @name = name
226
- response.setStatus(409)
227
- this.render(this.edit)
228
- return
229
- end
230
- if orig_page && orig_page.locked
231
- unless is_admin
232
- @error = "You are not authorized to edit this page"
233
- response.setStatus(403)
234
- this.render(this.error)
235
- return
236
- end
237
- end
238
-
239
- this.save_old_version(orig_page) if orig_page
240
-
241
- if orig_page
242
- page = orig_page
243
- page.version = page.version + 1
244
- else
245
- page = Page.new(name)
246
- page.title = name
247
- page.version = 1
248
- end
249
-
250
- locked = is_admin && "locked".equals(request.getParameter("locked"))
251
- page.body = String(request.getParameter("body"))
252
- page.nickname = String(request.getParameter("nickname"))
253
- page.comment = String(request.getParameter("comment"))
254
- page.user = this.user
255
- page.userid = this.user.getUserId
256
- page.created = Date.new
257
- page.locked = locked
258
- page.save
259
- response.sendRedirect("/wiki/" + name)
260
- end
261
- end
262
-
263
- def save_old_version(orig_page:Page)
264
- old_version = Page.new(orig_page)
265
- old_version.title = orig_page.title
266
- old_version.body = orig_page.body
267
- old_version.userid = orig_page.userid
268
- old_version.user = orig_page.user
269
- old_version.nickname = orig_page.nickname
270
- old_version.comment = orig_page.comment
271
- old_version.created = orig_page.created
272
- old_version.version = orig_page.version
273
- old_version.locked = orig_page.locked
274
- old_version.save
275
- end
276
- end
277
-
278
- import test.MirahParser
279
- import jmeta.BaseParser
280
- class MirahParserPage < Helper
281
- def_edb(render, 'org/mirah/wiki/parser.eduby.html')
282
-
283
- def initialize
284
- self.title = "Mirah Parser Test"
285
- end
286
-
287
- def doGet(request, response)
288
- doPost(request, response)
289
- end
290
-
291
- def doPost(request, response)
292
- @code = String(request.getParameter("code")) || "puts 'Hello, world!'"
293
- parser = MirahParser.new
294
- begin
295
- @parsed = BaseParser.print_r(parser.parse(@code))
296
- rescue => ex
297
- @parsed = ex.getMessage
298
- end
299
- response.getWriter.write(with_layout(render))
300
- end
301
- end
302
-
303
- class FederatedLogin < Helper
304
- def doGet(request, response)
305
- provider = request.getPathInfo
306
- if provider && provider.length > 1
307
- provider = provider.substring(1)
308
- else
309
- provider = 'www.google.com/accounts/o8/id'
310
- end
311
- continue = String(request.getParameter('continue')) || '/'
312
- url = users.createLoginURL(continue, nil, provider, nil)
313
- response.sendRedirect(url)
314
- end
315
- end
316
-
317
- class LoginRequired < Helper
318
- def doGet(request, response)
319
- # This should be a page allowing people to select an OpenID provider.
320
- # But I'm lazy so I'll just force them to use gmail...
321
- continue = String(request.getParameter('continue'))
322
- url = users.createLoginURL(continue, nil, 'www.google.com/accounts/o8/id', nil)
323
- response.sendRedirect(url)
324
- end
325
- end
326
-
327
- class MainFilter; implements Filter
328
- def init(arg); end
329
- def destroy; end
330
- def doFilter(request, response, filters)
331
- if "/".equals(HttpServletRequest(request).getRequestURI)
332
- request.getRequestDispatcher('/wiki/Main').forward(request, response)
333
- nil
334
- else
335
- filters.doFilter(request, response)
336
- nil
337
- end
338
- end
339
- end