knjrbfw 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. data/VERSION +1 -1
  2. data/knjrbfw.gemspec +29 -8
  3. data/lib/knj/arrayext.rb +206 -153
  4. data/lib/knj/autoload/backups/ping.rb +2 -2
  5. data/lib/knj/autoload/erubis.rb +3 -3
  6. data/lib/knj/autoload/facets_dictionary.rb +2 -2
  7. data/lib/knj/autoload/gettext.rb +3 -3
  8. data/lib/knj/autoload/gtk2.rb +1 -1
  9. data/lib/knj/autoload/json.rb +14 -0
  10. data/lib/knj/autoload/magick.rb +3 -3
  11. data/lib/knj/autoload/mysql.rb +3 -3
  12. data/lib/knj/autoload/parsedate.rb +1 -1
  13. data/lib/knj/autoload/ping.rb +2 -2
  14. data/lib/knj/autoload/rexml.rb +5 -5
  15. data/lib/knj/autoload/soap.rb +1 -1
  16. data/lib/knj/autoload/sqlite3.rb +3 -3
  17. data/lib/knj/autoload/tmail.rb +3 -3
  18. data/lib/knj/autoload/xmlsimple.rb +3 -3
  19. data/lib/knj/autoload/zip.rb +3 -3
  20. data/lib/knj/autoload.rb +87 -81
  21. data/lib/knj/cmd_gen.rb +19 -19
  22. data/lib/knj/cmd_parser.rb +59 -0
  23. data/lib/knj/compiler.rb +34 -34
  24. data/lib/knj/cpufreq.rb +37 -37
  25. data/lib/knj/csv.rb +20 -0
  26. data/lib/knj/datarow.rb +406 -239
  27. data/lib/knj/datarow_custom.rb +124 -0
  28. data/lib/knj/datestamp.rb +89 -89
  29. data/lib/knj/datet.rb +550 -454
  30. data/lib/knj/db.rb +1 -0
  31. data/lib/knj/degulesider.rb +42 -44
  32. data/lib/knj/erb/erb.rb +5 -5
  33. data/lib/knj/erb/erb_cache_clean.rb +10 -10
  34. data/lib/knj/erb/erb_fcgi.rb +32 -32
  35. data/lib/knj/erb/erb_fcgi_1.9.rb +32 -32
  36. data/lib/knj/erb/erb_fcgi_jruby.rb +2 -2
  37. data/lib/knj/erb/erb_jruby.rb +5 -5
  38. data/lib/knj/erb/include.rb +243 -243
  39. data/lib/knj/errors.rb +19 -18
  40. data/lib/knj/eruby.rb +12 -10
  41. data/lib/knj/event_filemod.rb +31 -31
  42. data/lib/knj/event_handler.rb +73 -67
  43. data/lib/knj/exchangerates.rb +37 -37
  44. data/lib/knj/facebook_connect.rb +95 -18
  45. data/lib/knj/filesystem.rb +6 -6
  46. data/lib/knj/fs/drivers/filesystem.rb +12 -12
  47. data/lib/knj/fs/drivers/ftp.rb +31 -31
  48. data/lib/knj/fs/drivers/ssh.rb +26 -26
  49. data/lib/knj/fs/fs.rb +31 -31
  50. data/lib/knj/gettext_fallback.rb +15 -15
  51. data/lib/knj/gettext_threadded.rb +75 -75
  52. data/lib/knj/google_sitemap.rb +53 -53
  53. data/lib/knj/gtk2.rb +272 -272
  54. data/lib/knj/gtk2_cb.rb +80 -80
  55. data/lib/knj/gtk2_menu.rb +55 -55
  56. data/lib/knj/gtk2_statuswindow.rb +62 -62
  57. data/lib/knj/gtk2_tv.rb +58 -58
  58. data/lib/knj/hash_methods.rb +27 -36
  59. data/lib/knj/http.rb +189 -167
  60. data/lib/knj/http2.rb +259 -53
  61. data/lib/knj/image.rb +2 -2
  62. data/lib/knj/includes/appserver_cli.rb +18 -18
  63. data/lib/knj/includes/require_info.rb +15 -0
  64. data/lib/knj/ip2location.rb +20 -20
  65. data/lib/knj/ironruby-gtk2/button.rb +14 -14
  66. data/lib/knj/ironruby-gtk2/dialog.rb +42 -42
  67. data/lib/knj/ironruby-gtk2/entry.rb +4 -4
  68. data/lib/knj/ironruby-gtk2/gdk_event.rb +1 -1
  69. data/lib/knj/ironruby-gtk2/gdk_eventbutton.rb +11 -11
  70. data/lib/knj/ironruby-gtk2/gdk_pixbuf.rb +9 -9
  71. data/lib/knj/ironruby-gtk2/gladexml.rb +102 -102
  72. data/lib/knj/ironruby-gtk2/glib.rb +13 -13
  73. data/lib/knj/ironruby-gtk2/gtk2.rb +121 -121
  74. data/lib/knj/ironruby-gtk2/gtk_builder.rb +29 -29
  75. data/lib/knj/ironruby-gtk2/gtk_cellrenderertext.rb +3 -3
  76. data/lib/knj/ironruby-gtk2/gtk_combobox.rb +17 -17
  77. data/lib/knj/ironruby-gtk2/gtk_filechooserbutton.rb +3 -3
  78. data/lib/knj/ironruby-gtk2/gtk_liststore.rb +16 -16
  79. data/lib/knj/ironruby-gtk2/gtk_menu.rb +3 -3
  80. data/lib/knj/ironruby-gtk2/gtk_menuitem.rb +2 -2
  81. data/lib/knj/ironruby-gtk2/gtk_statusicon.rb +3 -3
  82. data/lib/knj/ironruby-gtk2/gtk_treeiter.rb +22 -22
  83. data/lib/knj/ironruby-gtk2/gtk_treeselection.rb +11 -11
  84. data/lib/knj/ironruby-gtk2/gtk_treeview.rb +17 -17
  85. data/lib/knj/ironruby-gtk2/gtk_treeviewcolumn.rb +30 -30
  86. data/lib/knj/ironruby-gtk2/iconsize.rb +1 -1
  87. data/lib/knj/ironruby-gtk2/image.rb +13 -13
  88. data/lib/knj/ironruby-gtk2/label.rb +17 -17
  89. data/lib/knj/ironruby-gtk2/stock.rb +2 -2
  90. data/lib/knj/ironruby-gtk2/tests/test_2.rb +14 -14
  91. data/lib/knj/ironruby-gtk2/tests/test_ironruby_window.rb +37 -37
  92. data/lib/knj/ironruby-gtk2/vbox.rb +3 -3
  93. data/lib/knj/ironruby-gtk2/window.rb +18 -18
  94. data/lib/knj/jruby-gtk2/builder/test_builder.rb +11 -11
  95. data/lib/knj/jruby-gtk2/builder.rb +25 -25
  96. data/lib/knj/jruby-gtk2/cellrenderertext.rb +10 -10
  97. data/lib/knj/jruby-gtk2/checkbutton.rb +1 -1
  98. data/lib/knj/jruby-gtk2/combobox.rb +27 -27
  99. data/lib/knj/jruby-gtk2/dialog.rb +40 -40
  100. data/lib/knj/jruby-gtk2/eventbutton.rb +19 -19
  101. data/lib/knj/jruby-gtk2/gladexml.rb +97 -97
  102. data/lib/knj/jruby-gtk2/gtk2.rb +203 -203
  103. data/lib/knj/jruby-gtk2/hbox.rb +8 -8
  104. data/lib/knj/jruby-gtk2/iconsize.rb +3 -3
  105. data/lib/knj/jruby-gtk2/image.rb +8 -8
  106. data/lib/knj/jruby-gtk2/liststore.rb +54 -54
  107. data/lib/knj/jruby-gtk2/menu.rb +35 -35
  108. data/lib/knj/jruby-gtk2/progressbar.rb +10 -10
  109. data/lib/knj/jruby-gtk2/statusicon.rb +3 -3
  110. data/lib/knj/jruby-gtk2/stock.rb +6 -6
  111. data/lib/knj/jruby-gtk2/tests/test_glade_window.rb +36 -36
  112. data/lib/knj/jruby-gtk2/tests/test_normal_window.rb +3 -3
  113. data/lib/knj/jruby-gtk2/tests/test_trayicon.rb +2 -2
  114. data/lib/knj/jruby-gtk2/treeview.rb +88 -88
  115. data/lib/knj/jruby-gtk2/vbox.rb +10 -10
  116. data/lib/knj/jruby-gtk2/window.rb +7 -7
  117. data/lib/knj/jruby_compiler.rb +12 -12
  118. data/lib/knj/knj.rb +12 -11
  119. data/lib/knj/knj_controller.rb +13 -8
  120. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb +499 -316
  121. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb +127 -125
  122. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_indexes.rb +43 -25
  123. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +316 -241
  124. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb +12 -0
  125. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb +146 -146
  126. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb +24 -24
  127. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +283 -283
  128. data/lib/knj/knjdb/libknjdb.rb +96 -52
  129. data/lib/knj/knjdb/libknjdb_java_sqlite3.rb +78 -78
  130. data/lib/knj/knjdb/libknjdb_row.rb +147 -147
  131. data/lib/knj/knjdb/libknjdb_sqlite3_ironruby.rb +61 -61
  132. data/lib/knj/knjdb/revision.rb +262 -0
  133. data/lib/knj/libqt.rb +69 -69
  134. data/lib/knj/libqt_window.rb +8 -8
  135. data/lib/knj/locales.rb +62 -52
  136. data/lib/knj/maemo/fremantle-calendar/fremantle-calendar.rb +54 -54
  137. data/lib/knj/mail.rb +73 -73
  138. data/lib/knj/mailobj.rb +82 -80
  139. data/lib/knj/mount.rb +113 -113
  140. data/lib/knj/notify.rb +11 -11
  141. data/lib/knj/nvidia_settings.rb +43 -43
  142. data/lib/knj/objects/objects_sqlhelper.rb +474 -0
  143. data/lib/knj/objects.rb +569 -793
  144. data/lib/knj/opts.rb +38 -38
  145. data/lib/knj/os.rb +176 -158
  146. data/lib/knj/php.rb +853 -683
  147. data/lib/knj/php_parser/arguments.rb +3 -3
  148. data/lib/knj/php_parser/functions.rb +95 -95
  149. data/lib/knj/php_parser/php_parser.rb +16 -16
  150. data/lib/knj/php_parser/tests/test.rb +6 -6
  151. data/lib/knj/php_parser/tests/test_function_run.rb +6 -6
  152. data/lib/knj/power_manager.rb +29 -29
  153. data/lib/knj/process.rb +457 -0
  154. data/lib/knj/process_meta.rb +400 -0
  155. data/lib/knj/rand.rb +8 -8
  156. data/lib/knj/retry.rb +69 -69
  157. data/lib/knj/rhodes/delegate.rb +414 -0
  158. data/lib/knj/rhodes/rhodes.rb +114 -40
  159. data/lib/knj/rhodes/weakref.rb +80 -0
  160. data/lib/knj/rsvgbin.rb +18 -18
  161. data/lib/knj/scripts/degulesider.rb +2 -2
  162. data/lib/knj/scripts/filesearch.rb +35 -35
  163. data/lib/knj/scripts/ip2location.rb +2 -2
  164. data/lib/knj/scripts/keepalive.rb +2 -2
  165. data/lib/knj/scripts/php_to_rb_helper.rb +376 -0
  166. data/lib/knj/scripts/process_meta_exec.rb +104 -0
  167. data/lib/knj/scripts/svn_merge.rb +21 -21
  168. data/lib/knj/scripts/upgrade_knjrbfw_checker.rb +26 -26
  169. data/lib/knj/sms.rb +52 -52
  170. data/lib/knj/sshrobot/sshrobot.rb +90 -88
  171. data/lib/knj/sshrobot.rb +1 -0
  172. data/lib/knj/strings.rb +186 -74
  173. data/lib/knj/sysuser.rb +25 -25
  174. data/lib/knj/table_writer.rb +97 -0
  175. data/lib/knj/tests/compiler/compiler_test.rb +2 -2
  176. data/lib/knj/tests/test_degulesider.rb +1 -1
  177. data/lib/knj/tests/test_http2_proxy.rb +26 -0
  178. data/lib/knj/tests/test_mount.rb +9 -9
  179. data/lib/knj/tests/test_retry.rb +17 -17
  180. data/lib/knj/thread.rb +23 -24
  181. data/lib/knj/thread2.rb +45 -45
  182. data/lib/knj/threadhandler.rb +135 -102
  183. data/lib/knj/threadpool.rb +195 -145
  184. data/lib/knj/translations.rb +128 -119
  185. data/lib/knj/unix_proc.rb +80 -80
  186. data/lib/knj/web.rb +947 -881
  187. data/lib/knj/webscripts/image.rhtml +142 -67
  188. data/lib/knj/win.rb +2 -2
  189. data/lib/knj/win_registry.rb +58 -58
  190. data/lib/knj/win_tightvnc.rb +125 -125
  191. data/lib/knj/wref.rb +104 -0
  192. data/lib/knj/x11vnc.rb +46 -46
  193. data/lib/knj/youtube.rb +33 -36
  194. data/lib/knjrbfw.rb +1 -0
  195. data/spec/cmd_parser_spec.rb +25 -0
  196. data/spec/db_spec.rb +40 -0
  197. data/spec/db_spec_encoding_test_file.txt +1 -0
  198. data/spec/http2_spec.rb +37 -0
  199. data/spec/knjrbfw_spec.rb +17 -15
  200. data/spec/php_spec.rb +69 -0
  201. data/spec/process_meta_spec.rb +150 -0
  202. data/spec/process_spec.rb +107 -0
  203. data/spec/strings_spec.rb +21 -0
  204. data/spec/web_spec.rb +16 -0
  205. metadata +42 -21
  206. data/lib/knj/autoload/json_autoload.rb +0 -7
  207. data/lib/knj/autoload/twitter.rb +0 -2
  208. data/lib/knj/ext/webrick.rb +0 -31
  209. data/lib/knj/jruby-gtk2/gtk-4.0.jar +0 -0
  210. data/lib/knj/knjdb/mysql-connector-java-5.1.13-bin.jar +0 -0
  211. data/lib/knj/knjdb/sqlitejdbc-v056.jar +0 -0
data/lib/knj/rsvgbin.rb CHANGED
@@ -1,20 +1,20 @@
1
1
  class Knj::RSVGBIN
2
- def self.test_version
3
- test_version = %x[rsvg-convert -v]
4
- if !test_version.match(/^rsvg-convert version [0-9\.]+$/)
5
- raise "No valid version of rsvg-bin was found."
6
- end
7
- end
8
-
9
- def self.png_content_from_file(file_from)
10
- RSVGBIN.test_version
11
- return %x[rsvg-convert #{Strings.unixsafe(file_from)}]
12
- end
13
-
14
- def self.convert_file(file_from, file_to)
15
- RSVGBIN.test_version
16
-
17
- png_content = RSVGBIN.png_content_from_file(file_from)
18
- Php.file_put_contents(file_to, png_content)
19
- end
2
+ def self.test_version
3
+ test_version = %x[rsvg-convert -v]
4
+ if !test_version.match(/^rsvg-convert version [0-9\.]+$/)
5
+ raise "No valid version of rsvg-bin was found."
6
+ end
7
+ end
8
+
9
+ def self.png_content_from_file(file_from)
10
+ RSVGBIN.test_version
11
+ return %x[rsvg-convert #{Strings.unixsafe(file_from)}]
12
+ end
13
+
14
+ def self.convert_file(file_from, file_to)
15
+ RSVGBIN.test_version
16
+
17
+ png_content = RSVGBIN.png_content_from_file(file_from)
18
+ Php.file_put_contents(file_to, png_content)
19
+ end
20
20
  end
@@ -5,8 +5,8 @@ include Knj
5
5
 
6
6
  dgs = Degulesider.new
7
7
  res = dgs.search(
8
- :where => ARGV[0],
9
- :what => ARGV[1]
8
+ :where => ARGV[0],
9
+ :what => ARGV[1]
10
10
  )
11
11
 
12
12
  print JSON.generate(res)
@@ -4,48 +4,48 @@ require "knj/autoload"
4
4
  include Knj
5
5
 
6
6
  begin
7
- options = {}
8
- OptionParser.new do |opts|
9
- opts.banner = "Usage: example.rb [options]"
10
-
11
- opts.on("-f FINDTHIS", "--find", "Search for this string.") do |f|
12
- options[:find] = f
13
- end
14
-
15
- opts.on("-b BYTES", "--bytes BYTES", "Return this number of bytes and finding the string.") do |b|
16
- options[:bytes] = b.to_i
17
- end
18
-
19
- opts.on("--filepath FILEPATH", "The file that should be searched.") do |fp|
20
- options[:filepath] = fp
21
- end
22
- end.parse!
7
+ options = {}
8
+ OptionParser.new do |opts|
9
+ opts.banner = "Usage: example.rb [options]"
10
+
11
+ opts.on("-f FINDTHIS", "--find", "Search for this string.") do |f|
12
+ options[:find] = f
13
+ end
14
+
15
+ opts.on("-b BYTES", "--bytes BYTES", "Return this number of bytes and finding the string.") do |b|
16
+ options[:bytes] = b.to_i
17
+ end
18
+
19
+ opts.on("--filepath FILEPATH", "The file that should be searched.") do |fp|
20
+ options[:filepath] = fp
21
+ end
22
+ end.parse!
23
23
  rescue OptionParser::InvalidOption => e
24
- Php.die(e.message + "\n")
24
+ Php.die(e.message + "\n")
25
25
  end
26
26
 
27
27
  cont = ""
28
28
  readstr = ""
29
29
  retcont = ""
30
30
  File.open(options[:filepath], "r") do |fp|
31
- loop do
32
- break if fp.eof
33
-
34
- prevcont = String.new(readstr)
35
- readstr = fp.read(1024)
36
- cont = prevcont + readstr
37
-
38
- if ind = cont.index(options[:find])
39
- read_size = options[:bytes] - (cont.length - ind)
40
-
41
- if read_size > 0
42
- cont += fp.read(read_size)
43
- end
44
-
45
- retcont = cont.slice(ind, options[:bytes])
46
- break
47
- end
48
- end
31
+ loop do
32
+ break if fp.eof
33
+
34
+ prevcont = String.new(readstr)
35
+ readstr = fp.read(1024)
36
+ cont = prevcont + readstr
37
+
38
+ if ind = cont.index(options[:find])
39
+ read_size = options[:bytes] - (cont.length - ind)
40
+
41
+ if read_size > 0
42
+ cont += fp.read(read_size)
43
+ end
44
+
45
+ retcont = cont.slice(ind, options[:bytes])
46
+ break
47
+ end
48
+ end
49
49
  end
50
50
 
51
51
  print retcont + "\n"
@@ -6,7 +6,7 @@ ip2loc = Knj::Ip2location.new
6
6
  data = ip2loc.lookup(ARGV[0])
7
7
 
8
8
  if ARGV[1] == "json"
9
- print Knj::Php.json_encode(data)
9
+ print Knj::Php.json_encode(data)
10
10
  else
11
- Knj::Php.print_r(data)
11
+ Knj::Php.print_r(data)
12
12
  end
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  while true
4
- print "Keel-alive\n"
5
- sleep 1
4
+ print "Keel-alive\n"
5
+ sleep 1
6
6
  end
@@ -0,0 +1,376 @@
1
+ #!/usr/bin/env ruby1.9.1
2
+
3
+ require "#{File.dirname(__FILE__)}/../../knjrbfw.rb"
4
+ require "knj/autoload"
5
+
6
+ begin
7
+ options = {}
8
+ OptionParser.new do |opts|
9
+ opts.banner = "Usage: example.rb [options]"
10
+
11
+ opts.on("-f PHPFILE", "--file", "The PHP-file you want help to convert.") do |f|
12
+ options[:file] = f
13
+ end
14
+
15
+ opts.on("-t", "--tags-remove", "Removes the PHP-tags completely.") do |t|
16
+ options[:tags] = false
17
+ end
18
+ end.parse!
19
+ rescue OptionParser::InvalidOption => e
20
+ print "#{e.message}\n"
21
+ exit
22
+ end
23
+
24
+ raise "No PHP-file given with -f." if !options[:file]
25
+
26
+ cont = File.read(options[:file])
27
+ regexes = {
28
+ "var" => "[A-z0-9_]+",
29
+ "class" => "[A-z0-9_]+"
30
+ }
31
+
32
+
33
+ #Replace shell PHP.
34
+ cont.gsub!(/\A#!\/usr\/bin\/env\s+php5/, "!#/usr/bin/env ruby1.9.1")
35
+
36
+
37
+ #Replace class extends.
38
+ cont.scan(/(class\s+(.+?)\s+extends\s+(.+?){)/) do |match|
39
+ rb_classname = "#{match[1][0..0].upcase}#{match[1][1..999]}"
40
+
41
+ if match[2] == "knjdb_row"
42
+ extends = "Knj::Datarow"
43
+ else
44
+ extends = "#{match[2][0..0].upcase}#{match[2][1..999]}"
45
+ end
46
+
47
+ rb_str = "class #{rb_classname} < #{extends}"
48
+
49
+ cont = cont.gsub(match[0], rb_str)
50
+ end
51
+
52
+
53
+ #Replace non-extended classes.
54
+ cont.scan(/(class\s+(.+?)\s*{)/) do |match|
55
+ rb_classname = "#{match[1][0..0].upcase}#{match[1][1..999]}"
56
+ rb_str = "class #{rb_classname}"
57
+
58
+ cont = cont.gsub(match[0], rb_str)
59
+ end
60
+
61
+
62
+ #Match and replace static methods.
63
+ cont.scan(/(static\s+function\s+(.+?)\((.*?)\)\s*{)/) do |match|
64
+ if match[1] == "getList"
65
+ func_name = "list"
66
+ elsif match[1] == "addNew"
67
+ func_name = "add"
68
+ else
69
+ func_name = match[1]
70
+ end
71
+
72
+ rb_str = "def self.#{func_name}(#{match[2]})"
73
+ cont = cont.gsub(match[0], rb_str)
74
+ end
75
+
76
+
77
+ #Match and replace public variables on classes.
78
+ public_vars = {}
79
+ cont.scan(/(public\s+\$(#{regexes["var"]})\s+=\s+(.+?)\s*;\n)/) do |match|
80
+ public_vars[match[1]] = match[1]
81
+ rb_str = "attr_accessor :#{match[1]}\n"
82
+ cont = cont.gsub(match[0], rb_str)
83
+ end
84
+
85
+ cont.scan(/(public\s\$(#{regexes["var"]})\s*;)/) do |match|
86
+ public_vars[match[1]] = match[1]
87
+ rb_str = "attr_accessor :#{match[1]}"
88
+ cont = cont.gsub(match[0], rb_str)
89
+ end
90
+
91
+
92
+
93
+ #Match try exception handeling.
94
+ cont.scan(/((\s+?)try\s*{(\s+?))/) do |match|
95
+ rb_str = "#{match[1]}begin#{match[2]}"
96
+ cont = cont.gsub(match[0], rb_str)
97
+ end
98
+
99
+
100
+ #Match catch exception handeling.
101
+ cont.scan(/((\s+?)}\s*catch\s*\(\s*(#{regexes["class"]})\s+\$(#{regexes["var"]})\s*\)\s*{(\s+))/) do |match|
102
+ classname = "#{match[2][0..0].upcase}#{match[2][1..999]}"
103
+ classname = "Knj::Errors::NotFound" if classname == "Knjdb_rownotfound_exception"
104
+
105
+ rb_str = "#{match[1]}rescue #{classname} => #{match[3]}#{match[4]}"
106
+ cont = cont.gsub(match[0], rb_str)
107
+ end
108
+
109
+
110
+ #Match requires
111
+ cont.scan(/((\s+?)require_once\s+\"(.+)\"\s*;(\s+?))/) do |match|
112
+ filename = match[2]
113
+ filename.gsub!(/\.php$/, ".rb")
114
+
115
+ rb_str = "#{match[1]}require \"#{filename}\"#{match[3]}"
116
+ cont = cont.gsub(match[0], rb_str)
117
+ end
118
+
119
+
120
+ cont.scan(/(function\s(.+?)\((.*?)\))/) do |match|
121
+ #Try to solve problems when arguments are type-required.
122
+ def_args = match[2]
123
+ def_args.scan(/(([A-z]+)\s+\$(#{regexes["var"]}))/) do |match_arg|
124
+ def_args = def_args.gsub(match_arg[0], "#{match_arg[2]}")
125
+ end
126
+
127
+ rb_str = "def #{match[1]}(#{def_args})"
128
+ cont = cont.gsub(match[0], rb_str)
129
+ end
130
+
131
+ cont.scan(/((\s+?)}\s*else\s*{(\s+?))/) do |match|
132
+ rb_str = "#{match[1]}else#{match[2]}"
133
+ cont = cont.gsub(match[0], rb_str)
134
+ end
135
+
136
+ cont.scan(/((\s+?)}\s*else\s*if\s*\()/) do |match|
137
+ rb_str = "#{match[1]}elsif("
138
+ cont = cont.gsub(match[0], rb_str)
139
+ end
140
+
141
+ cont.scan(/((\s+|^)}\n)/) do |match|
142
+ rb_str = "#{match[1]}end\n"
143
+ cont = cont.gsub(match[0], rb_str)
144
+ end
145
+
146
+ cont.gsub!(/\n}\Z/, "\nend")
147
+
148
+
149
+ #Replace nulls.
150
+ cont.gsub!(/([^A-z0-9_])null([^A-z0-9_])/, "\\1nil\\2")
151
+
152
+
153
+ #Replace exception throws.
154
+ cont.scan(/(throw\s+new\s+exception\s*\()/i) do |match|
155
+ rb_str = "raise("
156
+ cont = cont.gsub(match[0], rb_str)
157
+ end
158
+
159
+
160
+ #Replace various forms of foreach'es.
161
+ cont.scan(/((\s+?)foreach\s*\((.+?)\s+as\s+\$(#{regexes["var"]}?)\s+=>\s+\$(#{regexes["var"]}?)\)\s*{(\s+?))/i) do |match|
162
+ rb_str = "#{match[1]}Knj::Php.foreach(#{match[2]}) do |$#{match[3]}, $#{match[4]}|#{match[5]}"
163
+ cont = cont.gsub(match[0], rb_str)
164
+ end
165
+
166
+ cont.scan(/((\s+?)foreach\s*\((.+?)\s+as\s+\$(#{regexes["var"]}?)\s*\)\s*{(\s+?))/i) do |match|
167
+ rb_str = "#{match[1]}Knj::Php.foreach(#{match[2]}) do |$#{match[3]}|#{match[4]}"
168
+ cont = cont.gsub(match[0], rb_str)
169
+ end
170
+
171
+
172
+ #Replace math stuff.
173
+ cont.scan(/((\s+)\$(#{regexes["var"]}?)\+\+;(\s+?))/) do |match|
174
+ rb_str = "#{match[1]}#{match[2]} += 1#{match[3]}"
175
+ cont = cont.gsub(match[0], rb_str)
176
+ end
177
+
178
+
179
+ #Replace double equal.
180
+ cont.gsub!(/(\s+)!==(\s+)/, "\\1!=\\2")
181
+
182
+
183
+ #Replace string additions.
184
+ cont.scan(/((\s+)\$(#{regexes["var"]}?)\s+\.=(\s+))/) do |match|
185
+ rb_str = "#{match[1]}$#{match[2]} = $#{match[2]}.to_s +#{match[3]}"
186
+ cont = cont.gsub(match[0], rb_str)
187
+ end
188
+
189
+ cont.scan(/("\s*\.\s*\$(#{regexes["var"]})(\s+)\.\s*")/) do |match|
190
+ rb_str = "\" + $#{match[1]}.to_s + \""
191
+ cont = cont.gsub(match[0], rb_str)
192
+ end
193
+
194
+ cont.scan(/("\s*\.\s*\$(#{regexes["var"]})\s+\.(\s+))/) do |match|
195
+ rb_str = "\" + $#{match[1]}.to_s +#{match[2]}"
196
+ cont = cont.gsub(match[0], rb_str)
197
+ end
198
+
199
+ cont.scan(/("\s*\.\s*\$(#{regexes["var"]}?)(\s+|,|;|\$|\)))/) do |match|
200
+ rb_str = "\" + $#{match[1]}.to_s#{match[2]}"
201
+ cont = cont.gsub(match[0], rb_str)
202
+ end
203
+
204
+ cont.scan(/("\s*\.\s+(#{regexes["var"]})\()/) do |match|
205
+ rb_str = "\" + #{match[1]}("
206
+ cont = cont.gsub(match[0], rb_str)
207
+ end
208
+
209
+ cont.scan(/(\)\s+.\s+")/) do |match|
210
+ rb_str = ") + \""
211
+ cont = cont.gsub(match[0], rb_str)
212
+ end
213
+
214
+ cont.scan(/(\"\s*\.\s*(knj_browser))/) do |match|
215
+ rb_str = "\" + #{match[1]}"
216
+ cont = cont.gsub(match[0], rb_str)
217
+ end
218
+
219
+ cont.scan(/(\$(#{regexes["var"]})\s*\.\s*\")/) do |match|
220
+ rb_str = "$#{match[1]}.to_s + \""
221
+ cont = cont.gsub(match[0], rb_str)
222
+ end
223
+
224
+
225
+ #Replace cases.
226
+ cont.scan(/((\s+)case\s+(.+?)\s*:(\s{0,1}))/) do |match|
227
+ rb_str = "#{match[1]}when #{match[2]}#{match[3]}"
228
+ cont = cont.gsub(match[0], rb_str)
229
+ end
230
+
231
+
232
+ #Replace switches.
233
+ cont.scan(/((\s+)switch\s*\(\s*\$(.+?)\s*\)\s*{(\s+))/) do |match|
234
+ rb_str = "#{match[1]}case $#{match[2]}#{match[3]}"
235
+ cont = cont.gsub(match[0], rb_str)
236
+ end
237
+
238
+
239
+ #Replace defaults.
240
+ cont.scan(/((\s+)default\s*:(\s+))/) do |match|
241
+ rb_str = "#{match[1]}else#{match[2]}"
242
+ cont = cont.gsub(match[0], rb_str)
243
+ end
244
+
245
+
246
+ #Replace continues
247
+ cont.scan(/((\s+?)continue\s*;(\s+?))/) do |match|
248
+ rb_str = "#{match[1]}next#{match[2]}"
249
+ cont = cont.gsub(match[0], rb_str)
250
+ end
251
+
252
+
253
+ #Replace one-line comments.
254
+ cont.scan(/(\/\/(.+?)\n)/) do |match|
255
+ rb_str = "##{match[1]}\n"
256
+ cont = cont.gsub(match[0], rb_str)
257
+ end
258
+
259
+
260
+ #Replace one-line comments formed as multi-lined ones.
261
+ cont.scan(/((\s+)\/\*(\*|)\s*([^\n]+?)\s*\*\/\n)/) do |match|
262
+ rb_str = "#{match[1]}##{match[3]}\n"
263
+ cont = cont.gsub(match[0], rb_str)
264
+ end
265
+
266
+
267
+ #Replace multi-line comments.
268
+ cont.scan(/((\s+|<\?)\/\*([\s\S]+?)\*\/)/) do |match|
269
+ rb_str = "\n=begin\n#{match[2]}\n=end\n"
270
+
271
+ if match[1] == "<?"
272
+ rb_str = "<%#{rb_str}"
273
+ end
274
+
275
+ cont = cont.gsub(match[0], rb_str)
276
+ end
277
+
278
+
279
+ #Replace variable by reference.
280
+ cont.scan(/((\s+)\$(#{regexes["var"]}?)\s+=\s+&)/) do |match|
281
+ rb_str = "#{match[1]}#{match[2]} = "
282
+ cont = cont.gsub(match[0], rb_str)
283
+ end
284
+
285
+
286
+ #Check for global variables definitions.
287
+ global_vars = {
288
+ "_GET" => "_get",
289
+ "_POST" => "_post",
290
+ "_SERVER" => "_meta",
291
+ "_COOKIE" => "_cookie"
292
+ }
293
+ cont.scan(/((\s+)global\s+\$(#{regexes["var"]})\s*;)/) do |match|
294
+ global_vars[match[2]] = "$#{match[2]}"
295
+ rb_str = "#{match[1]}#global $#{match[2]}"
296
+ cont = cont.gsub(match[0], rb_str)
297
+ end
298
+
299
+
300
+ #Replace variable-names.
301
+ cont.scan(/(([^%\d])(\$(#{regexes["var"]})))/) do |match|
302
+ vname = match[3]
303
+
304
+ if vname[-1..-1] == "["
305
+ vname = vname[0..-2]
306
+ match[0] = match[0][0..-2]
307
+ match[2] = match[2][0..-2]
308
+ match[3] = match[3][0..-2]
309
+ end
310
+
311
+ if vname == "this"
312
+ rb_varname = "self"
313
+ elsif global_vars.key?(vname)
314
+ rb_varname = global_vars[vname]
315
+ else
316
+ rb_varname = "#{vname}"
317
+ end
318
+
319
+ cont = cont.gsub(match[2], rb_varname)
320
+ end
321
+
322
+ replaces = {
323
+ "{\n" => "\n",
324
+ "ob()" => "_ob",
325
+ "db()" => "_db",
326
+ "->" => ".",
327
+ ";\n" => "\n"
328
+ }
329
+
330
+ pinfo = Knj::Php.pathinfo(options[:file])
331
+
332
+ if options.key?(:tags) and !options[:tags]
333
+ rbfname = "#{pinfo["basename"]}.rb"
334
+ replaces.merge!(
335
+ /<\?php(\s*)/ => "",
336
+ /<\?(\s*)/ => "",
337
+ /\?>(\s*)/ => ""
338
+ )
339
+ else
340
+ rbfname = "#{pinfo["basename"]}.rhtml"
341
+ replaces.merge!(
342
+ /<\?\s*}\s*else\s*{\s*\?>/ => "<%else%>",
343
+ "<?}?>" => "<%end%>",
344
+ "{?>" => "%>",
345
+ "<?php" => "<%",
346
+ "<?" => "<%",
347
+ "?>" => "%>"
348
+ )
349
+ end
350
+
351
+ replaces.each do |key, val|
352
+ cont = cont.gsub(key, val)
353
+ end
354
+
355
+ funcs_skip = [:foreach]
356
+ funcs_remove = [:session_start]
357
+ funcs_all = funcs_skip | Knj::Php.php_list_defined_methods
358
+
359
+ funcs_all.each do |method_name|
360
+ next if funcs_skip.index(method_name) != nil
361
+ cont.scan(/((\s+|\(|!)#{method_name}\s*\()/) do |match|
362
+ if funcs_remove.index(method_name) != nil
363
+ cont = cont.gsub(match[0], "#{match[1]}#removal of func: #{method_name}(")
364
+ else
365
+ cont = cont.gsub(match[0], "#{match[1]}Knj::Php.#{method_name}(")
366
+ end
367
+ end
368
+ end
369
+
370
+ if pinfo["dirname"].to_s.length > 0
371
+ rbfname = "#{pinfo["dirname"]}/#{rbfname}"
372
+ end
373
+
374
+ Knj::Php.file_put_contents(rbfname, cont)
375
+ #require "#{Dir.pwd}/#{rbfname}"
376
+ #print cont
@@ -0,0 +1,104 @@
1
+ #!/usr/bin/env ruby1.9.1
2
+
3
+ Dir.chdir(File.dirname(__FILE__))
4
+ require "../../knjrbfw"
5
+ require "knj/process"
6
+ require "knj/process_meta"
7
+ require "knj/strings"
8
+
9
+ objects = {}
10
+ @process = Knj::Process.new(
11
+ :out => $stdout,
12
+ :in => $stdin,
13
+ :listen => true,
14
+ :debug => false,
15
+ :on_rec => proc{|d, &block|
16
+ obj = d.obj
17
+ block_res = nil
18
+
19
+ if obj.is_a?(Hash) and obj.key?("args")
20
+ obj["args"] = Knj::Process_meta.args_parse_back(obj["args"], objects)
21
+ end
22
+
23
+ if obj.is_a?(Hash)
24
+ if obj["type"] == "spawn_object"
25
+ #Fix new integer.
26
+ if obj["class_name"].to_s == "Integer" or obj["class_name"].to_s == "Fixnum"
27
+ objects[obj["var_name"]] = obj["args"].first.to_i
28
+ elsif obj["class_name"].to_s == "{}" and obj["args"].first.is_a?(Hash)
29
+ objects[obj["var_name"]] = obj["args"].first
30
+ else
31
+ class_obj = Knj::Strings.const_get_full(obj["class_name"])
32
+ objects[obj["var_name"]] = class_obj.new(*obj["args"])
33
+ end
34
+
35
+ d.answer("type" => "success")
36
+ elsif obj["type"] == "proxy_from_call"
37
+ raise "No 'var_name' was given in arguments." if !obj["var_name"]
38
+ raise "No object by that name: '#{obj["proxy_obj"]}' in '#{objects}'." if !objects.key?(obj["proxy_obj"])
39
+ obj_to_call = objects[obj["proxy_obj"]]
40
+ res = obj_to_call.__send__(obj["method_name"], *obj["args"])
41
+ objects[obj["var_name"]] = res
42
+
43
+ d.answer("type" => "success")
44
+ elsif obj["type"] == "proxy_from_eval"
45
+ res = eval(obj["str"])
46
+ objects[obj["var_name"]] = res
47
+ d.answer("type" => "success")
48
+ elsif obj["type"] == "proxy_from_static"
49
+ const = Knj::Strings.const_get_full(obj["const"])
50
+ res = const.__send__(obj["method_name"], *obj["args"])
51
+ objects[obj["var_name"]] = res
52
+ d.answer("type" => "success")
53
+ elsif obj["type"] == "call_object"
54
+ raise "Invalid var-name: '#{obj["var_name"]}'." if obj["var_name"].to_s.strip.length <= 0
55
+
56
+ obj_to_call = objects[obj["var_name"]]
57
+ raise "No object by that name: '#{obj["var_name"]}'." if !obj
58
+ res = obj_to_call.__send__(obj["method_name"], *obj["args"])
59
+ res = nil if obj["capture_return"] == false
60
+ d.answer("type" => "call_object_success", "result" => res)
61
+ elsif obj["type"] == "call_object_block"
62
+ raise "Invalid var-name: '#{obj["var_name"]}'." if obj["var_name"].to_s.strip.length <= 0
63
+ res = nil
64
+
65
+ begin
66
+ raise Knj::Errors::NotFound, "No object by that name: '#{obj["var_name"]}' in '#{objects}'." if !objects.key?(obj["var_name"])
67
+ obj_to_call = objects[obj["var_name"]]
68
+ raise "No object by that name: '#{obj["var_name"]}'." if !obj
69
+
70
+ res = obj_to_call.__send__(obj["method_name"], *obj["args"]) do |*args|
71
+ block_res = block.call(*args) if block
72
+ end
73
+ ensure
74
+ #This has to be ensured, because this block wont be runned any more after enumerable has been broken...
75
+ res = nil if obj["capture_return"] == false
76
+ d.answer("type" => "call_object_success", "result" => res)
77
+ end
78
+ elsif obj["type"] == "unset"
79
+ raise "Invalid var-name: '#{obj["var_name"]}'." if obj["var_name"].to_s.strip.length <= 0
80
+ raise "Var-name doesnt exist: '#{obj["var_name"]}'." if !objects.key?(obj["var_name"])
81
+ objects.delete(obj["var_name"])
82
+ d.answer("type" => "unset_success")
83
+ elsif obj["type"] == "static"
84
+ const = Knj::Strings.const_get_full(obj["const"])
85
+ res = const.__send__(obj["method_name"], *obj["args"], &block)
86
+ res = nil if obj["capture_return"] == false
87
+ d.answer("type" => "call_const_success", "result" => res)
88
+ elsif obj["type"] == "str_eval"
89
+ res = eval(obj["str"])
90
+ d.answer("type" => "call_eval_success", "result" => res)
91
+ elsif obj["type"] == "exit"
92
+ d.answer("type" => "exit_success")
93
+ exit
94
+ else
95
+ raise "Didnt know how to handle hash: '#{Knj::Php.print_r(obj, true)}'."
96
+ end
97
+ else
98
+ raise "Unknown object: '#{obj.class.name}'."
99
+ end
100
+
101
+ block_res
102
+ }
103
+ )
104
+ @process.join
@@ -5,25 +5,25 @@ require "knj/autoload"
5
5
  path_to = ARGV[0]
6
6
 
7
7
  Dir.glob(File.join("**", ".svn")).each do |dir|
8
- newdir = path_to + "/" + dir
9
-
10
- #print dir + "\n"
11
- #print newdir + "\n"
12
-
13
- if File.exists?(newdir)
14
- print "Remove: " + newdir.to_s + "\n"
15
- FileUtils.rm_r(newdir)
16
- end
17
-
18
- begin
19
- #print "Move: " + dir + "\n"
20
- #FileUtils.mv(dir, newdir)
21
-
22
- print "Copy: " + dir + "\n"
23
- FileUtils.cp_r(dir, newdir)
24
- rescue => e
25
- print "Failed: " + e.message + "\n"
26
- end
27
-
28
- #print "\n"
8
+ newdir = path_to + "/" + dir
9
+
10
+ #print dir + "\n"
11
+ #print newdir + "\n"
12
+
13
+ if File.exists?(newdir)
14
+ print "Remove: " + newdir.to_s + "\n"
15
+ FileUtils.rm_r(newdir)
16
+ end
17
+
18
+ begin
19
+ #print "Move: " + dir + "\n"
20
+ #FileUtils.mv(dir, newdir)
21
+
22
+ print "Copy: " + dir + "\n"
23
+ FileUtils.cp_r(dir, newdir)
24
+ rescue => e
25
+ print "Failed: " + e.message + "\n"
26
+ end
27
+
28
+ #print "\n"
29
29
  end