From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- support/rfil/examples/rfont | 185 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100755 support/rfil/examples/rfont (limited to 'support/rfil/examples/rfont') diff --git a/support/rfil/examples/rfont b/support/rfil/examples/rfont new file mode 100755 index 0000000000..a49b667053 --- /dev/null +++ b/support/rfil/examples/rfont @@ -0,0 +1,185 @@ +#!/usr/bin/env ruby +#-- +# Last Change: Tue May 16 21:01:40 2006 +#++ +=begin rdoc += rfont -- An example font installer + +rfont uses the RFI Library for installing a family of fonts. + +== Command line parameters +Usage: rfont [options] vendor/fontname FILE1 FILE2 ... + -c, --copy-fonts Also copy the font outlines + -d, --directory DIR Set base directory to DIR + --dry-run dry run, don't create any files + -m, --list-plugin list available macro support methods + -p ENCFILE read/download ENCFILE for the PostScript encoding + -s, --style STYLE Style of the font, eg. sans, roman, typewriter + --tds Put files in a TDS compliant directory hierarchy + -t ENCFILE read ENCFILE for the encoding of the vf file + multiple encodings can be given (seperated by ',') + -T ENCFILE equivalent to -p ENCFILE -t ENCFILE + -u, --use-plugin PLUGIN use plugin files PLUGIN, multiple files seperated by ',' + -v, --no-vf Do not create virtual fonts for reencoding + --verbose Print more then needed on stdout + --help print this message and exit. + --version print version number and exit. + +== Example usage +This is the command line I used to install the Bitstream variant of the font 'Syntax' (from the Corel Draw CD) + + ./rfont bitstream/syntax ../corel/hum531*afm -t ec,ts1 -p 8r -d ~/rfitexmf/ -u latex -s sans --verbose --tds -c + +It works, but the .fd-file is not perfect yet. +--- +Author:: Patrick Gundlach +License:: Copyright (c) 2005 Patrick Gundlach. + Released under the terms of the GNU General Public License + +=end + +# :enddoc: + +require 'optparse' +require 'ostruct' +require 'fileutils' + +require 'rfil/fontcollection' + +include RFIL + +options=OpenStruct.new +optionswritevf=true +fc=RFI::FontCollection.new + +ret= ARGV.options { |opts| + opts.banner = "Usage: #{File.basename($0)} [options] vendor/fontname FILE1 FILE2 ..." + opts.on("-c", "--copy-fonts", "Also copy the font outlines") { + options.copyfonts=true + } + + opts.on("-d DIR", "--directory", "Set base directory to DIR") { |d| + fc.set_dirs(d) + } + opts.on("--dry-run", "dry run, don't create any files") { + fc.options[:dryrun]=true + options.dryrun=true + } + opts.on("-m", "--list-plugin", "list available plugins") { + puts "The following plugins are known:" + puts fc.plugins + exit 0; + } + opts.on("-p ENCFILE", String, + "read/download ENCFILE for the PostScript encoding") {|e| + fc.mapenc = e + } + opts.on("-s STYLE", "--style", String, "Style of the font, eg. sans, roman, typewriter") { |s| + fc.style=s.to_sym + } + opts.on("--tds", "Put files in a TDS compliant directory hierarchy") { + options.tds=true + } + opts.on("-t ENCFILE",Array, "read ENCFILE for the encoding of the vf file", + "multiple encodings can be given (seperated by ',')") {|e| + fc.texenc = e + } + opts.on("-T ENCFILE",String,"equivalent to -p ENCFILE -t ENCFILE") {|e| + fc.mapenc = e + fc.texenc = e + } + opts.on("-u PLUGIN","--use-plugin",Array, "use plugin PLUGIN, multiple files seperated by ','") { |m| + options.plugin=m + } + opts.on("-v", "--no-vf", "Do not create virtual fonts for reencoding") { + fc.write_vf=false + } + opts.on("--verbose","Print more then needed on stdout") { + options.verbose=true + fc.options[:verbose]=true + } + opts.on_tail("--help","print this message and exit.") { puts opts; exit 0 } + opts.on_tail("--version","print version number and exit.") { + puts "#{File.basename($0)}: Version 0.1" + exit 0 + } + opts.parse! +} +unless ret + puts "See --help for usage information" + exit(-1) +end + + +vendor_fontname=ARGV.shift + +if vendor_fontname + options.vendor,options.fontname=vendor_fontname.split('/') +end +if options.vendor==nil or options.fontname==nil + puts "You must name vendor and fontname this way: vendor/fontname" + puts "See --help for usage information" + exit(-1) +end + + + +fc.name=options.fontname +fc.vendor=options.vendor + +fc.set_dirs(:tds=>true) if options.tds + +fonts=[] +maplines="" + + +fontoutlinedir=File.dirname(ARGV[0]) + +ARGV.each { |fontname| + # puts "reading font #{File.basename(fontname)}" + f=RFI::Font.new(fc) + f.load_variant(fontname) + fonts.push f +} + +fc.fonts.each { |font| + puts "Processing font #{font.defaultfm.fontname}" + font.guess_weight_variant + font.apply_ligkern_instructions(RFI::STDLIGKERN) + font.write_files(:dryrun=>options.dryrun==true, + :verbose=>false, :mapfile=>false + ) + maplines << font.maplines.to_s +} + + +if options.copyfonts + fc.fonts.each { |font| + font.find_used_fonts.each {|varnumber| + fontmetric=font.variants[varnumber] + destdir=font.get_dir(fontmetric.outlinetype) + sourcefile=File.join(fontoutlinedir,fontmetric.fontfilename) + destfile=File.join(destdir,fontmetric.fontfilename) + puts "Copying #{sourcefile} to #{destfile}" if options.verbose + fc.ensure_dir(destdir) + unless options.dryrun + FileUtils.cp(sourcefile,destfile) + end + } + } +end + +mapdir=fc.get_dir(:map) +mapfile=File.join(mapdir,options.fontname) +puts "Writing mapfile #{mapfile}" if options.verbose +unless fc.options[:dryrun] + fc.ensure_dir(mapdir) + File.open(mapfile + ".map", "w") { |f| + f << maplines + } +end + +if options.plugin + options.plugin.each { |m| fc.run_plugin(m.to_sym) } +end + -- cgit v1.2.3