mirah 0.0.7-java → 0.0.8-java

Sign up to get free protection for your applications and to get access to all the features.
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