#!/usr/bin/env ruby # # This script implements the "ss" application. "ss" implements # a presentation slide-show based on HTML slides. # require 'tk' require 'tkextlib/tkHTML' root = TkRoot.new(:title=>'HTML File Viewer', :iconname=>'HV') fswin = nil html = nil html_fs = nil hotkey = {} file = ARGV[0] # These are images to use with the actual image specified in a # "" markup can't be found. # biggray = TkPhotoImage.new(:data=><<'EOD') R0lGODdhPAA+APAAALi4uAAAACwAAAAAPAA+AAACQISPqcvtD6OctNqLs968+w+G4kiW5omm 6sq27gvH8kzX9o3n+s73/g8MCofEovGITCqXzKbzCY1Kp9Sq9YrNFgsAO/// EOD smgray = TkPhotoImage.new(:data=><<'EOD') R0lGODdhOAAYAPAAALi4uAAAACwAAAAAOAAYAAACI4SPqcvtD6OctNqLs968+w+G4kiW5omm 6sq27gvH8kzX9m0VADv/ EOD # # A font chooser routine. # # html[:fontcommand] = pick_font pick_font = proc{|size, attrs| # puts "FontCmd: #{size} #{attrs}" [ ((attrs =~ /fixed/)? 'courier': 'charter'), (12 * (1.2**(size.to_f - 4.0))).to_i, ((attrs =~ /italic/)? 'italic': 'roman'), ((attrs =~ /bold/)? 'bold': 'normal') ].join(' ') } # This routine is called to pick fonts for the fullscreen view. # baseFontSize = 24 pick_font_fs = proc{|size, attrs| # puts "FontCmd: #{size} #{attrs}" [ ((attrs =~ /fixed/)? 'courier': 'charter'), (baseFontSize * (1.2**(size.to_f - 4.0))).to_i, ((attrs =~ /italic/)? 'italic': 'roman'), ((attrs =~ /bold/)? 'bold': 'normal') ].join(' ') } # # hyper_cmd = proc{|*args| puts "HyperlinkCommand: #{args.inspect}" } # This routine is called to run an applet # applet_arg = TkVarAccess.new_hash('AppletArg') run_applet = proc{|size, w, arglist| applet_arg.value = Hash[*simplelist(arglist)] return unless applet_arg.key?('src') src = html.remove(applet_arg['src']) applet_arg['window'] = w applet_arg['fontsize'] = size begin Tk.load_tclscript(src) rescue => e puts "Applet error: #{e.message}" end } # # form_cmd = proc{|n, cmd, *args| } # # images = {} old_imgs = {} big_imgs = {} # # move_big_image = proc{|b| return unless big_imgs.key?(b) b.copy(big_imgs[b]) big_imgs[b].delete big_imgs.delete(b) } image_cmd = proc{|hs, *args| fn = args[0] if old_imgs.key?(fn) return (images[fn] = old_imgs.delete(fn)) end begin img = TkPhotoImage.new(:file=>fn) rescue return ((hs)? smallgray: biggray) end if hs img2 = TkPhotoImage.new img2.copy(img, :subsample=>[2,2]) img.delete img = img2 end if img.width * img.height > 20000 b = TkPhotoImage.new(:width=>img.width, :height=>img.height) big_imgs[b] = img img = b Tk.after_idle(proc{ move_big_image.call(b) }) end images[fn] = img img } # # This routine is called for every