databaseformalizer 0.3.0

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 (267) hide show
  1. data/.project +18 -0
  2. data/README +256 -0
  3. data/README.md +2 -0
  4. data/Rakefile +21 -0
  5. data/app/controllers/databaseformalizer/attr_defs_controller.rb +98 -0
  6. data/app/controllers/databaseformalizer/attr_vals_controller.rb +85 -0
  7. data/app/controllers/databaseformalizer/dbformahome_controller.rb +7 -0
  8. data/app/controllers/databaseformalizer/entities_controller.rb +105 -0
  9. data/app/controllers/databaseformalizer/entity_defs_controller.rb +90 -0
  10. data/app/helpers/application_helper.rb +2 -0
  11. data/app/helpers/databaseformalizer/application_helper.rb +4 -0
  12. data/app/helpers/databaseformalizer/attr_defs_helper.rb +4 -0
  13. data/app/helpers/databaseformalizer/attr_vals_helper.rb +4 -0
  14. data/app/helpers/databaseformalizer/dbformahome_helper.rb +4 -0
  15. data/app/helpers/databaseformalizer/entities_helper.rb +160 -0
  16. data/app/helpers/databaseformalizer/entity_defs_helper.rb +68 -0
  17. data/app/models/databaseformalizer/attr_def.rb +48 -0
  18. data/app/models/databaseformalizer/attr_list_join_def.rb +17 -0
  19. data/app/models/databaseformalizer/attr_list_join_val.rb +18 -0
  20. data/app/models/databaseformalizer/attr_val.rb +36 -0
  21. data/app/models/databaseformalizer/attr_vals_entity.rb +18 -0
  22. data/app/models/databaseformalizer/entity.rb +27 -0
  23. data/app/models/databaseformalizer/entity_def.rb +24 -0
  24. data/app/models/databaseformalizer/entity_def_attr_def.rb +18 -0
  25. data/app/views/databaseformalizer/attr_defs/_form.html.erb +74 -0
  26. data/app/views/databaseformalizer/attr_defs/edit.html.erb +7 -0
  27. data/app/views/databaseformalizer/attr_defs/index.html.erb +38 -0
  28. data/app/views/databaseformalizer/attr_defs/new.html.erb +6 -0
  29. data/app/views/databaseformalizer/attr_defs/show.html.erb +50 -0
  30. data/app/views/databaseformalizer/attr_vals/_form.html.erb +29 -0
  31. data/app/views/databaseformalizer/attr_vals/edit.html.erb +7 -0
  32. data/app/views/databaseformalizer/attr_vals/index.html.erb +28 -0
  33. data/app/views/databaseformalizer/attr_vals/new.html.erb +6 -0
  34. data/app/views/databaseformalizer/attr_vals/show.html.erb +20 -0
  35. data/app/views/databaseformalizer/dbformahome/index.html.erb +19 -0
  36. data/app/views/databaseformalizer/entities/_attr_val_boolean_form.html.erb +7 -0
  37. data/app/views/databaseformalizer/entities/_attr_val_checkList_form.html.erb +22 -0
  38. data/app/views/databaseformalizer/entities/_attr_val_datetime_form.html.erb +15 -0
  39. data/app/views/databaseformalizer/entities/_attr_val_entityDef_form.html.erb +14 -0
  40. data/app/views/databaseformalizer/entities/_attr_val_form_all.html.erb +4 -0
  41. data/app/views/databaseformalizer/entities/_attr_val_form_one.html.erb +6 -0
  42. data/app/views/databaseformalizer/entities/_attr_val_integer_form.html.erb +10 -0
  43. data/app/views/databaseformalizer/entities/_attr_val_openList_element_form.html.erb +16 -0
  44. data/app/views/databaseformalizer/entities/_attr_val_openList_form.html.erb +12 -0
  45. data/app/views/databaseformalizer/entities/_attr_val_selectOneInList_form.html.erb +20 -0
  46. data/app/views/databaseformalizer/entities/_attr_val_string_form.html.erb +10 -0
  47. data/app/views/databaseformalizer/entities/_attr_val_text_form.html.erb +10 -0
  48. data/app/views/databaseformalizer/entities/_form.html.erb +54 -0
  49. data/app/views/databaseformalizer/entities/edit.html.erb +8 -0
  50. data/app/views/databaseformalizer/entities/index.html.erb +45 -0
  51. data/app/views/databaseformalizer/entities/new.html.erb +10 -0
  52. data/app/views/databaseformalizer/entities/new.js.erb +1 -0
  53. data/app/views/databaseformalizer/entities/show.html.erb +50 -0
  54. data/app/views/databaseformalizer/entity_defs/_form.html.erb +51 -0
  55. data/app/views/databaseformalizer/entity_defs/edit.html.erb +7 -0
  56. data/app/views/databaseformalizer/entity_defs/index.html.erb +57 -0
  57. data/app/views/databaseformalizer/entity_defs/new.html.erb +6 -0
  58. data/app/views/databaseformalizer/entity_defs/show.html.erb +30 -0
  59. data/app/views/databaseformalizer/layouts/application.html.erb +134 -0
  60. data/databaseformalizer.gemspec +34 -0
  61. data/lib/acts_as_entity/base.rb +101 -0
  62. data/lib/application_controller.rb +21 -0
  63. data/lib/application_helper.rb +3 -0
  64. data/lib/databaseformalizer.rb +27 -0
  65. data/lib/engine.rb +23 -0
  66. data/lib/generators/entity_def/USAGE +8 -0
  67. data/lib/generators/entity_def/entity_def_generator.rb +39 -0
  68. data/lib/generators/entity_def/templates/controller.rb +98 -0
  69. data/lib/generators/entity_def/templates/helper.rb +2 -0
  70. data/lib/generators/entity_def/templates/model.rb +3 -0
  71. data/lib/generators/entity_def/templates/view/_form.html.erb +35 -0
  72. data/lib/generators/entity_def/templates/view/edit.html.erb +6 -0
  73. data/lib/generators/entity_def/templates/view/index.html.erb +27 -0
  74. data/lib/generators/entity_def/templates/view/new.html.erb +5 -0
  75. data/lib/generators/entity_def/templates/view/show.html.erb +3 -0
  76. data/lib/rails/generators/databaseformalizer/databaseformalizer_generator.rb +52 -0
  77. data/lib/rails/generators/databaseformalizer/templates/initializer.rb +8 -0
  78. data/lib/rails/generators/databaseformalizer/templates/migration.rb +9 -0
  79. data/lib/rails/generators/databaseformalizer/templates/migration.rb.bak +9 -0
  80. data/lib/rails/generators/databaseformalizer/templates/schema.rb +84 -0
  81. data/lib/rails/railties/tasks.rake +8 -0
  82. data/public/bootstrap/css/bootstrap-fixed-header.css +15 -0
  83. data/public/bootstrap/css/bootstrap-responsive.css +808 -0
  84. data/public/bootstrap/css/bootstrap-responsive.min.css +9 -0
  85. data/public/bootstrap/css/bootstrap-toggle.css +242 -0
  86. data/public/bootstrap/css/cerulean/bootstrap.min.css +740 -0
  87. data/public/bootstrap/css/img/glyphicons-halflings-white.png +0 -0
  88. data/public/bootstrap/css/img/glyphicons-halflings.png +0 -0
  89. data/public/bootstrap/js/bootstrap-alert.js +90 -0
  90. data/public/bootstrap/js/bootstrap-collapse.js +157 -0
  91. data/public/bootstrap/js/bootstrap-dropdown.js +100 -0
  92. data/public/bootstrap/js/bootstrap-fixed-header.js +54 -0
  93. data/public/bootstrap/js/bootstrap-modal.js +218 -0
  94. data/public/bootstrap/js/bootstrap-popover.js +98 -0
  95. data/public/bootstrap/js/bootstrap-tab.js +135 -0
  96. data/public/bootstrap/js/bootstrap-toggle.js +104 -0
  97. data/public/bootstrap/js/bootstrap-tooltip.js +275 -0
  98. data/public/bootstrap/js/bootstrap-transition.js +61 -0
  99. data/public/bootstrap/js/bootstrap.js +1824 -0
  100. data/public/bootstrap/js/bootstrap.min.js +6 -0
  101. data/public/images/Thumbs.db +0 -0
  102. data/public/images/bootstrap/Thumbs.db +0 -0
  103. data/public/images/bootstrap/glyphicons-halflings.png +0 -0
  104. data/public/images/databaseformalizer.jpg +0 -0
  105. data/public/images/metamodel.png +0 -0
  106. data/public/images/model.png +0 -0
  107. data/public/javascripts/databaseformalizer.js +13 -0
  108. data/public/javascripts/jquery.js +9252 -0
  109. data/public/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  110. data/public/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  111. data/public/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  112. data/public/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  113. data/public/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  114. data/public/jquery-ui/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  115. data/public/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  116. data/public/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  117. data/public/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  118. data/public/jquery-ui/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  119. data/public/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  120. data/public/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  121. data/public/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  122. data/public/jquery-ui/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  123. data/public/jquery-ui/css/ui-lightness/jquery-ui-1.8.21.custom.css +565 -0
  124. data/public/jquery-ui/js/jquery-1.7.2.min.js +4 -0
  125. data/public/jquery-ui/js/jquery-ui-1.8.21.custom.min.js +125 -0
  126. data/public/jquery-validation/README.md +8 -0
  127. data/public/jquery-validation/additional-methods.js +300 -0
  128. data/public/jquery-validation/additional-methods.min.js +29 -0
  129. data/public/jquery-validation/changelog.txt +277 -0
  130. data/public/jquery-validation/jquery.validate.js +1188 -0
  131. data/public/jquery-validation/jquery.validate.min.js +51 -0
  132. data/public/jquery-validation/lib/jquery-1.3.2.js +4376 -0
  133. data/public/jquery-validation/lib/jquery-1.4.2.js +6240 -0
  134. data/public/jquery-validation/lib/jquery-1.4.4.js +7179 -0
  135. data/public/jquery-validation/lib/jquery-1.5.2.js +8374 -0
  136. data/public/jquery-validation/lib/jquery-1.6.1.js +8936 -0
  137. data/public/jquery-validation/lib/jquery.form.js +660 -0
  138. data/public/jquery-validation/lib/jquery.js +4376 -0
  139. data/public/jquery-validation/lib/jquery.metadata.js +122 -0
  140. data/public/jquery-validation/lib/jquery.mockjax.js +382 -0
  141. data/public/jquery-validation/localization/messages_ar.js +24 -0
  142. data/public/jquery-validation/localization/messages_bg.js +23 -0
  143. data/public/jquery-validation/localization/messages_ca.js +23 -0
  144. data/public/jquery-validation/localization/messages_cn.js +23 -0
  145. data/public/jquery-validation/localization/messages_cs.js +23 -0
  146. data/public/jquery-validation/localization/messages_da.js +20 -0
  147. data/public/jquery-validation/localization/messages_de.js +20 -0
  148. data/public/jquery-validation/localization/messages_el.js +24 -0
  149. data/public/jquery-validation/localization/messages_es.js +23 -0
  150. data/public/jquery-validation/localization/messages_eu.js +23 -0
  151. data/public/jquery-validation/localization/messages_fa.js +23 -0
  152. data/public/jquery-validation/localization/messages_fi.js +21 -0
  153. data/public/jquery-validation/localization/messages_fr.js +23 -0
  154. data/public/jquery-validation/localization/messages_ge.js +23 -0
  155. data/public/jquery-validation/localization/messages_he.js +23 -0
  156. data/public/jquery-validation/localization/messages_hu.js +20 -0
  157. data/public/jquery-validation/localization/messages_it.js +23 -0
  158. data/public/jquery-validation/localization/messages_ja.js +23 -0
  159. data/public/jquery-validation/localization/messages_kk.js +23 -0
  160. data/public/jquery-validation/localization/messages_lt.js +23 -0
  161. data/public/jquery-validation/localization/messages_lv.js +23 -0
  162. data/public/jquery-validation/localization/messages_nl.js +23 -0
  163. data/public/jquery-validation/localization/messages_no.js +23 -0
  164. data/public/jquery-validation/localization/messages_pl.js +23 -0
  165. data/public/jquery-validation/localization/messages_ptbr.js +23 -0
  166. data/public/jquery-validation/localization/messages_ptpt.js +23 -0
  167. data/public/jquery-validation/localization/messages_ro.js +23 -0
  168. data/public/jquery-validation/localization/messages_ru.js +23 -0
  169. data/public/jquery-validation/localization/messages_se.js +21 -0
  170. data/public/jquery-validation/localization/messages_si.js +23 -0
  171. data/public/jquery-validation/localization/messages_sk.js +20 -0
  172. data/public/jquery-validation/localization/messages_sl.js +23 -0
  173. data/public/jquery-validation/localization/messages_sr.js +23 -0
  174. data/public/jquery-validation/localization/messages_th.js +23 -0
  175. data/public/jquery-validation/localization/messages_tr.js +23 -0
  176. data/public/jquery-validation/localization/messages_tw.js +23 -0
  177. data/public/jquery-validation/localization/messages_ua.js +23 -0
  178. data/public/jquery-validation/localization/messages_vi.js +23 -0
  179. data/public/jquery-validation/localization/methods_de.js +12 -0
  180. data/public/jquery-validation/localization/methods_nl.js +9 -0
  181. data/public/jquery-validation/localization/methods_pt.js +9 -0
  182. data/public/jquery-validation/todo +172 -0
  183. data/public/jquery-validation/version.txt +1 -0
  184. data/public/stylesheets/databaseformalizer.css +64 -0
  185. data/public/stylesheets/scaffold.css +56 -0
  186. data/public/tablesorter/addons/.svn/all-wcprops +5 -0
  187. data/public/tablesorter/addons/.svn/entries +31 -0
  188. data/public/tablesorter/addons/pager/.svn/all-wcprops +17 -0
  189. data/public/tablesorter/addons/pager/.svn/entries +96 -0
  190. data/public/tablesorter/addons/pager/.svn/prop-base/jquery.tablesorter.pager.css.svn-base +5 -0
  191. data/public/tablesorter/addons/pager/.svn/prop-base/jquery.tablesorter.pager.js.svn-base +5 -0
  192. data/public/tablesorter/addons/pager/.svn/text-base/jquery.tablesorter.pager.css.svn-base +25 -0
  193. data/public/tablesorter/addons/pager/.svn/text-base/jquery.tablesorter.pager.js.svn-base +184 -0
  194. data/public/tablesorter/addons/pager/jquery.tablesorter.pager.css +25 -0
  195. data/public/tablesorter/addons/pager/jquery.tablesorter.pager.js +184 -0
  196. data/public/tablesorter/build/.svn/all-wcprops +47 -0
  197. data/public/tablesorter/build/.svn/entries +266 -0
  198. data/public/tablesorter/build/.svn/prop-base/ParseMaster.js.svn-base +5 -0
  199. data/public/tablesorter/build/.svn/prop-base/js.jar.svn-base +5 -0
  200. data/public/tablesorter/build/.svn/prop-base/jsmin.js.svn-base +5 -0
  201. data/public/tablesorter/build/.svn/prop-base/min.js.svn-base +5 -0
  202. data/public/tablesorter/build/.svn/prop-base/pack.js.svn-base +5 -0
  203. data/public/tablesorter/build/.svn/prop-base/packer.js.svn-base +5 -0
  204. data/public/tablesorter/build/.svn/prop-base/writeFile.js.svn-base +5 -0
  205. data/public/tablesorter/build/.svn/text-base/ParseMaster.js.svn-base +106 -0
  206. data/public/tablesorter/build/.svn/text-base/js.jar.svn-base +0 -0
  207. data/public/tablesorter/build/.svn/text-base/jsmin.js.svn-base +316 -0
  208. data/public/tablesorter/build/.svn/text-base/min.js.svn-base +5 -0
  209. data/public/tablesorter/build/.svn/text-base/pack.js.svn-base +5 -0
  210. data/public/tablesorter/build/.svn/text-base/packer.js.svn-base +316 -0
  211. data/public/tablesorter/build/.svn/text-base/writeFile.js.svn-base +19 -0
  212. data/public/tablesorter/build/ParseMaster.js +106 -0
  213. data/public/tablesorter/build/js.jar +0 -0
  214. data/public/tablesorter/build/jsmin.js +316 -0
  215. data/public/tablesorter/build/min.js +5 -0
  216. data/public/tablesorter/build/pack.js +5 -0
  217. data/public/tablesorter/build/packer.js +316 -0
  218. data/public/tablesorter/build/writeFile.js +19 -0
  219. data/public/tablesorter/build.xml +26 -0
  220. data/public/tablesorter/changelog +41 -0
  221. data/public/tablesorter/jquery-latest.js +154 -0
  222. data/public/tablesorter/jquery.metadata.js +122 -0
  223. data/public/tablesorter/jquery.tablesorter.js +1031 -0
  224. data/public/tablesorter/jquery.tablesorter.min.js +4 -0
  225. data/public/tablesorter/jquery.tablesorter.widgets.js +433 -0
  226. data/public/tablesorter/jquery.ui.datepicker.js +1727 -0
  227. data/public/tablesorter/style.css +110 -0
  228. data/public/tablesorter/themes/.svn/all-wcprops +5 -0
  229. data/public/tablesorter/themes/.svn/entries +34 -0
  230. data/public/tablesorter/themes/blue/.svn/all-wcprops +35 -0
  231. data/public/tablesorter/themes/blue/.svn/entries +198 -0
  232. data/public/tablesorter/themes/blue/.svn/prop-base/asc.gif.svn-base +5 -0
  233. data/public/tablesorter/themes/blue/.svn/prop-base/bg.gif.svn-base +5 -0
  234. data/public/tablesorter/themes/blue/.svn/prop-base/blue.zip.svn-base +5 -0
  235. data/public/tablesorter/themes/blue/.svn/prop-base/desc.gif.svn-base +5 -0
  236. data/public/tablesorter/themes/blue/.svn/prop-base/style.css.svn-base +5 -0
  237. data/public/tablesorter/themes/blue/.svn/text-base/asc.gif.svn-base +0 -0
  238. data/public/tablesorter/themes/blue/.svn/text-base/bg.gif.svn-base +0 -0
  239. data/public/tablesorter/themes/blue/.svn/text-base/blue.zip.svn-base +0 -0
  240. data/public/tablesorter/themes/blue/.svn/text-base/desc.gif.svn-base +0 -0
  241. data/public/tablesorter/themes/blue/.svn/text-base/style.css.svn-base +39 -0
  242. data/public/tablesorter/themes/blue/asc.gif +0 -0
  243. data/public/tablesorter/themes/blue/bg.gif +0 -0
  244. data/public/tablesorter/themes/blue/blue.zip +0 -0
  245. data/public/tablesorter/themes/blue/desc.gif +0 -0
  246. data/public/tablesorter/themes/blue/style.css +39 -0
  247. data/public/tablesorter/themes/green/.svn/all-wcprops +35 -0
  248. data/public/tablesorter/themes/green/.svn/entries +198 -0
  249. data/public/tablesorter/themes/green/.svn/prop-base/asc.png.svn-base +5 -0
  250. data/public/tablesorter/themes/green/.svn/prop-base/bg.png.svn-base +5 -0
  251. data/public/tablesorter/themes/green/.svn/prop-base/desc.png.svn-base +5 -0
  252. data/public/tablesorter/themes/green/.svn/prop-base/green.zip.svn-base +5 -0
  253. data/public/tablesorter/themes/green/.svn/prop-base/style.css.svn-base +5 -0
  254. data/public/tablesorter/themes/green/.svn/text-base/asc.png.svn-base +0 -0
  255. data/public/tablesorter/themes/green/.svn/text-base/bg.png.svn-base +0 -0
  256. data/public/tablesorter/themes/green/.svn/text-base/desc.png.svn-base +0 -0
  257. data/public/tablesorter/themes/green/.svn/text-base/green.zip.svn-base +0 -0
  258. data/public/tablesorter/themes/green/.svn/text-base/style.css.svn-base +39 -0
  259. data/public/tablesorter/themes/green/asc.png +0 -0
  260. data/public/tablesorter/themes/green/bg.png +0 -0
  261. data/public/tablesorter/themes/green/desc.png +0 -0
  262. data/public/tablesorter/themes/green/green.zip +0 -0
  263. data/public/tablesorter/themes/green/style.css +39 -0
  264. data/test/database.yml +5 -0
  265. data/test/test_helper.rb +56 -0
  266. data/test/unit/databaseformalizer_test.rb +11 -0
  267. metadata +332 -0
@@ -0,0 +1,316 @@
1
+ /*
2
+ packer, version 2.0.2 (2005-08-19)
3
+ Copyright 2004-2005, Dean Edwards
4
+ License: http://creativecommons.org/licenses/LGPL/2.1/
5
+ */
6
+
7
+ function pack(_script, _encoding, _fastDecode, _specialChars) {
8
+ // constants
9
+ var $IGNORE = "$1";
10
+
11
+ // validate parameters
12
+ _script += "\n";
13
+ _encoding = Math.min(parseInt(_encoding), 95);
14
+
15
+ // apply all parsing routines
16
+ function _pack($script) {
17
+ var i, $parse;
18
+ for (i = 0; ($parse = _parsers[i]); i++) {
19
+ $script = $parse($script);
20
+ }
21
+ return $script;
22
+ };
23
+
24
+ // unpacking function - this is the boot strap function
25
+ // data extracted from this packing routine is passed to
26
+ // this function when decoded in the target
27
+ var _unpack = function($packed, $ascii, $count, $keywords, $encode, $decode) {
28
+ while ($count--)
29
+ if ($keywords[$count])
30
+ $packed = $packed.replace(new RegExp('\\b' + $encode($count) + '\\b', 'g'), $keywords[$count]);
31
+ return $packed;
32
+ };
33
+
34
+ // code-snippet inserted into the unpacker to speed up decoding
35
+ var _decode = function() {
36
+ // does the browser support String.replace where the
37
+ // replacement value is a function?
38
+ if (!''.replace(/^/, String)) {
39
+ // decode all the values we need
40
+ while ($count--) $decode[$encode($count)] = $keywords[$count] || $encode($count);
41
+ // global replacement function
42
+ $keywords = [function($encoded){return $decode[$encoded]}];
43
+ // generic match
44
+ $encode = function(){return'\\w+'};
45
+ // reset the loop counter - we are now doing a global replace
46
+ $count = 1;
47
+ }
48
+ };
49
+
50
+ // keep a list of parsing functions, they'll be executed all at once
51
+ var _parsers = [];
52
+ function _addParser($parser) {
53
+ _parsers[_parsers.length] = $parser;
54
+ };
55
+
56
+ // zero encoding - just removal of white space and comments
57
+ function _basicCompression($script) {
58
+ var $parser = new ParseMaster;
59
+ // make safe
60
+ $parser.escapeChar = "\\";
61
+ // protect strings
62
+ $parser.add(/'[^'\n\r]*'/, $IGNORE);
63
+ $parser.add(/"[^"\n\r]*"/, $IGNORE);
64
+ // remove comments
65
+ $parser.add(/\/\/[^\n\r]*[\n\r]/, " ");
66
+ $parser.add(/\/\*[^*]*\*+([^\/][^*]*\*+)*\//, " ");
67
+ // protect regular expressions
68
+ $parser.add(/\s+(\/[^\/\n\r\*][^\/\n\r]*\/g?i?)/, "$2"); // IGNORE
69
+ $parser.add(/[^\w\x24\/'"*)\?:]\/[^\/\n\r\*][^\/\n\r]*\/g?i?/, $IGNORE);
70
+ // remove: ;;; doSomething();
71
+ if (_specialChars) $parser.add(/;;;[^\n\r]+[\n\r]/);
72
+ // remove redundant semi-colons
73
+ $parser.add(/\(;;\)/, $IGNORE); // protect for (;;) loops
74
+ $parser.add(/;+\s*([};])/, "$2");
75
+ // apply the above
76
+ $script = $parser.exec($script);
77
+
78
+ // remove white-space
79
+ $parser.add(/(\b|\x24)\s+(\b|\x24)/, "$2 $3");
80
+ $parser.add(/([+\-])\s+([+\-])/, "$2 $3");
81
+ $parser.add(/\s+/, "");
82
+ // done
83
+ return $parser.exec($script);
84
+ };
85
+
86
+ function _encodeSpecialChars($script) {
87
+ var $parser = new ParseMaster;
88
+ // replace: $name -> n, $$name -> na
89
+ $parser.add(/((\x24+)([a-zA-Z$_]+))(\d*)/, function($match, $offset) {
90
+ var $length = $match[$offset + 2].length;
91
+ var $start = $length - Math.max($length - $match[$offset + 3].length, 0);
92
+ return $match[$offset + 1].substr($start, $length) + $match[$offset + 4];
93
+ });
94
+ // replace: _name -> _0, double-underscore (__name) is ignored
95
+ var $regexp = /\b_[A-Za-z\d]\w*/;
96
+ // build the word list
97
+ var $keywords = _analyze($script, _globalize($regexp), _encodePrivate);
98
+ // quick ref
99
+ var $encoded = $keywords.$encoded;
100
+ $parser.add($regexp, function($match, $offset) {
101
+ return $encoded[$match[$offset]];
102
+ });
103
+ return $parser.exec($script);
104
+ };
105
+
106
+ function _encodeKeywords($script) {
107
+ // escape high-ascii values already in the script (i.e. in strings)
108
+ if (_encoding > 62) $script = _escape95($script);
109
+ // create the parser
110
+ var $parser = new ParseMaster;
111
+ var $encode = _getEncoder(_encoding);
112
+ // for high-ascii, don't encode single character low-ascii
113
+ var $regexp = (_encoding > 62) ? /\w\w+/ : /\w+/;
114
+ // build the word list
115
+ $keywords = _analyze($script, _globalize($regexp), $encode);
116
+ var $encoded = $keywords.$encoded;
117
+ // encode
118
+ $parser.add($regexp, function($match, $offset) {
119
+ return $encoded[$match[$offset]];
120
+ });
121
+ // if encoded, wrap the script in a decoding function
122
+ return $script && _bootStrap($parser.exec($script), $keywords);
123
+ };
124
+
125
+ function _analyze($script, $regexp, $encode) {
126
+ // analyse
127
+ // retreive all words in the script
128
+ var $all = $script.match($regexp);
129
+ var $$sorted = []; // list of words sorted by frequency
130
+ var $$encoded = {}; // dictionary of word->encoding
131
+ var $$protected = {}; // instances of "protected" words
132
+ if ($all) {
133
+ var $unsorted = []; // same list, not sorted
134
+ var $protected = {}; // "protected" words (dictionary of word->"word")
135
+ var $values = {}; // dictionary of charCode->encoding (eg. 256->ff)
136
+ var $count = {}; // word->count
137
+ var i = $all.length, j = 0, $word;
138
+ // count the occurrences - used for sorting later
139
+ do {
140
+ $word = "$" + $all[--i];
141
+ if (!$count[$word]) {
142
+ $count[$word] = 0;
143
+ $unsorted[j] = $word;
144
+ // make a dictionary of all of the protected words in this script
145
+ // these are words that might be mistaken for encoding
146
+ $protected["$" + ($values[j] = $encode(j))] = j++;
147
+ }
148
+ // increment the word counter
149
+ $count[$word]++;
150
+ } while (i);
151
+ // prepare to sort the word list, first we must protect
152
+ // words that are also used as codes. we assign them a code
153
+ // equivalent to the word itself.
154
+ // e.g. if "do" falls within our encoding range
155
+ // then we store keywords["do"] = "do";
156
+ // this avoids problems when decoding
157
+ i = $unsorted.length;
158
+ do {
159
+ $word = $unsorted[--i];
160
+ if ($protected[$word] != null) {
161
+ $$sorted[$protected[$word]] = $word.slice(1);
162
+ $$protected[$protected[$word]] = true;
163
+ $count[$word] = 0;
164
+ }
165
+ } while (i);
166
+ // sort the words by frequency
167
+ $unsorted.sort(function($match1, $match2) {
168
+ return $count[$match2] - $count[$match1];
169
+ });
170
+ j = 0;
171
+ // because there are "protected" words in the list
172
+ // we must add the sorted words around them
173
+ do {
174
+ if ($$sorted[i] == null) $$sorted[i] = $unsorted[j++].slice(1);
175
+ $$encoded[$$sorted[i]] = $values[i];
176
+ } while (++i < $unsorted.length);
177
+ }
178
+ return {$sorted: $$sorted, $encoded: $$encoded, $protected: $$protected};
179
+ };
180
+
181
+ // build the boot function used for loading and decoding
182
+ function _bootStrap($packed, $keywords) {
183
+ var $ENCODE = _safeRegExp("$encode\\($count\\)", "g");
184
+
185
+ // $packed: the packed script
186
+ $packed = "'" + _escape($packed) + "'";
187
+
188
+ // $ascii: base for encoding
189
+ var $ascii = Math.min($keywords.$sorted.length, _encoding) || 1;
190
+
191
+ // $count: number of words contained in the script
192
+ var $count = $keywords.$sorted.length;
193
+
194
+ // $keywords: list of words contained in the script
195
+ for (var i in $keywords.$protected) $keywords.$sorted[i] = "";
196
+ // convert from a string to an array
197
+ $keywords = "'" + $keywords.$sorted.join("|") + "'.split('|')";
198
+
199
+ // $encode: encoding function (used for decoding the script)
200
+ var $encode = _encoding > 62 ? _encode95 : _getEncoder($ascii);
201
+ $encode = String($encode).replace(/_encoding/g, "$ascii").replace(/arguments\.callee/g, "$encode");
202
+ var $inline = "$count" + ($ascii > 10 ? ".toString($ascii)" : "");
203
+
204
+ // $decode: code snippet to speed up decoding
205
+ if (_fastDecode) {
206
+ // create the decoder
207
+ var $decode = _getFunctionBody(_decode);
208
+ if (_encoding > 62) $decode = $decode.replace(/\\\\w/g, "[\\xa1-\\xff]");
209
+ // perform the encoding inline for lower ascii values
210
+ else if ($ascii < 36) $decode = $decode.replace($ENCODE, $inline);
211
+ // special case: when $count==0 there are no keywords. I want to keep
212
+ // the basic shape of the unpacking funcion so i'll frig the code...
213
+ if (!$count) $decode = $decode.replace(_safeRegExp("($count)\\s*=\\s*1"), "$1=0");
214
+ }
215
+
216
+ // boot function
217
+ var $unpack = String(_unpack);
218
+ if (_fastDecode) {
219
+ // insert the decoder
220
+ $unpack = $unpack.replace(/\{/, "{" + $decode + ";");
221
+ }
222
+ $unpack = $unpack.replace(/"/g, "'");
223
+ if (_encoding > 62) { // high-ascii
224
+ // get rid of the word-boundaries for regexp matches
225
+ $unpack = $unpack.replace(/'\\\\b'\s*\+|\+\s*'\\\\b'/g, "");
226
+ }
227
+ if ($ascii > 36 || _encoding > 62 || _fastDecode) {
228
+ // insert the encode function
229
+ $unpack = $unpack.replace(/\{/, "{$encode=" + $encode + ";");
230
+ } else {
231
+ // perform the encoding inline
232
+ $unpack = $unpack.replace($ENCODE, $inline);
233
+ }
234
+ // pack the boot function too
235
+ $unpack = pack($unpack, 0, false, true);
236
+
237
+ // arguments
238
+ var $params = [$packed, $ascii, $count, $keywords];
239
+ if (_fastDecode) {
240
+ // insert placeholders for the decoder
241
+ $params = $params.concat(0, "{}");
242
+ }
243
+
244
+ // the whole thing
245
+ return "eval(" + $unpack + "(" + $params + "))\n";
246
+ };
247
+
248
+ // mmm.. ..which one do i need ??
249
+ function _getEncoder($ascii) {
250
+ return $ascii > 10 ? $ascii > 36 ? $ascii > 62 ? _encode95 : _encode62 : _encode36 : _encode10;
251
+ };
252
+
253
+ // zero encoding
254
+ // characters: 0123456789
255
+ var _encode10 = function($charCode) {
256
+ return $charCode;
257
+ };
258
+
259
+ // inherent base36 support
260
+ // characters: 0123456789abcdefghijklmnopqrstuvwxyz
261
+ var _encode36 = function($charCode) {
262
+ return $charCode.toString(36);
263
+ };
264
+
265
+ // hitch a ride on base36 and add the upper case alpha characters
266
+ // characters: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
267
+ var _encode62 = function($charCode) {
268
+ return ($charCode < _encoding ? '' : arguments.callee(parseInt($charCode / _encoding))) +
269
+ (($charCode = $charCode % _encoding) > 35 ? String.fromCharCode($charCode + 29) : $charCode.toString(36));
270
+ };
271
+
272
+ // use high-ascii values
273
+ var _encode95 = function($charCode) {
274
+ return ($charCode < _encoding ? '' : arguments.callee($charCode / _encoding)) +
275
+ String.fromCharCode($charCode % _encoding + 161);
276
+ };
277
+
278
+ // special _chars
279
+ var _encodePrivate = function($charCode) {
280
+ return "_" + $charCode;
281
+ };
282
+
283
+ // protect characters used by the parser
284
+ function _escape($script) {
285
+ return $script.replace(/([\\'])/g, "\\$1");
286
+ };
287
+
288
+ // protect high-ascii characters already in the script
289
+ function _escape95($script) {
290
+ return $script.replace(/[\xa1-\xff]/g, function($match) {
291
+ return "\\x" + $match.charCodeAt(0).toString(16);
292
+ });
293
+ };
294
+
295
+ function _safeRegExp($string, $flags) {
296
+ return new RegExp($string.replace(/\$/g, "\\$"), $flags);
297
+ };
298
+
299
+ // extract the body of a function
300
+ function _getFunctionBody($function) {
301
+ with (String($function)) return slice(indexOf("{") + 1, lastIndexOf("}"));
302
+ };
303
+
304
+ // set the global flag on a RegExp (you have to create a new one)
305
+ function _globalize($regexp) {
306
+ return new RegExp(String($regexp).slice(1, -1), "g");
307
+ };
308
+
309
+ // build the parsing routine
310
+ _addParser(_basicCompression);
311
+ if (_specialChars) _addParser(_encodeSpecialChars);
312
+ if (_encoding) _addParser(_encodeKeywords);
313
+
314
+ // go!
315
+ return _pack(_script);
316
+ };
@@ -0,0 +1,19 @@
1
+ importPackage(java.io);
2
+
3
+ function writeFile( file, stream ) {
4
+ var buffer = new PrintWriter( new FileWriter( file ) );
5
+ buffer.print( stream );
6
+ buffer.close();
7
+ }
8
+
9
+ function read( file ) {
10
+ var jq = new File(file);
11
+ var reader = new BufferedReader(new FileReader(jq));
12
+ var line = null;
13
+ var buffer = new java.lang.StringBuffer(jq.length());
14
+ while( (line = reader.readLine()) != null) {
15
+ buffer.append(line);
16
+ buffer.append("\n");
17
+ }
18
+ return buffer.toString();
19
+ }
@@ -0,0 +1,106 @@
1
+ /*
2
+ ParseMaster, version 1.0.2 (2005-08-19)
3
+ Copyright 2005, Dean Edwards
4
+ License: http://creativecommons.org/licenses/LGPL/2.1/
5
+ */
6
+
7
+ /* a multi-pattern parser */
8
+
9
+ // KNOWN BUG: erroneous behavior when using escapeChar with a replacement value that is a function
10
+
11
+ function ParseMaster() {
12
+ // constants
13
+ var $EXPRESSION = 0, $REPLACEMENT = 1, $LENGTH = 2;
14
+ // used to determine nesting levels
15
+ var $GROUPS = /\(/g, $SUB_REPLACE = /\$\d/, $INDEXED = /^\$\d+$/,
16
+ $TRIM = /(['"])\1\+(.*)\+\1\1$/, $$ESCAPE = /\\./g, $QUOTE = /'/,
17
+ $$DELETED = /\x01[^\x01]*\x01/g;
18
+ var self = this;
19
+ // public
20
+ this.add = function($expression, $replacement) {
21
+ if (!$replacement) $replacement = "";
22
+ // count the number of sub-expressions
23
+ // - add one because each pattern is itself a sub-expression
24
+ var $length = (_internalEscape(String($expression)).match($GROUPS) || "").length + 1;
25
+ // does the pattern deal with sub-expressions?
26
+ if ($SUB_REPLACE.test($replacement)) {
27
+ // a simple lookup? (e.g. "$2")
28
+ if ($INDEXED.test($replacement)) {
29
+ // store the index (used for fast retrieval of matched strings)
30
+ $replacement = parseInt($replacement.slice(1)) - 1;
31
+ } else { // a complicated lookup (e.g. "Hello $2 $1")
32
+ // build a function to do the lookup
33
+ var i = $length;
34
+ var $quote = $QUOTE.test(_internalEscape($replacement)) ? '"' : "'";
35
+ while (i) $replacement = $replacement.split("$" + i--).join($quote + "+a[o+" + i + "]+" + $quote);
36
+ $replacement = new Function("a,o", "return" + $quote + $replacement.replace($TRIM, "$1") + $quote);
37
+ }
38
+ }
39
+ // pass the modified arguments
40
+ _add($expression || "/^$/", $replacement, $length);
41
+ };
42
+ // execute the global replacement
43
+ this.exec = function($string) {
44
+ _escaped.length = 0;
45
+ return _unescape(_escape($string, this.escapeChar).replace(
46
+ new RegExp(_patterns, this.ignoreCase ? "gi" : "g"), _replacement), this.escapeChar).replace($$DELETED, "");
47
+ };
48
+ // clear the patterns collection so that this object may be re-used
49
+ this.reset = function() {
50
+ _patterns.length = 0;
51
+ };
52
+
53
+ // private
54
+ var _escaped = []; // escaped characters
55
+ var _patterns = []; // patterns stored by index
56
+ var _toString = function(){return "(" + String(this[$EXPRESSION]).slice(1, -1) + ")"};
57
+ _patterns.toString = function(){return this.join("|")};
58
+ // create and add a new pattern to the patterns collection
59
+ function _add() {
60
+ arguments.toString = _toString;
61
+ // store the pattern - as an arguments object (i think this is quicker..?)
62
+ _patterns[_patterns.length] = arguments;
63
+ }
64
+ // this is the global replace function (it's quite complicated)
65
+ function _replacement() {
66
+ if (!arguments[0]) return "";
67
+ var i = 1, j = 0, $pattern;
68
+ // loop through the patterns
69
+ while ($pattern = _patterns[j++]) {
70
+ // do we have a result?
71
+ if (arguments[i]) {
72
+ var $replacement = $pattern[$REPLACEMENT];
73
+ switch (typeof $replacement) {
74
+ case "function": return $replacement(arguments, i);
75
+ case "number": return arguments[$replacement + i];
76
+ }
77
+ var $delete = (arguments[i].indexOf(self.escapeChar) == -1) ? "" :
78
+ "\x01" + arguments[i] + "\x01";
79
+ return $delete + $replacement;
80
+ // skip over references to sub-expressions
81
+ } else i += $pattern[$LENGTH];
82
+ }
83
+ };
84
+ // encode escaped characters
85
+ function _escape($string, $escapeChar) {
86
+ return $escapeChar ? $string.replace(new RegExp("\\" + $escapeChar + "(.)", "g"), function($match, $char) {
87
+ _escaped[_escaped.length] = $char;
88
+ return $escapeChar;
89
+ }) : $string;
90
+ };
91
+ // decode escaped characters
92
+ function _unescape($string, $escapeChar) {
93
+ var i = 0;
94
+ return $escapeChar ? $string.replace(new RegExp("\\" + $escapeChar, "g"), function() {
95
+ return $escapeChar + (_escaped[i++] || "");
96
+ }) : $string;
97
+ };
98
+ function _internalEscape($string) {
99
+ return $string.replace($$ESCAPE, "");
100
+ };
101
+ };
102
+ ParseMaster.prototype = {
103
+ constructor: ParseMaster,
104
+ ignoreCase: false,
105
+ escapeChar: ""
106
+ };
Binary file