require 'base/kpsefast' case ENV['KPSEMETHOD'] when /soap/o then require 'base/kpse/soap' when /drb/o then require 'base/kpse/drb' else require 'base/kpse/drb' end class KpseRemote @@port = ENV['KPSEPORT'] || 7000 @@method = ENV['KPSEMETHOD'] || 'drb' def KpseRemote::available? @@method && @@port end def KpseRemote::start_server(port=nil) kpse = KpseServer.new(port || @@port) kpse.start end def KpseRemote::start_client(port=nil) # keeps object in server kpseclient = KpseClient.new(port || @@port) kpseclient.start kpse = kpseclient.object tree = kpse.choose(KpseUtil::identify, KpseUtil::environment) [kpse, tree] end def KpseRemote::fetch(port=nil) # no need for defining methods but slower, send whole object kpseclient = KpseClient.new(port || @@port) kpseclient.start kpseclient.object.fetch(KpseUtil::identify, KpseUtil::environment) rescue nil end def initialize(port=nil) if KpseRemote::available? then begin @kpse, @tree = KpseRemote::start_client(port) rescue @kpse, @tree = nil, nil end else @kpse, @tree = nil, nil end end def progname=(value) @kpse.set(@tree,'progname',value) end def format=(value) @kpse.set(@tree,'format',value) end def engine=(value) @kpse.set(@tree,'engine',value) end def progname @kpse.get(@tree,'progname') end def format @kpse.get(@tree,'format') end def engine @kpse.get(@tree,'engine') end def load @kpse.load(KpseUtil::identify, KpseUtil::environment) end def okay? @kpse && @tree end def set(key,value) @kpse.set(@tree,key,value) end def load_cnf @kpse.load_cnf(@tree) end def load_lsr @kpse.load_lsr(@tree) end def expand_variables @kpse.expand_variables(@tree) end def expand_braces(str) clean_name(@kpse.expand_braces(@tree,str)) end def expand_path(str) clean_name(@kpse.expand_path(@tree,str)) end def expand_var(str) clean_name(@kpse.expand_var(@tree,str)) end def show_path(str) clean_name(@kpse.show_path(@tree,str)) end def var_value(str) clean_name(@kpse.var_value(@tree,str)) end def find_file(filename) clean_name(@kpse.find_file(@tree,filename)) end def find_files(filename,first=false) # dodo: each filename @kpse.find_files(@tree,filename,first) end private def clean_name(str) str.gsub(/\\/,'/') end end