#!/usr/bin/env ruby # program : tmftools # copyright : PRAGMA Advanced Document Engineering # version : 2005 # author : Hans Hagen # # project : ConTeXt # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # The script based alternative is not slower than the kpse one. # Loading is a bit faster when the log file is used. # todo: create database # tmftools [some of the kpsewhich switches] # tmftools --analyze # tmftools --analyze > kpsewhat.log # tmftools --analyze --strict > kpsewhat.log # tmftools --analyze --delete --force "texmf-local/fonts/.*/somename" # tmftools --serve # the real thing banner = ['TMFTools', 'version 1.1.0 (experimental, no help yet)', '2005/2006', 'PRAGMA ADE/POD'] $: << File.expand_path(File.dirname($0)) ; $: << File.join($:.last,'lib') ; $:.uniq! require 'base/switch' require 'base/logger' class Commands include CommandBase def init_kpse # require 'base/kpseremote' # if KpseRemote::available? then if ENV['KPSEMETHOD'] && ENV['KPSEPORT'] then require 'base/kpseremote' k = KpseRemote.new else k = nil end if k && k.okay? then k.progname = @commandline.option('progname') k.engine = @commandline.option('engine') k.format = @commandline.option('format') else require 'base/kpsefast' k = KpseFast.new k.rootpath = @commandline.option('rootpath') k.treepath = @commandline.option('treepath') k.progname = @commandline.option('progname') k.engine = @commandline.option('engine') k.format = @commandline.option('format') k.diskcache = @commandline.option('diskcache') k.renewcache = @commandline.option('renewcache') k.load_cnf k.expand_variables k.load_lsr end return k end def serve if ENV['KPSEMETHOD'] && ENV['KPSEPORT'] then require 'base/kpseremote' begin KpseRemote::start_server rescue end end end def reload begin init_kpse.load rescue end end def main if option = @commandline.option('expand-braces') and not option.empty? then puts init_kpse.expand_braces(option) elsif option = @commandline.option('expand-path') and not option.empty? then puts init_kpse.expand_path(option) elsif option = @commandline.option('expand-var') and not option.empty? then if option == '*' then init_kpse.list_expansions() else puts init_kpse.expand_var(option) end elsif option = @commandline.option('show-path') and not option.empty? then puts init_kpse.show_path(option) elsif option = @commandline.option('var-value') and not option.empty? then if option == '*' then init_kpse.list_variables() else puts init_kpse.expand_var(option) end elsif @commandline.arguments.size > 0 then kpse = init_kpse @commandline.arguments.each do |option| puts kpse.find_file(option) end else help end end def analyze pattern = @commandline.argument('first') strict = @commandline.option('strict') sort = @commandline.option('sort') delete = @commandline.option('delete') and @commandline.option('force') init_kpse.analyze_files(pattern, strict, sort, delete) end end logger = Logger.new(banner.shift) commandline = CommandLine.new # kpsewhich compatible options commandline.registervalue('expand-braces','') commandline.registervalue('expand-path','') commandline.registervalue('expand-var','') commandline.registervalue('show-path','') commandline.registervalue('var-value','') commandline.registervalue('engine','') commandline.registervalue('progname','') commandline.registervalue('format','') # additional goodies commandline.registervalue('rootpath','') commandline.registervalue('treepath','') commandline.registervalue('sort','') commandline.registerflag('diskcache') commandline.registerflag('renewcache') commandline.registerflag('strict') commandline.registerflag('delete') commandline.registerflag('force') commandline.registeraction('analyze', "[--strict --sort --rootpath --treepath]\n[--delete [--force]] [pattern]") # general purpose options commandline.registerflag('verbose') commandline.registeraction('help') commandline.registeraction('version') commandline.registeraction('reload', 'reload file database') commandline.registeraction('serve', 'act as kpse server') commandline.expand Commands.new(commandline,logger,banner).send(commandline.action || 'main')