diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/autorequire.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/autorequire.rb --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/autorequire.rb 2005-06-04 14:42:02.184351008 +0200 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/autorequire.rb 2004-12-30 21:05:56.000000000 +0100 @@ -0,0 +1 @@ +require newlocation("ev/rwd") diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/CHANGELOG rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/CHANGELOG --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/CHANGELOG 2005-06-04 14:42:02.185350856 +0200 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/CHANGELOG 2005-06-04 14:33:00.000000000 +0200 @@ -0,0 +1,157 @@ +---------------------------------------------------------------- + +0.2.0 - 04.06.2005 + +* Added better browser detection on Cygwin. + +* Added mime support for rwd_files/* (hard coded, for now...) + +* RWDialog#serve now stops the application when the application + is being wrapped by RubyScript2Exe. Fixed a bug concerning + the detection of configuration files. + +* Added Array#rwd_table. + +* Added RWDialog#text. + +* Added RWDialog#timeout. + +* I changed a lot of small other things which are probably not + worth mentioning individually, but enhance the total "feel" + of RubyWebDialogs. + +---------------------------------------------------------------- + +0.1.2 - 16.12.2004 + +* Added refresh to <window>. + +* Added width and height to <image>. + +* Added the (experimental) progress bar. + +* Fixed a bug concerning a frozen string ( ENV["RWDBROWSER"]). + +* Fixed the handling of spaces in ENV["RWDBROWSER"] under + Cygwin. + +---------------------------------------------------------------- + +0.1.1 - 05.12.2004 + +* Adding the key/values in the configuration file to ENV is + only done if ENV doesn´t already include the key. + +* Corrected the handling of %1 in ENV["RWDBROWSER"]. + +* Corrected the handling of http://localhost:7701 (no final /). + +* Renamed the embedded pixel.gif to rwd_pixel.gif. + +* Removed the definition of the (western) character set in the + templates. + +---------------------------------------------------------------- + +0.1.0 - 28.11.2004 + +* Added browser detection for Linux. + +* Added theme handling. + +* Added <panel>. + +* Added alt to <image>. + +* Changed the layout of tabs. + +---------------------------------------------------------------- + +0.0.11 - 03.09.2004 + +* Added a different template for PDA´s and the (experimental) + detection of PDA´s. + +* Added filename handling for download. + +---------------------------------------------------------------- + +0.0.10 - 21.08.2004 + +* Session-ids are now stored in cookies, in stead of in hidden + form fields. + +* Added download. + +---------------------------------------------------------------- + +0.0.9 - 15.05.2004 + +* Default port isn´t 1234 anymore, but one in the range + 7701-7709. + +* Created RWDReconnect. + +* Added gsub(/%port%/, port.to_s) to ENV["RWDBROWSER"]. + +* Changed the call to Hash#rwd_table. + +---------------------------------------------------------------- + +0.0.8 - 05.05.2004 + +* Added @rwd_call_after_back. + +---------------------------------------------------------------- + +0.0.7 - 28.04.2004 + +* Corrected some exception handling regarding the IO with the + browser. + +* Added maxlength to text and password. + +* Added network without authentication. + +---------------------------------------------------------------- + +0.0.6 - 24.04.2004 + +* Corrected io-handling. Konqueror could kill the application. + +* Changed some layout ( window and tabs). + +---------------------------------------------------------------- + +0.0.5 - 23.04.2004 + +* Replaced the symlink by a copy in install.rb . It didn´t work + under Linux. + +---------------------------------------------------------------- + +0.0.4 - 22.04.2004 + +* Changed the recently added tab-handling. + +* Corrected some cursor positioning glitches. + +---------------------------------------------------------------- + +0.0.3 - 21.04.2004 + +* A minor change in message. + +---------------------------------------------------------------- + +0.0.2 - 20.04.2004 + +* Added some tab-handling. + +---------------------------------------------------------------- + +0.0.1 - 17.04.2004 + +* Alpha release + +---------------------------------------------------------------- diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/init.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/init.rb --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/init.rb 2004-12-17 12:40:16.000000000 +0100 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/init.rb 2005-06-04 14:41:53.000000000 +0200 @@ -1,37 +1,64 @@ require "rbconfig" +require "ftools" -def mkdirrec(dir) - pdir = File.dirname(dir) +if __FILE__ == $0 - if not pdir.empty? and not File.directory?(pdir) - mkdirrec (pdir) - end + Dir.chdir(File.dirname($0)) - Dir.mkdir(dir) rescue nil -end + FromDirs = [".", "./lib", "./rubylib/lib"] + ToDir = Config::CONFIG["sitelibdir"] + "/ev" + + File.mkpath(ToDir) if not File.directory?(ToDir) + + FromDirs.each do |fromdir| + fromdir = Dir.pwd if fromdir == "." -Dir.chdir(File.dirname($0)) + if File.directory?(fromdir) + Dir.new(fromdir).each do |file| + if file =~ /\.lib\.rb$/ + fromfile = fromdir + "/" + file + tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb") -FromDirs = [".", "./lib", "./rubylib/lib"] -ToDir = Config::CONFIG["sitelibdir"] + "/ev" + printf "%s -> %s\n", fromfile, tofile -mkdirrec(ToDir) if not File.directory?(ToDir) + File.delete(tofile) if File.file?(tofile) + + File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines} + end + end + end + end -FromDirs.each do |fromdir| - fromdir = Dir.pwd if fromdir == "." +else - if File.directory?(fromdir) - Dir.new(fromdir).each do |file| - if file =~ /\.lib\.rb$/ - fromfile = fromdir + "/" + file - tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb") + FromDirs = [".", "./lib", "./rubylib/lib"] + ToDir = "./ev" - printf "%s -> %s\n", fromfile, tofile + File.mkpath(ToDir) if not File.directory?(ToDir) - File.delete(tofile) if File.file?(tofile) + FromDirs.each do |fromdir| + fromdir = Dir.pwd if fromdir == "." - File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines} + if File.directory?(fromdir) + Dir.new(fromdir).each do |file| + if file =~ /\.lib\.rb$/ + fromfile = fromdir + "/" + file + tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb") + + #printf "%s -> %s\n", fromfile, tofile + + File.delete(tofile) if File.file?(tofile) + + File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines} + end end end end + + oldlocation do + file = newlocation("autorequire.rb") + + load file if File.file?(file) + end + end diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/install.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/install.rb --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/install.rb 2004-12-17 12:40:16.000000000 +0100 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/install.rb 2005-06-04 14:41:53.000000000 +0200 @@ -1,37 +1,64 @@ require "rbconfig" +require "ftools" -def mkdirrec(dir) - pdir = File.dirname(dir) +if __FILE__ == $0 - if not pdir.empty? and not File.directory?(pdir) - mkdirrec (pdir) - end + Dir.chdir(File.dirname($0)) - Dir.mkdir(dir) rescue nil -end + FromDirs = [".", "./lib", "./rubylib/lib"] + ToDir = Config::CONFIG["sitelibdir"] + "/ev" + + File.mkpath(ToDir) if not File.directory?(ToDir) + + FromDirs.each do |fromdir| + fromdir = Dir.pwd if fromdir == "." -Dir.chdir(File.dirname($0)) + if File.directory?(fromdir) + Dir.new(fromdir).each do |file| + if file =~ /\.lib\.rb$/ + fromfile = fromdir + "/" + file + tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb") -FromDirs = [".", "./lib", "./rubylib/lib"] -ToDir = Config::CONFIG["sitelibdir"] + "/ev" + printf "%s -> %s\n", fromfile, tofile -mkdirrec(ToDir) if not File.directory?(ToDir) + File.delete(tofile) if File.file?(tofile) + + File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines} + end + end + end + end -FromDirs.each do |fromdir| - fromdir = Dir.pwd if fromdir == "." +else - if File.directory?(fromdir) - Dir.new(fromdir).each do |file| - if file =~ /\.lib\.rb$/ - fromfile = fromdir + "/" + file - tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb") + FromDirs = [".", "./lib", "./rubylib/lib"] + ToDir = "./ev" - printf "%s -> %s\n", fromfile, tofile + File.mkpath(ToDir) if not File.directory?(ToDir) - File.delete(tofile) if File.file?(tofile) + FromDirs.each do |fromdir| + fromdir = Dir.pwd if fromdir == "." - File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines} + if File.directory?(fromdir) + Dir.new(fromdir).each do |file| + if file =~ /\.lib\.rb$/ + fromfile = fromdir + "/" + file + tofile = ToDir + "/" + file.sub(/\.lib\.rb/, ".rb") + + #printf "%s -> %s\n", fromfile, tofile + + File.delete(tofile) if File.file?(tofile) + + File.open(tofile, "w") {|f| f.puts File.new(fromfile).readlines} + end end end end + + oldlocation do + file = newlocation("autorequire.rb") + + load file if File.file?(file) + end + end diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/browser.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/browser.lib.rb --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/browser.lib.rb 2004-12-17 12:40:15.000000000 +0100 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/browser.lib.rb 2005-06-04 14:41:52.000000000 +0200 @@ -16,20 +16,33 @@ application = nil begin - Win32::Registry::HKEY_CLASSES_ROOT.open(´.html´) do |reg| + Win32::Registry::HKEY_CLASSES_ROOT.open(".html") do |reg| filetype = reg[""] end - Win32::Registry::HKEY_CLASSES_ROOT.open(filetype + ´\shell\open\command´) do |reg| + Win32::Registry::HKEY_CLASSES_ROOT.open(filetype + "\\shell\\open\\command") do |reg| application = reg[""] end rescue NameError - $stderr.puts "Only available for Windows." + $stderr.puts "Only available for Windows and Cygwin." end application end +def cygwinbrowser + browser, *args = windowsbrowser.splitwords + browser = browser.gsub(/\\/, "/") + #browser = browser + + args.collect!{|a| a.gsub(/\\/, "/")} + #args.collect!{|a| "\"%s\"" % [a.gsub(/\\/, "/")]} + #args.collect!{|a| "\"%s\"" % [a]} + + res = "\"%s\" %s" % [browser, args.join(" ")] + res +end + def linuxbrowser application = "" @@ -47,25 +60,26 @@ def defaultbrowser res = nil res = windowsbrowser if windows? + res = cygwinbrowser if cygwin? res = linuxbrowser if linux? res end +def showurlinbrowser(url, browser=defaultbrowser) + command = "#{browser} \"#{url}\"" + + system(command) or $stderr.puts "Starting of the browser failed, or the browser terminated abnormally.\nCommand => #{command}" +end + def showinbrowser(html, browser=defaultbrowser) port, io = TCPServer.freeport(7701, 7709) unless browser.nil? Thread.new do begin - #command = "1234 \"http://localhost:#{port}\"" if linux? - #command = "L:/prog/MozillaFirefox/firefox.exe \"http://localhost:#{port}\"" if cygwin? - #command = Win32::Registry::HKEY_CLASSES_ROOT.open(´htmlfile\shell\open\command´)[0] + " \"http://localhost:#{port}/\"" if windows? - - command = "#{browser} \"http://localhost:#{port}\"" - Thread.pass - system(command) + showurlinbrowser("http://localhost:#{port}/", browser) rescue end end diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/ftools.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/ftools.lib.rb --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/ftools.lib.rb 2004-12-17 12:40:15.000000000 +0100 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/ftools.lib.rb 2005-06-04 14:41:52.000000000 +0200 @@ -1,22 +1,12 @@ require "ftools" class Dir - def self.mkdirrec(dir) - pdir = File.dirname(dir) - - if not pdir.empty? and not File.directory?(pdir) - Dir.mkdirrec(pdir) - end - - Dir.mkdir(dir) rescue nil - end - def self.copy(from, to) if File.directory?(from) pdir = Dir.pwd todir = File.expand_path(to) - mkdirrec(todir) + File.mkpath(todir) Dir.chdir(from) Dir.new(".").each do |e| @@ -26,7 +16,7 @@ else todir = File.dirname(File.expand_path(to)) - mkdirrec(todir) + File.mkpath(todir) File.copy(from, to) end @@ -38,6 +28,8 @@ end def self.rm_rf(entry) + File.chmod(0755, entry) + if File.ftype(entry) == "directory" pdir = Dir.pwd @@ -47,16 +39,24 @@ end Dir.chdir(pdir) - Dir.delete(entry) + begin + Dir.delete(entry) + rescue => e + $stderr.puts e.message + end else - File.delete(entry) + begin + File.delete(entry) + rescue => e + $stderr.puts e.message + end end end def self.find(entry=nil, mask=nil) entry = "." if entry.nil? - entry = entry.gsub!(/[\/\\]*$/, "") unless entry.nil? + entry = entry.gsub(/[\/\\]*$/, "") unless entry.nil? mask = /^#{mask}$/i if mask.kind_of?(String) @@ -77,8 +77,8 @@ ensure Dir.chdir(pdir) end - rescue Errno::EACCES => error - puts error + rescue Errno::EACCES => e + $stderr.puts e.message end else res += [entry] if mask.nil? or entry =~ mask @@ -99,7 +99,7 @@ # Rollback if File.file?(backupfile) and File.file?(controlfile) - $stdout.puts "Restoring #{file}..." + $stderr.puts "Restoring #{file}..." File.copy(backupfile, file) # Rollback from phase 3 end @@ -139,7 +139,11 @@ end def self.touch(file) - File.open(file, "a"){|f|} + if File.exists?(file) + File.utime(Time.now, File.mtime(file), file) + else + File.open(file, "a"){|f|} + end end def self.which(file) diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/mime.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/mime.lib.rb --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/mime.lib.rb 2005-06-04 14:42:02.188350400 +0200 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/mime.lib.rb 2005-06-04 14:41:52.000000000 +0200 @@ -0,0 +1,328 @@ +module EVMime + MimeType = {} + + MimeType[´123´] = ´application/vnd.lotus-1-2-3´ + MimeType[´3ds´] = ´image/x-3ds´ + MimeType[´a´] = ´application/x-unix-archive´ + MimeType[´abw´] = ´application/x-abiword´ + MimeType[´ac3´] = ´audio/ac3´ + MimeType[´afm´] = ´application/x-font-afm´ + MimeType[´ag´] = ´image/x-applix-graphic´ + MimeType[´aif´] = ´audio/x-aiff´ + MimeType[´aifc´] = ´audio/x-aiff´ + MimeType[´aiff´] = ´audio/x-aiff´ + MimeType[´ap´] = ´application/x-applix-presents´ + MimeType[´ape´] = ´application/x-ape´ + MimeType[´arj´] = ´application/x-arj´ + MimeType[´as´] = ´application/x-applix-spreadsheet´ + MimeType[´asc´] = ´text/plain´ + MimeType[´asf´] = ´video/x-ms-asf´ + MimeType[´asp´] = ´application/x-asp´ + MimeType[´asx´] = ´audio/x-ms-asx´ + MimeType[´au´] = ´audio/x-ulaw´ + MimeType[´avi´] = ´video/x-msvideo´ + MimeType[´aw´] = ´application/x-applix-word´ + MimeType[´bak´] = ´application/x-backup´ + MimeType[´bcpio´] = ´application/x-bcpio´ + MimeType[´bdf´] = ´application/x-font-bdf´ + MimeType[´bib´] = ´text/bib´ + MimeType[´bin´] = ´application/octet-stream´ + MimeType[´blend´] = ´application/x-blender´ + MimeType[´blender´] = ´application/x-blender´ + MimeType[´bmp´] = ´image/bmp´ + MimeType[´bz´] = ´application/x-bzip´ + MimeType[´bz2´] = ´application/x-bzip´ + MimeType[´c´] = ´text/x-c´ + MimeType[´c++´] = ´text/x-c++´ + MimeType[´cc´] = ´text/x-c++´ + MimeType[´cdf´] = ´application/x-netcdf´ + MimeType[´cdr´] = ´application/vnd.corel-draw´ + MimeType[´cgi´] = ´application/x-cgi´ + MimeType[´cgm´] = ´image/cgm´ + MimeType[´class´] = ´application/x-java-byte-code´ + MimeType[´cls´] = ´text/x-tex´ + MimeType[´cpio´] = ´application/x-cpio´ + MimeType[´cpp´] = ´text/x-c++´ + MimeType[´csh´] = ´text/x-csh´ + MimeType[´css´] = ´text/css´ + MimeType[´csv´] = ´text/x-comma-separated-values´ + MimeType[´dat´] = ´video/mpeg´ + MimeType[´dbf´] = ´application/x-xbase´ + MimeType[´dc´] = ´application/x-dc-rom´ + MimeType[´dcl´] = ´text/x-dcl´ + MimeType[´dcm´] = ´image/x-dcm´ + MimeType[´deb´] = ´application/x-deb´ + MimeType[´desktop´] = ´application/x-gnome-app-info´ + MimeType[´dia´] = ´application/x-dia-diagram´ + MimeType[´diff´] = ´text/x-patch´ + MimeType[´djv´] = ´image/vnd.djvu´ + MimeType[´djvu´] = ´image/vnd.djvu´ + MimeType[´doc´] = ´application/msword´ + MimeType[´dsl´] = ´text/x-dsl´ + MimeType[´dtd´] = ´text/x-dtd´ + MimeType[´dvi´] = ´application/x-dvi´ + MimeType[´dwg´] = ´image/vnd.dwg´ + MimeType[´dxf´] = ´image/vnd.dxf´ + MimeType[´el´] = ´text/x-emacs-lisp´ + MimeType[´emf´] = ´image/x-emf´ + MimeType[´eps´] = ´application/postscript´ + MimeType[´etheme´] = ´application/x-e-theme´ + MimeType[´etx´] = ´text/x-setext´ + MimeType[´exe´] = ´application/x-ms-dos-executable´ + MimeType[´ez´] = ´application/andrew-inset´ + MimeType[´f´] = ´text/x-fortran´ + MimeType[´fig´] = ´image/x-xfig´ + MimeType[´fits´] = ´image/x-fits´ + MimeType[´flac´] = ´audio/x-flac´ + MimeType[´flc´] = ´video/x-flc´ + MimeType[´fli´] = ´video/x-fli´ + MimeType[´gb´] = ´application/x-gameboy-rom´ + MimeType[´gchempaint´] = ´application/x-gchempaint´ + MimeType[´gcrd´] = ´text/x-vcard´ + MimeType[´gcrystal´] = ´application/x-gcrystal´ + MimeType[´gem´] = ´text/x-rubygem´ + MimeType[´gen´] = ´application/x-genesis-rom´ + MimeType[´gg´] = ´application/x-sms-rom´ + MimeType[´gif´] = ´image/gif´ + MimeType[´glade´] = ´application/x-glade´ + MimeType[´gnc´] = ´application/x-gnucash´ + MimeType[´gnucash´] = ´application/x-gnucash´ + MimeType[´gnumeric´] = ´application/x-gnumeric´ + MimeType[´gray´] = ´image/x-gray´ + MimeType[´gtar´] = ´application/x-gtar´ + MimeType[´gz´] = ´application/x-gzip´ + MimeType[´h´] = ´text/x-c-header´ + MimeType[´h++´] = ´text/x-c-header´ + MimeType[´hdf´] = ´application/x-hdf´ + MimeType[´hlls´] = ´text/x-hllapiscript´ + MimeType[´hpp´] = ´text/x-c-header´ + MimeType[´hs´] = ´text/x-haskell´ + MimeType[´htm´] = ´text/html´ + MimeType[´html´] = ´text/html´ + MimeType[´icb´] = ´image/x-icb´ + MimeType[´ico´] = ´image/x-ico´ + MimeType[´ics´] = ´text/calendar´ + MimeType[´idl´] = ´text/x-idl´ + MimeType[´ief´] = ´image/ief´ + MimeType[´iff´] = ´image/x-iff´ + MimeType[´ilbm´] = ´image/x-ilbm´ + MimeType[´iso´] = ´application/x-iso-image´ + MimeType[´it´] = ´audio/x-it´ + MimeType[´jar´] = ´application/x-java-archive´ + MimeType[´java´] = ´text/x-java´ + MimeType[´jpe´] = ´image/jpeg´ + MimeType[´jpeg´] = ´image/jpeg´ + MimeType[´jpg´] = ´image/jpeg´ + MimeType[´jpr´] = ´application/x-jbuilder-project´ + MimeType[´jpx´] = ´application/x-jbuilder-project´ + MimeType[´js´] = ´text/x-javascript´ + MimeType[´kdelnk´] = ´application/x-kde-app-info´ + MimeType[´kil´] = ´application/x-killustrator´ + MimeType[´kpr´] = ´application/x-kpresenter´ + MimeType[´ksp´] = ´application/x-kspread´ + MimeType[´kwd´] = ´application/x-kword´ + MimeType[´la´] = ´application/x-shared-library-la´ + MimeType[´lha´] = ´application/x-lha´ + MimeType[´lhs´] = ´text/x-literate-haskell´ + MimeType[´lhz´] = ´application/x-lhz´ + MimeType[´lo´] = ´application/x-object-file´ + MimeType[´ltx´] = ´text/x-tex´ + MimeType[´lwo´] = ´image/x-lwo´ + MimeType[´lwob´] = ´image/x-lwo´ + MimeType[´lws´] = ´image/x-lws´ + MimeType[´lyx´] = ´text/x-lyx´ + MimeType[´m´] = ´text/x-objc´ + MimeType[´m3u´] = ´audio/x-mpegurl´ + MimeType[´m4a´] = ´audio/x-m4a´ + MimeType[´man´] = ´text/x-troff-man´ + MimeType[´md´] = ´application/x-genesis-rom´ + MimeType[´me´] = ´text/x-troff-me´ + MimeType[´mgp´] = ´application/x-magicpoint´ + MimeType[´mid´] = ´audio/x-midi´ + MimeType[´midi´] = ´audio/x-midi´ + MimeType[´mif´] = ´application/x-mif´ + MimeType[´miff´] = ´image/x-miff´ + MimeType[´mm´] = ´text/x-troff-mm´ + MimeType[´mml´] = ´text/mathml´ + MimeType[´mod´] = ´audio/x-mod´ + MimeType[´mov´] = ´video/quicktime´ + MimeType[´movie´] = ´video/x-sgi-movie´ + MimeType[´mp1´] = ´audio/mpeg´ + MimeType[´mp2´] = ´video/mpeg´ + MimeType[´mp3´] = ´audio/mpeg´ + MimeType[´mpe´] = ´video/mpeg´ + MimeType[´mpeg´] = ´video/mpeg´ + MimeType[´mpg´] = ´video/mpeg´ + MimeType[´mrp´] = ´application/x-mrproject´ + MimeType[´mrproject´] = ´application/x-mrproject´ + MimeType[´ms´] = ´text/x-troff-ms´ + MimeType[´msx´] = ´application/x-msx-rom´ + MimeType[´n64´] = ´application/x-n64-rom´ + MimeType[´nc´] = ´application/x-netcdf´ + MimeType[´nes´] = ´application/x-nes-rom´ + MimeType[´nsv´] = ´video/x-nsv´ + MimeType[´o´] = ´application/x-object-file´ + MimeType[´oda´] = ´application/oda´ + MimeType[´ogg´] = ´application/ogg´ + MimeType[´oleo´] = ´application/x-oleo´ + MimeType[´p´] = ´text/x-pascal´ + MimeType[´palm´] = ´image/x-palm´ + MimeType[´pas´] = ´text/x-pascal´ + MimeType[´pascal´] = ´text/x-pascal´ + MimeType[´patch´] = ´text/x-patch´ + MimeType[´pbm´] = ´image/x-portable-bitmap´ + MimeType[´pcd´] = ´image/x-photo-cd´ + MimeType[´pcf´] = ´application/x-font-pcf´ + MimeType[´pct´] = ´image/x-pict´ + MimeType[´pcx´] = ´image/x-pcx´ + MimeType[´pdb´] = ´application/x-palm-database´ + MimeType[´pdf´] = ´application/pdf´ + MimeType[´perl´] = ´text/x-perl´ + MimeType[´pfa´] = ´application/x-font-type1´ + MimeType[´pfb´] = ´application/x-font-type1´ + MimeType[´pgm´] = ´image/x-portable-graymap´ + MimeType[´pgn´] = ´application/x-chess-pgn´ + MimeType[´pgp´] = ´application/pgp´ + MimeType[´php´] = ´application/x-php´ + MimeType[´php3´] = ´application/x-php´ + MimeType[´php4´] = ´application/x-php´ + MimeType[´pict´] = ´image/x-pict´ + MimeType[´pl´] = ´text/x-perl´ + MimeType[´pls´] = ´audio/x-scpls´ + MimeType[´pm´] = ´text/x-perl´ + MimeType[´png´] = ´image/png´ + MimeType[´pnm´] = ´image/x-portable-anymap´ + MimeType[´po´] = ´text/x-po´ + MimeType[´pp´] = ´text/x-pascal´ + MimeType[´ppm´] = ´image/x-portable-pixmap´ + MimeType[´pps´] = ´application/vnd.ms-powerpoint´ + MimeType[´ppt´] = ´application/vnd.ms-powerpoint´ + MimeType[´ps´] = ´application/postscript´ + MimeType[´psd´] = ´image/x-psd´ + MimeType[´psf´] = ´application/x-font-linux-psf´ + MimeType[´psid´] = ´audio/prs.sid´ + MimeType[´py´] = ´text/x-python´ + MimeType[´pyc´] = ´application/x-python-byte-code´ + MimeType[´qif´] = ´application/qif´ + MimeType[´qt´] = ´video/quicktime´ + MimeType[´ra´] = ´audio/x-real-audio´ + MimeType[´ram´] = ´audio/x-pn-realaudio´ + MimeType[´rar´] = ´application/x-rar´ + MimeType[´ras´] = ´image/x-cmu-raster´ + MimeType[´rb´] = ´text/x-ruby´ + MimeType[´rba´] = ´text/x-ruby´ + MimeType[´rbw´] = ´text/x-ruby´ + MimeType[´rej´] = ´application/x-reject´ + MimeType[´rgb´] = ´image/x-rgb´ + MimeType[´rm´] = ´audio/x-real-audio´ + MimeType[´roff´] = ´text/x-troff´ + MimeType[´rpm´] = ´application/x-rpm´ + MimeType[´rtf´] = ´application/rtf´ + MimeType[´rtx´] = ´text/richtext´ + MimeType[´ruby´] = ´text/x-ruby´ + MimeType[´rubyw´] = ´text/x-ruby´ + MimeType[´rv´] = ´audio/x-real-audio´ + MimeType[´s´] = ´text/x-asm´ + MimeType[´s3m´] = ´audio/x-s3m´ + MimeType[´scm´] = ´text/x-scheme´ + MimeType[´sda´] = ´application/vnd.stardivision.draw´ + MimeType[´sdc´] = ´application/vnd.stardivision.calc´ + MimeType[´sdd´] = ´application/vnd.stardivision.impress´ + MimeType[´sdp´] = ´application/vnd.stardivision.impress´ + MimeType[´sds´] = ´application/vnd.stardivision.chart´ + MimeType[´sdw´] = ´application/vnd.stardivision.writer´ + MimeType[´sgi´] = ´image/x-sgi´ + MimeType[´sgl´] = ´application/vnd.stardivision.writer´ + MimeType[´sgm´] = ´text/sgml´ + MimeType[´sgml´] = ´text/sgml´ + MimeType[´sh´] = ´text/x-sh´ + MimeType[´shar´] = ´application/x-shar´ + MimeType[´sid´] = ´audio/prs.sid´ + MimeType[´slk´] = ´text/spreadsheet´ + MimeType[´smd´] = ´application/vnd.stardivision.mail´ + MimeType[´smf´] = ´application/vnd.stardivision.math´ + MimeType[´smi´] = ´application/x-smil´ + MimeType[´smil´] = ´application/x-smil´ + MimeType[´sml´] = ´application/x-smil´ + MimeType[´sms´] = ´application/x-sms-rom´ + MimeType[´snd´] = ´audio/basic´ + MimeType[´so´] = ´application/x-shared-library´ + MimeType[´spd´] = ´application/x-font-speedo´ + MimeType[´sql´] = ´text/x-sql´ + MimeType[´src´] = ´application/x-wais-source´ + MimeType[´stc´] = ´application/vnd.sun.xml.calc.template´ + MimeType[´std´] = ´application/vnd.sun.xml.draw.template´ + MimeType[´sti´] = ´application/vnd.sun.xml.impress.template´ + MimeType[´stm´] = ´audio/x-stm´ + MimeType[´stw´] = ´application/vnd.sun.xml.writer.template´ + MimeType[´sty´] = ´text/x-tex´ + MimeType[´sun´] = ´image/x-sun-raster´ + MimeType[´sv4cpio´] = ´application/x-sv4cpio´ + MimeType[´sv4crc´] = ´application/x-sv4crc´ + MimeType[´svg´] = ´image/svg+xml´ + MimeType[´svgz´] = ´image/svg+xml´ + MimeType[´swf´] = ´application/x-shockwave-flash´ + MimeType[´sxc´] = ´application/vnd.sun.xml.calc´ + MimeType[´sxd´] = ´application/vnd.sun.xml.draw´ + MimeType[´sxg´] = ´application/vnd.sun.xml.writer.global´ + MimeType[´sxi´] = ´application/vnd.sun.xml.impress´ + MimeType[´sxm´] = ´application/vnd.sun.xml.math´ + MimeType[´sxw´] = ´application/vnd.sun.xml.writer´ + MimeType[´sylk´] = ´text/spreadsheet´ + MimeType[´t´] = ´text/x-troff´ + MimeType[´tar´] = ´application/x-tar´ + MimeType[´tcl´] = ´text/x-tcl´ + MimeType[´tex´] = ´text/x-tex´ + MimeType[´texi´] = ´text/x-texinfo´ + MimeType[´texinfo´] = ´text/x-texinfo´ + MimeType[´tga´] = ´image/x-tga´ + MimeType[´tgz´] = ´application/x-compressed-tar´ + MimeType[´theme´] = ´application/x-theme´ + MimeType[´tif´] = ´image/tiff´ + MimeType[´tiff´] = ´image/tiff´ + MimeType[´torrent´] = ´application/x-bittorrent´ + MimeType[´tr´] = ´text/x-troff´ + MimeType[´tsv´] = ´text/tab-separated-values´ + MimeType[´ttc´] = ´application/x-font-ttf´ + MimeType[´ttf´] = ´application/x-font-ttf´ + MimeType[´txt´] = ´text/plain´ + MimeType[´ustar´] = ´application/x-ustar´ + MimeType[´vcf´] = ´text/x-vcalendar´ + MimeType[´vcs´] = ´text/x-vcalendar´ + MimeType[´vi´] = ´text/x-vi´ + MimeType[´vim´] = ´text/x-vi´ + MimeType[´viv´] = ´video/vnd.vivo´ + MimeType[´vivo´] = ´video/vnd.vivo´ + MimeType[´vob´] = ´video/mpeg´ + MimeType[´voc´] = ´audio/x-voc´ + MimeType[´vor´] = ´application/vnd.stardivision.writer´ + MimeType[´wav´] = ´audio/x-wav´ + MimeType[´wax´] = ´audio/x-ms-asx´ + MimeType[´wk1´] = ´application/vnd.lotus-1-2-3´ + MimeType[´wk3´] = ´application/vnd.lotus-1-2-3´ + MimeType[´wk4´] = ´application/vnd.lotus-1-2-3´ + MimeType[´wks´] = ´application/vnd.lotus-1-2-3´ + MimeType[´wmf´] = ´image/x-wmf´ + MimeType[´wmv´] = ´video/x-ms-wmv´ + MimeType[´wrl´] = ´model/vrml´ + MimeType[´wvx´] = ´video/x-ms-wvx´ + MimeType[´xac´] = ´application/x-gnucash´ + MimeType[´xbel´] = ´application/xbel´ + MimeType[´xbm´] = ´image/x-xbitmap´ + MimeType[´xcf´] = ´image/x-xcf´ + MimeType[´xi´] = ´audio/x-xi´ + MimeType[´xla´] = ´application/vnd.ms-excel´ + MimeType[´xlc´] = ´application/vnd.ms-excel´ + MimeType[´xld´] = ´application/vnd.ms-excel´ + MimeType[´xls´] = ´application/vnd.ms-excel´ + MimeType[´xlt´] = ´application/vnd.ms-excel´ + MimeType[´xm´] = ´audio/x-xm´ + MimeType[´xml´] = ´text/xml´ + MimeType[´xpm´] = ´image/x-xpixmap´ + MimeType[´xwd´] = ´image/x-xwindowdump´ + MimeType[´y´] = ´text/x-yacc´ + MimeType[´yacc´] = ´text/x-yacc´ + MimeType[´z´] = ´application/x-compress´ + MimeType[´zip´] = ´application/zip´ + MimeType[´zoo´] = ´application/x-zoo´ +end diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/net.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/net.lib.rb --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/net.lib.rb 2004-12-17 12:40:15.000000000 +0100 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/net.lib.rb 2005-06-04 14:41:52.000000000 +0200 @@ -1,5 +1,6 @@ require "ev/ruby" require "ev/ftools" +require "ev/mime" require "net/http" require "socket" require "uri" @@ -13,11 +14,11 @@ if File.file?(file) Hash.file(file).each do |k, v| eval "$#{k} = ´#{v}´" unless k=~ /^\#/ - #$proxy_auth = [$proxy_auth].pack("m").chomp if k == "proxy_auth" end end def uri2txt(s) + # ??? Werkt niet goed i = s.index(/%[[:digit:]]{2}/) while not i.nil? s = s[0..(i-1)] + s[(i+1)..(i+2)].unpack(´H2´).shift.to_i.chr + s[(i+3)..-1] @@ -147,6 +148,8 @@ rescue end + @path = "/" if (not @path.nil? and @path.empty? and @protocol == "http") + @protocol = "" if @protocol.nil? @userpass = "" if @userpass.nil? @host = "" if @host.nil? @@ -163,7 +166,7 @@ @port = @port.to_i end - def + (url2) + def +(url2) url1 = self.to_s url2 = url2.to_s if url2.kind_of?(self.class) @@ -174,7 +177,7 @@ protocol = @protocol userpass = @userpass host = @host - port = @port.to_s + port = @port path = @path vars = varstring anchor = @anchor @@ -196,6 +199,33 @@ return res end + def localname + protocol = @protocol + userpass = @userpass + host = @host + port = @port + path = @path + vars = varstring + anchor = @anchor + + protocol = nil if @protocol.empty? + userpass = nil if @userpass.empty? + host = nil if @host.empty? + port = nil if @port.zero? + path = nil if @path.empty? + vars = nil if @vars.empty? + anchor = nil if @anchor.empty? + + path = "#{path}." if path =~ /[\/\\]$/ + + f = MD5.new(protocol.to_s + userpass.to_s + host.to_s + port.to_s + File.dirname(path.to_s) + vars.to_s).to_s + e = File.basename(path.to_s).gsub(/[^\w\.\-]/, "_").gsub(/_+/, "_") + res = f + "." + e + res.gsub!(/[^\w]+$/, "") + + return res + end + def varstring res = [] vars = @vars.dup @@ -281,36 +311,52 @@ end end + class NoAddressException < StandardError + end + + def self.getaddress(host) + if not @@hosts.include?(host) + @@hosts[host] = "" + evtimeout(5) do # ??? Doet ´ut niet?... + @@hosts[host] = IPSocket.getaddress(host) + end + end + + raise NoAddressException, host if @@hosts[host].empty? + + @@hosts[host] + end + def self.head(uri, form={}, recursive=true) header = Header.new(nil) begin while not uri.nil? - if $proxy.nil? or $proxy.empty? - uri = EVURI.new(uri) if uri.kind_of? String - host = uri.host - port = uri.port + uri = EVURI.new(uri) if uri.kind_of? String + host = uri.host + port = uri.port + + if $proxy.nil? or $proxy.empty? or host == "localhost" io = nil @@mutex.synchronize do - @@hosts[host] = IPSocket.getaddress(host) if not @@hosts.include?(host) - io = TCPSocket.new(@@hosts[host], port.zero? ? 80 : port) + io = TCPSocket.new(getaddress(host), port.zero? ? 80 : port) end io.write("HEAD #{uri.path or ´/´}#{uri.varstring.empty? ? ´´ : ´?´ + uri.varstring} HTTP/1.0\r\nHost: #{host}\r\n\r\n") else proxy = EVURI.new($proxy) - host = proxy.host - port = proxy.port - - io = TCPSocket.new(host, port.zero? ? 8080 : port) + io = TCPSocket.new(proxy.host, proxy.port.zero? ? 8080 : proxy.port) io.write("HEAD #{uri} HTTP/1.0\r\n#{"Proxy-Authorization: Basic "+$proxy_auth+"\r\n" if not $proxy_auth.nil?}\r\n\r\n") end io.close_write - res = io.read + res = io.read + + io.close_read + header, data = nil, nil header, data = res.split(/\r*\n\r*\n/, 2) if not res.nil? header = Header.new(header) @@ -321,14 +367,23 @@ uri = nil end end - rescue + rescue Errno::ECONNRESET, Errno::EHOSTUNREACH => e + $stderr.puts e.message + sleep 1 + retry + rescue Errno::ECONNREFUSED => e + data = nil + rescue NoAddressException => e + $stderr.puts e.message header = Header.new(nil) end + GC.start + return header end - def self.get(uri, form={}) + def self.get(uri, httpheader={}, form={}) post = Array.new form.each_pair do |var, value| post << "#{var.to_html}=#{value.to_html}" @@ -339,15 +394,14 @@ begin while not uri.nil? - if $proxy.nil? or $proxy.empty? - uri = EVURI.new(uri) if uri.kind_of? String - host = uri.host - port = uri.port + uri = EVURI.new(uri) if uri.kind_of? String + host = uri.host + port = uri.port + if $proxy.nil? or $proxy.empty? or host == "localhost" io = nil @@mutex.synchronize do - @@hosts[host] = IPSocket.getaddress(host) if not @@hosts.include?(host) - io = TCPSocket.new(@@hosts[host], port.zero? ? 80 : port) + io = TCPSocket.new(getaddress(host), port.zero? ? 80 : port) end if post.empty? @@ -357,10 +411,7 @@ end else proxy = EVURI.new($proxy) - host = proxy.host - port = proxy.port - - io = TCPSocket.new(host, port.zero? ? 8080 : port) + io = TCPSocket.new(proxy.host, proxy.port.zero? ? 8080 : proxy.port) if post.empty? io.write "GET %s HTTP/1.0\r\n" % uri @@ -370,22 +421,32 @@ end io.write "Host: %s\r\n" % host - io.write "User-Agent: evwget\r\n" - io.write "Proxy-Authorization: Basic %s\r\n" % $proxy_auth unless $proxy_auth.nil? + io.write "User-Agent: xyz\r\n" + io.write "Proxy-Authorization: Basic %s\r\n" % $proxy_auth unless $proxy_auth.nil? #io.write "Accept-Encoding: deflate\r\n" - #io.write "Connection: close\r\n" + #io.write "Accept-Charset: ISO-8859-1\r\n" + io.write "Connection: close\r\n" io.write "Content-Type: application/x-www-form-urlencoded\r\n" unless post.empty? io.write "Content-Length: %s\r\n" % post.length unless post.empty? + httpheader.each do |k, v| + $stderr.puts "%s: %s\r\n" % [k, v] + io.write "%s: %s\r\n" % [k, v] + end io.write "\r\n" io.write post unless post.empty? io.close_write res = io.read + + io.close_read + header, data = nil, nil header, data = res.split(/\r*\n\r*\n/, 2) if not res.nil? header = Header.new(header) + length = header.header["content-length"] + data = "" if length == "0" if header.header["location"] != uri.to_s uri = EVURI.new(uri) + header.header["location"] @@ -397,12 +458,25 @@ data = Chunk.new(data).to_s if not data.nil? end + #if header.header["content-encoding"] == "gzip" + #data = "gzip -d".exec(data) if not data.nil? + #end + data = nil unless header.code == 200 end - rescue + rescue Errno::ECONNRESET, Errno::EHOSTUNREACH => e + $stderr.puts e.message + sleep 1 + retry + rescue Errno::ECONNREFUSED => e + data = nil + rescue NoAddressException, Errno::ECONNREFUSED => e + $stderr.puts e.message data = nil end + GC.start + return data end @@ -422,7 +496,7 @@ file = "#{dir}/#{hash}" data = nil - Dir.mkdirrec(dir) + File.mkpath(dir) expire = 356*24*60*60 @@ -447,7 +521,7 @@ class RequestGet < Hash def initialize(data) CGI.parse(data).each do |k, v| - self[k] = v.join(" ") + self[k] = v end end end @@ -455,7 +529,7 @@ class RequestPost < Hash def initialize(data) CGI.parse(data).each do |k, v| - self[k] = v.join(" ") + self[k] = v end end end @@ -493,6 +567,8 @@ attr_reader :request attr_reader :cookies attr_reader :vars + attr_reader :user + attr_writer :user def initialize(io) @io = io @@ -562,6 +638,7 @@ class Response < Hash attr_writer :response + attr_writer :file attr_reader :cookies attr_reader :stop attr_reader :at_stop @@ -574,10 +651,20 @@ @syncd = false @stop = false @at_stop = lambda{} + @file = nil end def flush sync + + if @file + File.open(@file, "rb") do |f| + while data = f.read(10_000) + @io.write data + end + end + end + @io.close end @@ -595,6 +682,21 @@ end def sync + size = (@data or "").length + + if @file + ext = @file.scan(/\.[^\.]*$/) + ext = ext.shift + ext = ext[1..-1] unless ext.nil? + mimetype = EVMime::MimeType[ext] + + self["Content-Type"] = mimetype unless mimetype.nil? + + size += File.size(@file) if File.file?(@file) + end + + self["Content-Length"] = size + @io.write("#{to_s}\r\n") unless @syncd @io.write(@data) @data = "" @@ -605,6 +707,10 @@ @data << s end + def clean + @data = "" + end + def inspect "(Response: %s)" % [@response, @data].join(", ") end @@ -640,7 +746,7 @@ count = 0 at_exit do - $stderr.puts "Received #{count} requests" + #$stderr.puts "Received #{count} requests" end serverthread = @@ -678,7 +784,7 @@ end if (not remote) or (remote and (auth.nil? or auth.empty? or authenticate(auth, realm, req, resp))) - $stderr.puts "#{count2}, #{Time.new.strftime("%Y-%m-%d.%H:%M:%S")}, #{ip}, #{req.request.to_s.strip}" + $stderr.puts "#{count2} #{Time.new.strftime("%Y-%m-%d %H:%M:%S")} #{ip} #{req.user} #{req.request.to_s.strip}" begin yield(req, resp) @@ -687,6 +793,16 @@ $stderr.puts e.class.to_s + ": " + e.message $stderr.puts e.backtrace.collect{|s| "\t"+s}.join("\n") end + resp["Content-Type"] = "text/plain" + resp.response = "HTTP/1.0 200 ???" + resp.clean + resp << e.class.to_s + ": " + e.message + resp << "\n" + resp << "\n" + resp << e.backtrace.collect{|s| "\t"+s}.join("\n") + resp << "\n" + resp << "\n" + resp << "(You can use the back button and stop the application properly, if appropriate.)" end stop = true if resp.stop? @@ -738,13 +854,13 @@ ok = (auths.include?(u) and auths[u] == p) - if ok - - else + unless ok resp["WWW-Authenticate"] = "Basic realm=\"#{realm}\"" resp.response = "HTTP/1.0 401 Unauthorized" end + req.user = u + return ok end end diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/ruby.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/ruby.lib.rb --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2004-12-17 12:40:15.000000000 +0100 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/ruby.lib.rb 2005-06-04 14:41:52.000000000 +0200 @@ -18,14 +18,16 @@ tekens31 = ´\w\s\r\n´ -RegExpStringWord = "([#{tekens11}]+)" ; RegExpWord = Regexp.new(RegExpStringWord) -RegExpStringWord2 = "([#{tekens21}]([#{tekens22}]*[#{tekens23}])?)" ; RegExpWord2 = Regexp.new(RegExpStringWord2) -RegExpStringText = "([#{tekens31}]+)" ; RegExpText = Regexp.new(RegExpStringText) -RegExpStringFile = ´(\w[\w\.\-]*)´ ; RegExpFile = Regexp.new(RegExpStringFile) -RegExpStringEmail = ´([\w\-\.]+@[\w\-\.]+)´ ; RegExpEmail = Regexp.new(RegExpStringEmail) -RegExpStringURL = ´(\w+:\/\/[\w\.\-]+(:\d*)?\/[\w\.\-\/\#\?\=\%]*)´ ; RegExpURL = Regexp.new(RegExpStringURL) -RegExpStringPrint = ´([\w \t\r\n\`\~\!\@\#\$\%\^\&\*\(\)\-\+\=\[\]\{\}\;\:\´\"\,\.\/\<\>\?\\\|]+)´ ; RegExpPrint = Regexp.new(RegExpStringPrint) -RegExpStringDiff = ´(^[\-\+]([^\-\+].*)?)´ ; RegExpDiff = Regexp.new(RegExpStringDiff) +RegExpStringWord = "([#{tekens11}]+)" ; RegExpWord = Regexp.new(RegExpStringWord) +RegExpStringWord2 = "([#{tekens21}]([#{tekens22}]*[#{tekens23}])?)" ; RegExpWord2 = Regexp.new(RegExpStringWord2) +RegExpStringText = "([#{tekens31}]+)" ; RegExpText = Regexp.new(RegExpStringText) +RegExpStringFile = ´(\w[\w\.\-]*)´ ; RegExpFile = Regexp.new(RegExpStringFile) +RegExpStringEmail = ´([\w\-\.]+@[\w\-\.]+)´ ; RegExpEmail = Regexp.new(RegExpStringEmail) +RegExpStringURL = ´(\w+:\/\/[\w\.\-]+(:\d*)?\/[\w\.\-\/\#\?\=\%]*)´ ; RegExpURL = Regexp.new(RegExpStringURL) +RegExpStringPrint = ´([\w \t\r\n\`\~\!\@\#\$\%\^\&\*\(\)\-\+\=\[\]\{\}\;\:\´\"\,\.\/\<\>\?\\\|]+)´ ; RegExpPrint = Regexp.new(RegExpStringPrint) +RegExpStringDiff = ´(^[\-\+]([^\-\+].*)?)´ ; RegExpDiff = Regexp.new(RegExpStringDiff) +RegExpStringHTHLink = ´(`[\w\,]*\ba\b[^`]*`)´ ; RegExpHTHLink = Regexp.new(RegExpStringHTHLink) +RegExpStringHTHSpecial = ´(`[^`]*`)´ ; RegExpHTHSpecial = Regexp.new(RegExpStringHTHSpecial) module Enumerable def deep_dup @@ -64,6 +66,10 @@ def to_fs to_f end + + def to_html(eolconversion=true) + self.to_s.to_html(eolconversion) + end end class Integer @@ -211,8 +217,8 @@ end def splitwords(tokens=[]) - tokens = [tokens] unless tokens.kind_of?(Array) - res = [] + tokens = [tokens] unless tokens.kind_of?(Array) + res = [] self.splitblocks(["´", "´"], [´"´, ´"´]).each do |type, s| case type @@ -437,13 +443,14 @@ end def format(format) + format = format.gsub(/\s/, "") res = [] [format.length, self.length].min.times do |n| - case format[n].chr - when "i" then res << self[n].to_i - when "s" then res << self[n].to_s - when "x" then res << self[n] + case format[n].chr.downcase + when "i" then res << self[n].to_i + when "s" then res << self[n].to_s + else res << self[n] end end @@ -540,6 +547,36 @@ def ids collect{|e| e.ids} end + + def rotate + raise "Array has to be 2D (An Array of Arrays)." unless self.dup.delete_if{|a| a.kind_of?(Array)}.empty? + + res = [] + + self[0].length.times do |x| + a = [] + + self.length.times do |y| + a << self[y][x] + end + + res << a + end + + res + end + + def to_h + raise "Array has to be 2D (An Array of Arrays)." unless self.dup.delete_if{|a| a.kind_of?(Array)}.empty? + + res = {} + + self.each do |k, v, *rest| + res[k] = v + end + + res + end end class Hash @@ -699,7 +736,11 @@ end def linux? - not windows? and not cygwin? + not (target_os.downcase =~ /linux/).nil? +end + +def darwin? + not (target_os.downcase =~ /darwin/).nil? end def windows? @@ -727,8 +768,9 @@ end def stdtmp - $stderr = $stdout = File.new("#{temp}/ruby.#{Process.pid}.log", "a") unless ARGV.include?("--rwd-exit") + $stderr = $stdout = File.new("#{temp}/ruby.#{Process.pid}.log", "a") end +stdtmp if defined?(RUBYSCRIPT2EXE) and (RUBYSCRIPT2EXE =~ /rubyw/i) $nobm = false @@ -745,7 +787,7 @@ end end - label = label.to_s + label = label.inspect #unless label.kind_of?(String) res = nil $bm_mutex = ($bm_mutex or Mutex.new) @@ -757,29 +799,41 @@ $bm = {} at_exit do - format1 = "%10s %10s %10s %10s %10s %10s %10s" - format2 = "%10s %10.6f %10.6f %10.6f %10.6f %10.6f %10d" - - $stderr.puts format1 % ["LABEL", "USERCPU", "SYSCPU", "CUSERCPU", "CSYSCPU", "ELAPSED", "TIMES"] - $bm.sort{|a, b| [a[1], a[0]] <=> [b[1], b[0]]}.each do |k, v| - $stderr.puts format2 % [k, *v] + l = $bm.keys.collect{|s| s.length}.max + #format1 = "%10s %10s %10s %10s %10s %10s %s" + #format2 = "%10.6f %10.6f %10.6f %10.6f %10.6f %10d %s" + #$stderr.puts format1 % ["USERCPU", "SYSCPU", "CUSERCPU", "CSYSCPU", "ELAPSED", "COUNT", "LABEL"] + #$bm.sort{|a, b| [b[1], b[0]] <=> [a[1], a[0]]}.each do |k, v| + #$stderr.puts format2 % (v + [k]) + #end + + format1 = "%10s %10s %10s %s" + format2 = "%10.6f %10.6f %10d %s" + $bm.each do |k, v| + $bm[k] = [v[0]+v[1], v[4], v[5]] + end + $stderr.puts format1 % ["CPU", "ELAPSED", "COUNT", "LABEL"] + $bm.sort{|a, b| [b[1], b[0]] <=> [a[1], a[0]]}.each do |k, v| + $stderr.puts format2 % (v + [k]) end end end $bm[label] = [0.0]*5 + [0] unless $bm.include?(label) + $bm[label][5] += 1 end if block_given? bm = Benchmark.measure{res = yield} bma = bm.to_a # [dummy label, user CPU time, system CPU time, childrens user CPU time, childrens system CPU time, elapsed real time] + $bm_last = bma + $bm_mutex.synchronize do + e = $bm[label] 0.upto(4) do |n| - $bm[label][n] += bma[n+1] + e[n] += bma[n+1] end - - $bm[label][5] += 1 end end @@ -817,3 +871,19 @@ res end end + +def ask(options, text=false) + i = 0 + $stderr.puts "" + options.each do |s| + $stderr.puts " %d %s" % [i+=1, s] + end + $stderr.puts "" + $stderr.print "? " + res = $stdin.gets + unless res.nil? + res = res.strip + res = options[res.to_i-1] if text and not res.empty? + end + res +end diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/rwd.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/rwd.lib.rb --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2004-12-17 12:40:15.000000000 +0100 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/rwd.lib.rb 2005-06-04 14:41:52.000000000 +0200 @@ -15,6 +15,7 @@ end $rwd_exit = ARGV.include?("--rwd-exit") # Hack ??? +$rwd_exit = true if defined?(REQUIRE2LIB) $rwd_debug = ($rwd_debug or $DEBUG or false) $rwd_border = ($rwd_border or 0) $rwd_dir = Dir.pwd @@ -27,10 +28,12 @@ RWDEmptyline = "..." +#module RWD + rcfile = nil -s = ENV["HOME"] ; s = s + "/.rwdrc" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s)) -s = ENV["USERPROFILE"] ; s = s + "/rwd.cfg" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s)) -s = ENV["windir"] ; s = s + "/rwd.cfg" if not s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s)) +s = ENV["HOME"] ; s = File.expand_path(".rwdrc", s) unless s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s)) +s = ENV["USERPROFILE"] ; s = File.expand_path("rwd.cfg", s) unless s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s)) +s = ENV["windir"] ; s = File.expand_path("rwd.cfg", s) unless s.nil? ; rcfile = s if (not s.nil? and rcfile.nil? and File.file?(s)) AL = "align=´left´" AC = "align=´center´" @@ -51,7 +54,7 @@ ENV["RWDPORTS"] = (ENV["RWDPORTS"] or "7701-7709") ENV["RWDTHEME"] = (ENV["RWDTHEME"] or "DEFAULT") -trap("INT") {puts "Terminating..." ; exit} +#trap("INT") {puts "Terminating..." ; exit} $SAFE = 2 @@ -93,7 +96,7 @@ a = [emptyline].concat(self) end - a.numsort.collect{|s| "<option>#{s.to_html}</option>" }.join("\n") + a.numsort.collect{|s| "<option>#{s.to_s.to_html}</option>" }.join("\n") end def rwd_method(method) @@ -109,17 +112,32 @@ return res end - def rwd_row(key=nil, value=nil) + def rwd_row(key=nil, value=nil, bold=false) res = "" res = res + "<row valign=´top´>" res = res + "<radio name=´#{key.to_html}´ value=´#{value.to_html}´/>" unless key.nil? - res = res + self.collect{|s| "<p align=´left´>#{s.to_html}</p>"}.join("") + res = res + self.collect{|s| "<p align=´#{(s.kind_of?(Numeric) or s =~ /^\d+\.\d+$/) ? "right" : "left"}´>#{"<b>" if bold}#{s.to_s.to_html}#{"</b>" if bold}</p>"}.join("") res = res + "</row>" return res end + def rwd_table(headers=nil, highlightrows=[]) + res = "" + + highlightrows = [highlightrows].flatten + + n = -1 + + res = res + "<table>" + res = res + headers.rwd_row(nil, nil, true) unless headers.nil? + res = res + self.collect{|a| a.rwd_row(nil, nil, highlightrows.include?(n+=1))}.join("") + res = res + "</table>" + + return res + end + def rwd_headers(emptyfield=false) res = "" @@ -131,7 +149,7 @@ return res end - def rwd_form(prefix, values, twoparts=0, options={}) + def rwd_form(prefix, values=[], twoparts=0, options={}) res = [] res << "<table>" @@ -151,7 +169,7 @@ s = "" s << "<text name=´#{name}´" - s << " value=´#{values[n].to_html}´" if n < values.length + s << " value=´#{values[n].to_s.to_html}´" if n < values.length s << "/>" res << s @@ -266,7 +284,7 @@ template = $rwd_html_1 template = $rwd_html_PDA_1 if pda - res <<(template(template, args)) + res << (template(template, args)) when "p" then res << "<p #{align}>" when "pre" then res << "<pre #{align}>" when "big" then res << "<p #{align}><big>" @@ -310,6 +328,7 @@ maxlength = "" maxlength = "maxlength=´%s´" % @args["maxlength"] if @args.include?("maxlength") size = "" + size = "size=´%s´" % @args["size"] if @args.include?("size") size = "size=´%s´" % 10 if pda res << "<p #{align}><input name=´#{@args["name"]}´ value=´#{value1}´ type=´text´ #{maxlength} #{size}>" oneormorefields << "true" @@ -340,7 +359,7 @@ end oneormorefields << "true" when "select" - res << "<select #{align} name=´#{@args["name"]}´ width=´#{@args["width"]}´>" + res << "<select #{align} name=´#{@args["name"]}´ width=´#{@args["width"]} size=´#{@args["size"]}´>" # ??? Misschien nog iets met ´multiple´? name = @args["name"] $select = varshtml[name] oneormorefields << "true" @@ -480,7 +499,7 @@ template = $rwd_html_2 template = $rwd_html_PDA_2 if pda - res <<(template(template, args)) + res << (template(template, args)) when "p" then res << "</p>" when "pre" then res << "</pre>" when "big" then res << "</big></p>" @@ -555,10 +574,15 @@ end logo = nil - logo = File.expand_path(vars["logo"], $rwd_files) if vars.include?("logo") - logo = nil unless logo.nil? or File.file?(logo) + logo = File.expand_path(vars["logo"], $rwd_files) if vars.include?("logo") + logo = nil unless logo.nil? or File.file?(logo) + + watermark = nil + watermark = File.expand_path(vars["watermark"], $rwd_files) if vars.include?("watermark") + watermark = nil unless watermark.nil? or File.file?(watermark) a["LOGO"] = "" unless not logo.nil? + a["WATERMARK"] = "" unless not watermark.nil? a["HELPBUTTON"] = (not (vars["nohelpbutton"])) a["BACKBUTTONS"] = (not (vars["nobackbuttons"])) @@ -619,10 +643,12 @@ tree = XML.new(rwd) tree.parse(OpenTag, "window") do |type, obj| + $rwd_appvars.each{|k, v| obj.args[k] = v} @@windows[rwd][obj.args["name"]] = obj.to_h end tree.parse(OpenTag, "helpwindow") do |type, obj| + $rwd_appvars.each{|k, v| obj.args[k] = v} @@helpwindows[rwd][obj.args["name"]] = obj.to_h end end @@ -638,6 +664,8 @@ firstaction = "" html = [] + vars = vars.deep_dup + vars.each do |key, value| if not key.empty? if value.respond_to? "to_s" @@ -730,7 +758,7 @@ class RWDDone < RWDWindow def initialize(exitbrowser) - super("<window title=´RWD Message´ nobackbuttons noclosebutton><p>Done.</p><horizontal><close/>#{exitbrowser ? "" : "<button caption=´Again´/>"}</horizontal>#{exitbrowser ? "<closewindow/>" : ""}</window>") + super("<window title=´RWD Message´ nobackbuttons noclosebutton><p>Done.</p><i>(Some browsers don´t close,<br>because of security reasons.)</i><horizontal><close/>#{exitbrowser ? "" : "<button caption=´Again´/>"}</horizontal>#{exitbrowser ? "<closewindow/>" : ""}</window>") end end @@ -741,6 +769,14 @@ @rwd_history = [] @rwd_ignore_vars = [] @rwd_call_after_back = [] + @rwd_time = Time.now + + $rwd_appvars = {} if $rwd_appvars.nil? + XML.new(xml).parse(OpenTag, "application") do |type, obj| + obj.args.deep_dup.each do |k, v| + $rwd_appvars[k] = v + end + end end def self.file(rwdfile, *args) @@ -764,9 +800,14 @@ port = port.to_i @rwd_server = RWDServer.new(self, port, io, auth, realm) + + self end def render(res, path, post, download, downloadfile, pda, sessionid) + # Avoid a timeout. + + @rwd_time = Time.now # Initialize some vars. @@ -777,7 +818,7 @@ help = false back = false tab = "" - @rwd_msgtype = nil + @rwd_msgtype = nil if @rwd_progress_thread.nil? @rwd_download = nil @rwd_download_file = nil @@ -818,6 +859,8 @@ @rwd_action = "rwd_back" end + @rwd_history = [["main", [], "main", ""]] if @rwd_history.empty? + if @rwd_action =~ /^rwd_tab_/ @rwd_tab = @rwd_action.sub(/^rwd_tab_/, "") @rwd_history[-1][3] = @rwd_tab @@ -839,6 +882,7 @@ @rwd_history = [] when "rwd_quit" done = true + else end # History stuff @@ -882,6 +926,15 @@ a = [@rwd_action, @rwd_args, @rwd_window, @rwd_tab] @rwd_history.push a if (@rwd_history[-1] != a or not @rwd_msgtype.nil?) + + if @rwd_window == "rwd_back" + @rwd_history.pop + @rwd_history.pop + @rwd_action = (@rwd_history[-1] or [nil, nil, nil])[0] + @rwd_args = (@rwd_history[-1] or [nil, nil, nil])[1] + @rwd_window = (@rwd_history[-1] or [nil, nil, nil])[2] + @rwd_tab = (@rwd_history[-1] or [nil, nil, nil])[3] + end end end @@ -910,12 +963,13 @@ download << @rwd_download downloadfile << @rwd_download_file else - if not @rwd_msgtype.nil? - res << RWDMessage.new(@rwd_msg).render(pda) if @rwd_msgtype == "message" - res << RWDError.new(@rwd_msg).render(pda) if @rwd_msgtype == "error" + if not @rwd_progress_thread.nil? + res << RWDProgressBar.new(@rwd_progress_refresh, @rwd_progress_progress).render(pda, @rwd_refresh_action) else - if not @rwd_progress_thread.nil? - res << RWDProgressBar.new(@rwd_progress_refresh, @rwd_progress_progress).render(pda, @rwd_refresh_action) + if not @rwd_msgtype.nil? + res << RWDMessage.new(@rwd_msg).render(pda) if @rwd_msgtype == "message" + res << RWDError.new(@rwd_msg).render(pda) if @rwd_msgtype == "error" + res << @rwd_msg if @rwd_msgtype == "text" else puts "Window: #{@rwd_window}" if $rwd_debug puts "Tab: #{@rwd_tab}" if $rwd_debug @@ -943,6 +997,11 @@ @rwd_msgtype = "error" end + def text(msg) + @rwd_msg = "<html><body><pre>#{msg}</pre></body></html>" + @rwd_msgtype = "text" + end + def progressbar(refresh, *progress) @rwd_progress_refresh = (refresh or 1) @rwd_progress_progress = [] @@ -983,6 +1042,23 @@ def exitbrowser @rwd_exitbrowser = true end + + def timeout(timeout, interval=1) + @rwd_timeout = timeout + + unless @rwd_timeout_thread + @rwd_timeout_thread = + Thread.new do + loop do + if Time.now - @rwd_time > @rwd_timeout + $stderr.puts "Exiting due to timeout (#{@rwd_timeout} seconds)." + exit 1 + end + sleep interval + end + end + end + end end class RWDLogin < RWDialog @@ -1039,7 +1115,7 @@ end end -class Session < Hash +class RWDSession < Hash attr_reader :sessionid attr_reader :lastaccess attr_reader :authenticated @@ -1054,9 +1130,7 @@ def touch @lastaccess = Time.now end -end -class RWDSession < Session def render(res, path, post, download, downloadfile, pda) done = self["object"].render(res, path, post, download, downloadfile, pda, @sessionid) @@ -1092,18 +1166,13 @@ browser = ENV["RWDBROWSER"].dup url = "http://localhost:%s/" % [port] - if cygwin? - browser.gsub!(/\\/, "/") - browser.gsub!(/ /, "\\ ") - end - re = /[$%]1\b/ command = "%s \"%s\"" % [browser, url] command = browser.gsub(re, url) if browser =~ re command.gsub!(/%port%/, port.to_s) - system(command) or puts "Starting of the browser failed, or the browser terminated abnormally.\nCommand => #{command}" + system(command) or $stderr.puts "Starting of the browser failed, or the browser terminated abnormally.\nCommand => #{command}" #end puts "The browser has terminated." @@ -1119,8 +1188,10 @@ HTTPServer.serve(portio, (not auth.nil?)) do |req, resp| threadlimiter.wait do - - vars = req.vars.dup + vars = {} + req.vars.each do |k, v| + vars[k] = v.join("\t") + end pad = (req.request.path or "/") if auth.kind_of? String @@ -1151,7 +1222,7 @@ end if oldsessionid.nil? or oldsessionid.empty? - if not auth.nil? and not auth.empty? and not session.authenticated and pad != "/rwd_pixel.gif" + if not auth.nil? and not auth.empty? and not session.authenticated and pad !~ /^\/rwd_/ # Check authentication @@ -1289,6 +1360,10 @@ <style type=´text/css´> <!-- + body { + background : url(%WATERMARK%) white center center no-repeat fixed; + } + a { text-decoration : none; } @@ -1379,22 +1454,22 @@ <table align=´center´ border=´0´ cellspacing=´0´ cellpadding=´0´> <tr align=´center´> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> </tr> <tr align=´center´> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> @@ -1402,12 +1477,12 @@ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> </tr> <tr align=´center´> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> @@ -1417,11 +1492,11 @@ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> </tr> <tr align=´center´> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> @@ -1431,7 +1506,7 @@ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> </tr> <tr align=´center´> @@ -1520,7 +1595,7 @@ </tr> <tr align=´center´> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> @@ -1530,11 +1605,11 @@ <td align=´center´ bgcolor=´#EEEEEE´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> </tr> <tr align=´center´> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> @@ -1544,12 +1619,12 @@ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> </tr> <tr align=´center´> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> @@ -1557,22 +1632,22 @@ <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> </tr> <tr align=´center´> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> <td align=´center´ bgcolor=´black´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> - <td align=´center´ bgcolor=´white´><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> + <td align=´center´ ><img src=´rwd_pixel.gif´ height=´1´ width=´1´></td> </tr> </table> @@ -1601,6 +1676,10 @@ <style type=´text/css´> <!-- + body { + background : url(%WATERMARK%) white center center no-repeat fixed; + } + a { text-decoration : none; } @@ -1823,26 +1902,21 @@ " $rwd_pixel = " -R0lGODlhAQABAOcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoK -CgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZ -GRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygo -KCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3 -Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZG -RkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVV -VVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2Rk -ZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNz -c3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CAgIGBgYKC -goODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGR -kZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6Cg -oKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+v -r7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5ubq6uru7u7y8vL29vb6+ -vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3N -zc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc -3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr -6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6 -+vv7+/z8/P39/f7+/v///yH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh+QQB -CgD/ACwAAAAAAQABAAAIBAD/BQQAOw== +R0lGODlhAQABAMIAAAAAAP///+7u7kREiP///////////////yH5BAEKAAMA +LAAAAAABAAEAAAMCOAkAOw== ".unpack("m").shift +$rwd_logo = " +R0lGODlhEAAQAMIAAAAAAP///+7u7kREiP///////////////yH5BAEKAAQA +LAAAAAAQABAAAANCSErQ/k21QKulrIrNu8heuAGUcJ0BuQVD676DasK0zNKv +jefB+oo6l6AxBAx7M2HRePQph5xga0RsJqfELPI2DSUAADs= +".unpack("m").shift + + $rwd_html_1, $rwd_html_2 = $rwd_html[ENV["RWDTHEME"]].split(/^\s*%BODY%\s*\r*$/) $rwd_html_PDA_1, $rwd_html_PDA_2 = $rwd_html["PDA"].split(/^\s*%BODY%\s*\r*$/) + +#end +# +#class RWDialog < RWD::RWDialog +#end diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/sgml.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/sgml.lib.rb --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/sgml.lib.rb 2004-12-17 12:40:15.000000000 +0100 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/sgml.lib.rb 2005-06-04 14:41:52.000000000 +0200 @@ -88,7 +88,7 @@ def prechildren_to_sgml(res) a = [@subtype] - @args.each do |k, v| + @args.sort.each do |k, v| if not v.include?("´") a << "#{k}=´#{v}´" else diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/tree.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/tree.lib.rb --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/tree.lib.rb 2004-12-17 12:40:15.000000000 +0100 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/tree.lib.rb 2005-06-04 14:41:52.000000000 +0200 @@ -88,7 +88,7 @@ def inspect parent, children = @parent, @children - @parent, @children = parent.id, children.collect{|obj| obj.id} + @parent, @children = parent.object_id, children.collect{|obj| obj.object_id} res = " " * (level-1) + "#{self.class}(#{@subtype}) #{super}" @@ -96,6 +96,34 @@ res end + + def previous(klass=[], skip=[]) + klass = [klass].flatten + skip = [skip].flatten + + po = @parent + return nil if po.nil? + + ch = po.children + return nil if ch.nil? + + n = ch.index(self) + return nil if n.nil? + + res = nil + if klass.nil? + n -= 1 + res = ch[n] + else + begin + n -= 1 + res = ch[n] + end while (klass.empty? or klass.collect{|k| ch[n-1].kind_of?(k)}.sort.uniq == [true]) \ + and (skip.empty? or skip.collect{|k| ch[n-1].kind_of?(k)}.sort.uniq == [false]) + end + + res + end end class Tree @@ -138,7 +166,7 @@ end def self.location(url, form=Hash.new) - s = HTTPClient.get(url, form) + s = HTTPClient.get(url, {}, form) s = "" if s.nil? new(s) end @@ -155,7 +183,7 @@ tree = nil - Dir.mkdirrec(dir) + File.mkpath(dir) if File.file?(file) @@mutex.synchronize do @@ -227,7 +255,7 @@ end def markclosed - ([self].concat @objects).each do |obj| + ([self] + @objects).each do |obj| obj.children.each_index do |i| co1 = obj.children[i] co2 = obj.children[i+1] @@ -238,7 +266,7 @@ end def deletedummies - ([self].concat @objects).each do |obj| + ([self] + @objects).each do |obj| obj.children.delete_if do |obj2| obj2.upordown == Dummy end diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/xml.lib.rb rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/xml.lib.rb --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/lib/xml.lib.rb 2004-12-17 12:40:15.000000000 +0100 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/lib/xml.lib.rb 2005-06-04 14:41:52.000000000 +0200 @@ -1,4 +1,101 @@ require "ev/sgml" +class SGMLObject + def to_x(closetags=true) + res = "" + + parsetree("prechildren_to_x", "postchildren_to_x", res, closetags) + + res + end +end + +class Text < SGMLObject + def prechildren_to_x(res, closetags) + res << @text.strip unless @text.strip.empty? + end +end + +class Comment < SGMLObject + def prechildren_to_x(res, closetags) + res << "\n" if not previous([], [Text]).kind_of?(Comment) + lines = @text.gsub(/(<!--|-->)/, "").lf.split(/\n/) + if lines.length == 1 + res << " "*(@level-1) + "<!-- " + lines[0].strip + " -->" + "\n" + else + res << " "*(@level-1) + "<!--" + "\n" + res << lines.collect{|s| " "*(@level-1) + s.strip}.delete_if{|s| s.compress.empty?}.join("\n") + res << "\n" + res << " "*(@level-1) + "-->" + "\n" + res << "\n" + end + end +end + +class Special < SGMLObject + def prechildren_to_x(res, closetags) + res << " "*(@level-1) + @text.compress + "\n" + end +end + +class Instruction < SGMLObject + def prechildren_to_x(res, closetags) + res << " "*(@level-1) + @text.compress + "\n" + end +end + +class OpenTag < Tag + def prechildren_to_x(res, closetags) + a = [@subtype] + + args = @args.dup + args.delete("id") + args.delete("name") + args = args.sort + args.unshift(["id", @args["id"]]) if @args.include?("id") + args.unshift(["name", @args["name"]]) if @args.include?("name") + + args.each do |k, v| + if not v.include?("´") + a << "#{k}=´#{v}´" + else + if not v.include?(´"´) + a << "#{k}=\"#{v}\"" + else + a << "#{k}=´#{v.gsub(/\´/, ´"´)}´" + end + end + end + + if @children.length == 0 or (@children.length == 1 and @children[0].kind_of?(Text) and @children[0].text.compress.empty?) + res << " "*(@level-1) + "<#{a.join(" ")}/>" + "\n" + else + if @children.length == 1 and @children[0].kind_of?(Text) and @children[0].text.lf.split(/\n/).length == 1 + res << " "*(@level-1) + "<#{a.join(" ")}>" + else + res << " "*(@level-1) + "<#{a.join(" ")}>" + "\n" + end + end + end + + def postchildren_to_x(res, closetags) + if closetags + unless @children.length == 0 or (@children.length == 1 and @children[0].kind_of?(Text) and @children[0].text.compress.empty?) + res << "\n" if @children.length == 1 and @children[0].kind_of?(Text) and @children[0].text.lf.split(/\n/).length > 1 + res << " "*(@level-1) unless @children.length == 1 and @children[0].kind_of?(Text) and @children[0].text.lf.split(/\n/).length == 1 + res << "</#{@subtype}>" + res << "\n" + end + end + end +end + class XML < SGML + def to_x(closetags=true) + res = "" + + parsetree("prechildren_to_x", "postchildren_to_x", res, closetags) + + res + end end diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/SUMMARY rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/SUMMARY --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/SUMMARY 2005-06-04 14:42:02.187350552 +0200 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/SUMMARY 2005-06-04 14:41:52.000000000 +0200 @@ -0,0 +1 @@ +The Web Browser as a Graphical User Interface for Ruby Applications diff -ur rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/VERSION rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/VERSION --- rubywebdialogs-0.1.2.tar.gz/rubywebdialogs/VERSION 2005-06-04 14:42:02.186350704 +0200 +++ rubywebdialogs-0.2.0.tar.gz/rubywebdialogs/VERSION 2005-06-04 14:41:52.000000000 +0200 @@ -0,0 +1 @@ +0.2.0