#-- # helper.rb Last Change: Fri Jul 1 14:29:09 2005 #++ # Helper module for Font and FontCollection. # Here we define methods that are used in Font and FontCollection. require 'fileutils' require 'rfil/tex/kpathsea' module RFIL # :nodoc: class RFI module Helper include TeX def set_encarray(enc,where) #:nodoc: if enc.instance_of?(ENC) where.push(enc) else enc.each { |e| if e.instance_of?(String) e = e.chomp(".enc") + ".enc" f=@kpse.open_file(e,"enc") where.push(ENC.new(f)) f.close elsif e.instance_of?(ENC) where.push(e) end } end end def set_mapenc(enc) # :nodoc: @mapenc=enc # nil/:none is perfectly valid return if enc==nil or enc==:none if enc.instance_of?(ENC) @mapenc = enc else enc.find { |e| if e.instance_of?(String) e = e.chomp(".enc") + ".enc" @kpse.open_file(e,"enc") { |f| @mapenc = ENC.new(f) } elsif e.instance_of?(ENC) @mapenc = e end } end end # call-seq: # set_dirs(string) # set_dirs(hash) # # Set the base dir of all font related files. Acts only as a storage # for the information. The automatic font installation method in # Font#write_files uses this information. When a _string_ is passed, # use this as the base dir for all files, when a hash is given, the # keys must be one of :afm, :tfm, # :vf,:map, :pfb, :tt, :tds. def set_dirs(arg) # tds needs testing! set vendor/fonname before/after set_dirs types=[:afm, :tfm, :vpl, :vf, :pl, :map, :type1,:truetype, :fd, :typescript] if arg.instance_of? String @basedir=arg types.each { |sym| @dirs[sym]=arg } elsif arg.instance_of? Hash if arg[:base] @basedir=arg[:base] end if arg[:tds]==true suffix = if @vendor and @name File.join(@vendor,@name) else "" end types.each { |t| subdir= case t when :afm File.join("fonts/afm",suffix) when :tfm File.join("fonts/tfm",suffix) when :vpl File.join("fonts/source/vpl",suffix) when :vf File.join("fonts/vf",suffix) when :pl File.join("fonts/source/pl",suffix) when :map "fonts/map/dvips" when :type1 File.join("fonts/type1",suffix) when :truetype File.join("fonts/truetype",suffix) when :fd File.join("tex/latex",suffix) when :typescript File.join("tex/context",suffix) else raise "unknown type" end @dirs[t] = File.join(@basedir,subdir) } else arg.each { |key,value| @dirs[key] = value } end end end def ensure_dir(dirname) # :nodoc: if File.exists?(dirname) if File.directory?(dirname) # nothing to do else # exists, but not dir raise "File exists, but is not a directory: #{dirname}" end else # file does not exist, we can create a directory (hopefully) puts "Creating directory hierarchy #{dirname}" if @options[:verbose] unless @options[:dryrun] FileUtils.mkdir_p(dirname) end end end #ensure_dir end # helper # options is a hash, but with lookup to a fontcollection class Options # :nodoc: def initialize(fontcollection) @fc=fontcollection @options={} end def [](idx) if @options[idx] return @options[idx] end if @fc @fc.options[idx] else nil end end def []=(idx,obj) @options[idx]=obj end end end # RFI end