From dfbbcbbdb6e3a3681b7c853ac5e213c1933b385c Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Mon, 20 Mar 2006 10:19:00 +0100 Subject: stable 2006.03.20 10:19 --- scripts/context/perl/texutil.pl | 28 +- scripts/context/ruby/base/kpse.rb | 9 +- scripts/context/ruby/base/kpsedirect.rb | 30 +++ scripts/context/ruby/base/kpsefast.rb | 436 ++++++++++++++++---------------- scripts/context/ruby/base/kpseremote.rb | 104 ++++++++ scripts/context/ruby/base/kpserunner.rb | 87 +++++++ scripts/context/ruby/base/switch.rb | 24 +- scripts/context/ruby/base/system.rb | 2 +- scripts/context/ruby/base/tex.rb | 117 +++++---- scripts/context/ruby/base/texutil.rb | 5 +- scripts/context/ruby/base/variables.rb | 87 +++++++ scripts/context/ruby/ctxtools.rb | 391 ++++++++++++++++++++++++++-- scripts/context/ruby/newtexexec.rb | 2 +- scripts/context/ruby/runtools.rb | 2 +- scripts/context/ruby/texmfstart.rb | 283 ++++++++++++++------- scripts/context/ruby/tmftools.rb | 61 ++++- tex/context/base/cont-log.tex | 2 +- tex/context/base/cont-new.tex | 9 +- tex/context/base/context.tex | 2 +- tex/context/base/core-fig.tex | 110 +++++--- tex/context/base/core-fld.tex | 34 ++- tex/context/base/core-mis.tex | 18 +- tex/context/base/core-nav.tex | 75 +++--- tex/context/base/core-sec.tex | 45 ++-- tex/context/base/core-spa.tex | 2 +- tex/context/base/core-sys.tex | 2 +- tex/context/base/core-ver.tex | 21 +- tex/context/base/enco-037.tex | 276 ++++++++++++++++++++ tex/context/base/m-cweb.tex | 4 +- tex/context/base/mult-con.tex | 4 + tex/context/base/page-bck.tex | 2 +- tex/context/base/page-flt.tex | 8 +- tex/context/base/page-lin.tex | 40 ++- tex/context/base/page-lyr.tex | 2 +- tex/context/base/page-mul.tex | 147 +++++++---- tex/context/base/page-set.tex | 3 + tex/context/base/page-sid.tex | 18 ++ tex/context/base/prop-lay.tex | 8 +- tex/context/base/regi-utf.tex | 12 + tex/context/base/spec-dpx.tex | 20 +- tex/context/base/spec-tpd.tex | 2 +- tex/context/base/supp-mis.tex | 4 +- tex/context/base/supp-mpe.tex | 3 +- tex/context/base/supp-vis.tex | 4 +- tex/context/base/unic-037.tex | 278 ++++++++++++++++++++ tex/context/base/verb-ini.tex | 36 ++- tex/context/interface/cont-cz.xml | 23 +- tex/context/interface/cont-de.xml | 23 +- tex/context/interface/cont-en.xml | 17 ++ tex/context/interface/cont-fr.xml | 23 +- tex/context/interface/cont-it.xml | 23 +- tex/context/interface/cont-nl.xml | 23 +- tex/context/interface/cont-ro.xml | 23 +- tex/context/interface/keys-cz.xml | 3 +- tex/context/interface/keys-de.xml | 3 +- tex/context/interface/keys-en.xml | 3 +- tex/context/interface/keys-fr.xml | 3 +- tex/context/interface/keys-it.xml | 3 +- tex/context/interface/keys-nl.xml | 3 +- tex/context/interface/keys-ro.xml | 3 +- 60 files changed, 2403 insertions(+), 632 deletions(-) create mode 100644 scripts/context/ruby/base/kpsedirect.rb create mode 100644 scripts/context/ruby/base/kpseremote.rb create mode 100644 scripts/context/ruby/base/kpserunner.rb create mode 100644 tex/context/base/enco-037.tex create mode 100644 tex/context/base/unic-037.tex diff --git a/scripts/context/perl/texutil.pl b/scripts/context/perl/texutil.pl index 0a0d29753..a20a7f6aa 100644 --- a/scripts/context/perl/texutil.pl +++ b/scripts/context/perl/texutil.pl @@ -44,7 +44,7 @@ eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $ #D binary version, like scanning illustrations other than \EPS. #D I would suggest to keep an eye on the version number: -$Program = "TeXUtil 9.0.0 - ConTeXt / PRAGMA ADE 1992-2004" ; +$Program = "TeXUtil 9.0.1 - ConTeXt / PRAGMA ADE 1992-2006" ; #D By the way, this is my first \PERL\ script, which means #D that it will be improved as soon as I find new and/or more @@ -54,6 +54,11 @@ $Program = "TeXUtil 9.0.0 - ConTeXt / PRAGMA ADE 1992-2004" ; #D users in english as well as some other languages. One can #D set his favourite language by saying something like: +#D This one has a real old date, 1992. This is because it is +#D a converted modula program that was used in the very early +#D days of our \TEX\ history (macros for proper inclusion of +#D graphics were among the first thatwe wrote). + #D \starttypen #D perl texutil.pl --int=de --fig *.eps *.tif *.pdf *.png *.jpg #D \stoptypen @@ -823,7 +828,7 @@ sub InitializeKeys { my $filename = $ARGV[0] ; return unless (open(TEX,"$filename.tex")) ; for ($i=0;$i<=255;$i++) - { @Filter[$i] = $i } + { $Filter[$i] = $i } if ($TcXPath eq '') { foreach (@paths) { my $p = checked_path($_) . 'kpsewhich' ; @@ -848,7 +853,7 @@ sub InitializeKeys { Report ("LoadedFilter", $Translation) ; while () { if (/^(\d+)\s*(\d+)/) - { @Filter[$2] = $1 } } + { $Filter[$2] = $1 } } close (ASC) } elsif ($TcXPath ne '') { Report ("WrongFilterPath", $TcXPath) } @@ -861,7 +866,7 @@ sub HandleKey { ++$SortN ; $RestOfLine =~ s/\{(.*)\}/$1/o ; my ($lan, $enc, $str, $chr, $map, $alf) = split(/\}\s*\{/, $RestOfLine) ; - if ($str =~ /^(\d+)/) { $str = ''.chr(@Filter[$1]) } + if ($str =~ /^(\d+)/) { $str = ''.chr($Filter[$1]) } $map = chr(ord($MAP[$i])+128) ; $STR[$SortN] = $str ; $CHR[$SortN] = $chr ; @@ -1279,8 +1284,8 @@ sub HandleRegister # the } { makes sure that local {} is ok # if ($Key eq "") { $Key = SanitizedString($Entry) } - if ($SortMethod ne '') - { $ProcessHigh = 0 } + # if ($SortMethod ne '') + # { $ProcessHigh = 0 } if ($ProcessHigh) { $Key = HighConverted($Key) } $KeyTag = substr $Key, 0, 1 ; @@ -2075,7 +2080,7 @@ sub SaveFigurePresets { $Figures[$NOfFigures] .= ",t=\{$FTit\}" } if ($FCre) { $Figures[$NOfFigures] .= ",c=\{$FCre\}" } - $Figures[$NOfFigures] .= ",s=$FSiz]\n" } } + $Figures[$NOfFigures] .= ",s=$FSiz]" } } #D The \EPS\ to \PDF\ conversion pipe to \GHOSTSCRIPT\ is #D inspired by a script posted by Sebastian Ratz at the @@ -2580,8 +2585,10 @@ sub FlushFigures open ( TUF, ">$OutputFile" ) ; print TUF "%\n" . "% $Program / Figures\n" . "%\n" ; print TUF "\\thisisfigureversion\{1996.06.01\}\n" . "%\n" ; + # a joins is nicer for ($n=1 ; $n<=$NOfFigures ; ++$n) - { print TUF $Figures[$n] } + { print TUF "$Figures[$n]%\n" } + print TUF "\\endinput"; close (TUF) ; if ($NOfFigures) { Report("OutputFile", $OutputFile ) } @@ -2772,7 +2779,9 @@ if ($PurgeAllFiles) { push @forsuresuffixes, @texnonesuffixes ; @texnonesuffixes = [] } sub PurgeFiles # no my in foreach - { my $pattern = $ARGV[0] ; my $strippedname, $basename ; + { my $pattern = $ARGV[0] ; + my $strippedname ; + my $basename ; my @files = () ; if ($pattern eq '') { $pattern = "*.*" ; @@ -2895,7 +2904,6 @@ elsif ($PurgeFiles ) { PurgeFiles } elsif ($PurgeAllFiles ) { PurgeFiles } elsif ($AnalyzeFile ) { AnalyzeFile } elsif ($FilterPages ) { FilterPages } -elsif ($SciteApi ) { GenerateSciteApi } elsif ($ProcessHelp ) { ShowHelpInfo } # redundant else { ShowHelpInfo } diff --git a/scripts/context/ruby/base/kpse.rb b/scripts/context/ruby/base/kpse.rb index adeaacbe1..d05600b8f 100644 --- a/scripts/context/ruby/base/kpse.rb +++ b/scripts/context/ruby/base/kpse.rb @@ -43,6 +43,7 @@ module Kpse else @@usekpserunner = true require 'base/kpsefast' + require 'base/kpserunner' end if @@crossover then @@ -120,12 +121,10 @@ module Kpse begin if @@problems then results = '' + elsif @@usekpserunner then + results = KpseRunner.kpsewhich(arguments).chomp else - if @@usekpserunner then - results = KpseRunner.kpsewhich(arguments).chomp - else - results = `kpsewhich #{arguments}`.chomp - end + results = `kpsewhich #{arguments}`.chomp end rescue puts "unable to run kpsewhich" if @@tracing diff --git a/scripts/context/ruby/base/kpsedirect.rb b/scripts/context/ruby/base/kpsedirect.rb new file mode 100644 index 000000000..d38e892b1 --- /dev/null +++ b/scripts/context/ruby/base/kpsedirect.rb @@ -0,0 +1,30 @@ +class KpseDirect + + attr_accessor :progname, :format, :engine + + def initialize + @progname = '' + @format = '' + @engine = '' + end + + def expand_path(str) + `kpsewhich -expand-path=#{str}`.chomp + end + + def expand_var(str) + `kpsewhich -expand-var=#{str}`.chomp + end + + def find_file(str) + `kpsewhich #{_progname_} #{_format_} #{str}`.chomp + end + + def _progname_ + if @progname.empty? then '' else "-progname=#{@progname}" end + end + def _format_ + if @format.empty? then '' else "-format=\"#{@format}\"" end + end + +end diff --git a/scripts/context/ruby/base/kpsefast.rb b/scripts/context/ruby/base/kpsefast.rb index 52ab28d0f..231c6221c 100644 --- a/scripts/context/ruby/base/kpsefast.rb +++ b/scripts/context/ruby/base/kpsefast.rb @@ -37,7 +37,49 @@ class File end -class KPSEFAST +module KpseUtil + + @@texmfcnf = 'texmf.cnf' + + def KpseUtil::identify + ownpath = File.expand_path($0) + if ownpath.gsub!(/texmf.*?$/o, '') then + ENV['SELFAUTOPARENT'] = ownpath + else + ENV['SELFAUTOPARENT'] = '.' + end + filenames = Array.new + if ENV['TEXMFCNF'] and not ENV['TEXMFCNF'].empty? then + ENV['TEXMFCNF'].split(File::PATH_SEPARATOR).each do |path| + filenames << File.join(path,@@texmfcnf) + end + elsif ENV['SELFAUTOPARENT'] == '.' then + filenames << File.join('.',@@texmfcnf) + else + ['texmf-local','texmf'].each do |tree| + filenames << File.join(ENV['SELFAUTOPARENT'],tree,'web2c',@@texmfcnf) + end + end + loop do + busy = false + filenames.collect! do |f| + f.gsub(/\$([a-zA-Z0-9\_\-]*)/o) do + busy = true + ENV[$1] || ("$#{$1}") + end + end + break unless busy + end + return filenames + end + + def KpseUtil::environment + Hash.new.merge(ENV) + end + +end + +class KpseFast # formats are an incredible inconsistent mess @@ -45,6 +87,8 @@ class KPSEFAST @@formats = Hash.new @@suffixmap = Hash.new + @@texmfcnf = 'texmf.cnf' + @@suffixes['gf'] = ['.gf'] # todo @@suffixes['pk'] = ['.pk'] # todo @@suffixes['tfm'] = ['.tfm'] @@ -121,7 +165,7 @@ class KPSEFAST @@formats['bst'] = '' @@formats['cnf'] = '' @@formats['ls-R'] = '' - @@formats['fmt'] = '' + @@formats['fmt'] = 'TEXFORMATS' @@formats['map'] = 'TEXFONTMAPS' @@formats['mem'] = 'MPMEMS' @@formats['mf'] = 'MFINPUTS' @@ -170,27 +214,41 @@ class KPSEFAST @@cacheversion = '1' def initialize - @rootpath = '' - @treepath = '' - @progname = 'kpsewhich' - @engine = 'pdfetex' - @variables = Hash.new - @expansions = Hash.new - @files = Hash.new - @found = Hash.new - @kpsevars = Hash.new - @lsrfiles = Array.new - @cnffiles = Array.new - @verbose = true - @remember = true - @scandisk = true - @diskcache = true - @renewcache = false - @isolate = false - - @diskcache = false - @cachepath = nil - @cachefile = 'tmftools.log' + @rootpath = '' + @treepath = '' + @progname = 'kpsewhich' + @engine = 'pdfetex' + @variables = Hash.new + @expansions = Hash.new + @files = Hash.new + @found = Hash.new + @kpsevars = Hash.new + @lsrfiles = Array.new + @cnffiles = Array.new + @verbose = true + @remember = true + @scandisk = true + @diskcache = true + @renewcache = false + @isolate = false + + @diskcache = false + @cachepath = nil + @cachefile = 'tmftools.log' + + @environment = ENV + end + + def set(key,value) + case key + when 'progname' then @progname = value + when 'engine' then @engine = value + when 'format' then @format = value + end + end + + def push_environment(env) + @environment = env end # {$SELFAUTOLOC,$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,}/web2c} @@ -201,36 +259,41 @@ class KPSEFAST # # since we live in scriptpath we need a slightly different method - def load_cnf - ownpath = File.expand_path($0) - if ownpath.gsub!(/texmf.*?$/o, '') then - ENV['SELFAUTOPARENT'] = ownpath - else - ENV['SELFAUTOPARENT'] = '.' - end - unless @treepath.empty? then + def load_cnf(filenames=nil) + unless filenames then + ownpath = File.expand_path($0) + if ownpath.gsub!(/texmf.*?$/o, '') then + @environment['SELFAUTOPARENT'] = ownpath + else + @environment['SELFAUTOPARENT'] = '.' + end + unless @treepath.empty? then + unless @rootpath.empty? then + @treepath = @treepath.split(',').collect do |p| File.join(@rootpath,p) end.join(',') + end + @environment['TEXMF'] = @treepath + @environment['TEXMFCNF'] = File.join(@treepath.split(',').first,'texmf/web2c') + end unless @rootpath.empty? then - @treepath = @treepath.split(',').collect do |p| File.join(@rootpath,p) end.join(',') + @environment['TEXMFCNF'] = File.join(@rootpath,'texmf/web2c') + @environment['SELFAUTOPARENT'] = @rootpath + @isolate = true end - ENV['TEXMF'] = @treepath - ENV['TEXMFCNF'] = File.join(@treepath.split(',').first,'texmf/web2c') - end - unless @rootpath.empty? then - ENV['TEXMFCNF'] = File.join(@rootpath,'texmf/web2c') - ENV['SELFAUTOPARENT'] = @rootpath - @isolate = true - end - filenames = Array.new - if ENV['TEXMFCNF'] and not ENV['TEXMFCNF'].empty? then - filenames << File.join(ENV['TEXMFCNF'],'texmf.cnf') - elsif ENV['SELFAUTOPARENT'] == '.' then - filenames << File.join('.','texmf.cnf') - else - ['texmf-local','texmf'].each do |tree| - filenames << File.join(ENV['SELFAUTOPARENT'],tree,'web2c','texmf.cnf') + filenames = Array.new + if @environment['TEXMFCNF'] and not @environment['TEXMFCNF'].empty? then + @environment['TEXMFCNF'].split(File::PATH_SEPARATOR).each do |path| + filenames << File.join(path,@@texmfcnf) + end + elsif @environment['SELFAUTOPARENT'] == '.' then + filenames << File.join('.',@@texmfcnf) + else + ['texmf-local','texmf'].each do |tree| + filenames << File.join(@environment['SELFAUTOPARENT'],tree,'web2c',@@texmfcnf) + end end end # /texmf/web2c/texmf.cnf + filenames = _expanded_path_(filenames) @rootpath = filenames.first 3.times do @rootpath = File.dirname(@rootpath) @@ -280,9 +343,9 @@ class KPSEFAST @files = Hash.new if @diskcache then ['HOME','TEMP','TMP','TMPDIR'].each do |key| - if ENV[key] then - if FileTest.directory?(ENV[key]) then - @cachepath = ENV[key] + if @environment[key] then + if FileTest.directory?(@environment[key]) then + @cachepath = @environment[key] @cachefile = [@rootpath.gsub(/[^A-Z0-9]/io, '-').gsub(/\-+/,'-'),File.basename(@cachefile)].join('-') break end @@ -342,14 +405,14 @@ class KPSEFAST def expand_variables @expansions = Hash.new if @isolate then - @variables['TEXMFCNF'] = ENV['TEXMFCNF'].dup - @variables['SELFAUTOPARENT'] = ENV['SELFAUTOPARENT'].dup + @variables['TEXMFCNF'] = @environment['TEXMFCNF'].dup + @variables['SELFAUTOPARENT'] = @environment['SELFAUTOPARENT'].dup else - ENV.keys.each do |e| + @environment.keys.each do |e| if e =~ /^([a-zA-Z]+)\_(.*)\s*$/o then - @expansions["#{$1}.#{$2}"] = ENV[e].dup + @expansions["#{$1}.#{$2}"] = (@environment[e] ||'').dup else - @expansions[e] = ENV[e].dup + @expansions[e] = (@environment[e] ||'').dup end end end @@ -465,7 +528,8 @@ class KPSEFAST end end pathlist = pathlist.uniq.collect do |path| - p = path.gsub(/^\/+/o) do '' end + p = path + # p.gsub(/^\/+/o) do '' end # p.gsub!(/(.)\/\/(.)/o) do "#{$1}/#{$2}" end # p.gsub!(/\/\/+$/o) do '//' end p.gsub!(/\/\/+/o) do '//' end @@ -485,8 +549,8 @@ class KPSEFAST end def var_of_format_or_suffix(str) - if @@formats.key?(@format) then - @@formats[@format] + if @@formats.key?(str) then + @@formats[str] elsif @@suffixmap.key?(File.extname(str)) then # extname includes . @@formats[@@suffixmap[File.extname(str)]] # extname includes . else @@ -496,7 +560,7 @@ class KPSEFAST end -class KPSEFAST +class KpseFast # test things @@ -543,7 +607,7 @@ class KPSEFAST end -class KPSEFAST +class KpseFast # kpse stuff @@ -560,7 +624,8 @@ class KPSEFAST end def show_path(str) # output search path for file type NAME - expanded_path(var_of_format(str)).join(File::PATH_SEPARATOR) + # expanded_path(var_of_format(str)).join(File::PATH_SEPARATOR) + expanded_path(str).join(File::PATH_SEPARATOR) end def var_value(str) # output the value of variable $STRING. @@ -569,97 +634,117 @@ class KPSEFAST end -class KPSEFAST +class KpseFast + + def _is_cnf_?(filename) + filename == File.basename((@cnffiles.first rescue @@texmfcnf)) + end def find_file(filename) - find_files(filename,true) + if _is_cnf_?(filename) then + @cnffiles.first rescue '' + else + [find_files(filename,true)].flatten.first || '' + end end def find_files(filename,first=false) - if @remember then - stamp = "#{filename}--#{@format}--#{@engine}--#{@progname}" - return @found[stamp] if @found.key?(stamp) - end - pathlist = expanded_path(filename) - result = [] - filelist = if @files.key?(filename) then @files[filename].uniq else nil end - done = false - pathlist.each do |path| - doscan = if path =~ /^\!\!/o then false else true end - recurse = if path =~ /\/\/$/o then true else false end - pathname = path.dup - pathname.gsub!(/^\!+/o, '') + if _is_cnf_?(filename) then + result = @cnffiles.dup + else + if @remember then + # stamp = "#{filename}--#{@format}--#{@engine}--#{@progname}" + stamp = "#{filename}--#{@engine}--#{@progname}" + return @found[stamp] if @found.key?(stamp) + end + pathlist = expanded_path(filename) + result = [] + filelist = if @files.key?(filename) then @files[filename].uniq else nil end done = false - if not done and filelist then - # checking for exact match - if filelist.include?(pathname) then - result << pathname + if pathlist.size == 0 then + if FileTest.file?(filename) then done = true + result << '.' end - if not done and recurse then - # checking for fuzzy // - pathname.gsub!(/\/+$/o, '/.*') - # pathname.gsub!(/\/\//o,'/[\/]*/') - pathname.gsub!(/\/\//o,'/.*?/') - re = /^#{pathname}/ - filelist.each do |f| - if re =~ f then - result << f # duplicates will be filtered later + else + pathlist.each do |path| + doscan = if path =~ /^\!\!/o then false else true end + recurse = if path =~ /\/\/$/o then true else false end + pathname = path.dup + pathname.gsub!(/^\!+/o, '') + done = false + if not done and filelist then + # checking for exact match + if filelist.include?(pathname) then + result << pathname + done = true + end + if not done and recurse then + # checking for fuzzy // + pathname.gsub!(/\/+$/o, '/.*') + # pathname.gsub!(/\/\//o,'/[\/]*/') + pathname.gsub!(/\/\//o,'/.*?/') + re = /^#{pathname}/ + filelist.each do |f| + if re =~ f then + result << f # duplicates will be filtered later + done = true + end + break if done + end + end + end + if not done and doscan then + # checking for path itself + pname = pathname.sub(/\.\*$/,'') + if not pname =~ /\*/o and FileTest.file?(File.join(pname,filename)) then + result << pname done = true end - break if done end + break if done and first end end - if not done and doscan then - # checking for path itself - pname = pathname.sub(/\.\*$/,'') - if not pname =~ /\*/o and FileTest.file?(File.join(pname,filename)) then - result << pname - done = true - end - end - break if done and first - end - if not done and @scandisk then - pathlist.each do |path| - pathname = path.dup - unless pathname.gsub!(/^\!+/o, '') then # !! prevents scan - recurse = pathname.gsub!(/\/+$/o, '') - complex = pathname.gsub!(/\/\//o,'/*/') - if recurse then - if complex then - if ok = File.glob_file("#{pathname}/**/#{filename}") then + if not done and @scandisk then + pathlist.each do |path| + pathname = path.dup + unless pathname.gsub!(/^\!+/o, '') then # !! prevents scan + recurse = pathname.gsub!(/\/+$/o, '') + complex = pathname.gsub!(/\/\//o,'/*/') + if recurse then + if complex then + if ok = File.glob_file("#{pathname}/**/#{filename}") then + result << File.dirname(ok) + done = true + end + elsif ok = File.locate_file(pathname,filename) then result << File.dirname(ok) done = true end - elsif ok = File.locate_file(pathname,filename) then - result << File.dirname(ok) - done = true - end - elsif complex then - if ok = File.glob_file("#{pathname}/#{filename}") then - result << File.dirname(ok) + elsif complex then + if ok = File.glob_file("#{pathname}/#{filename}") then + result << File.dirname(ok) + done = true + end + elsif FileTest.file?(File.join(pathname,filename)) then + result << pathname done = true end - elsif FileTest.file?(File.join(pathname,filename)) then - result << pathname - done = true + break if done and first end - break if done and first end end + result = result.uniq.collect do |pathname| + File.join(pathname,filename) + end + @found[stamp] = result if @remember end - result = result.uniq.collect do |pathname| - File.join(pathname,filename) - end - @found[stamp] = result if @remember return result # redundant end end -class KPSEFAST +class KpseFast class FileData attr_accessor :tag, :name, :size, :date @@ -673,12 +758,9 @@ class KPSEFAST end def report case @tag - when 1 - "deleted | #{@size.to_s.rjust(8)} | #{@date.strftime('%m/%d/%Y %I:%M')} | #{@name}" - when 2 - "present | #{@size.to_s.rjust(8)} | #{@date.strftime('%m/%d/%Y %I:%M')} | #{@name}" - when 3 - "obsolete | #{' '*8} | #{' '*16} | #{@name}" + when 1 then "deleted | #{@size.to_s.rjust(8)} | #{@date.strftime('%m/%d/%Y %I:%M')} | #{@name}" + when 2 then "present | #{@size.to_s.rjust(8)} | #{@date.strftime('%m/%d/%Y %I:%M')} | #{@name}" + when 3 then "obsolete | #{' '*8} | #{' '*16} | #{@name}" end end end @@ -769,88 +851,16 @@ class KPSEFAST end -module KpseRunner - - @@kpse = nil - - def KpseRunner.kpsewhich(arg='') - options, arguments = split_args(arg) - unless @@kpse then - @@kpse = KPSEFAST.new - @@kpse.load_cnf - @@kpse.progname = options['progname'] || '' - @@kpse.engine = options['engine'] || '' - @@kpse.format = options['format'] || '' - @@kpse.expand_variables - @@kpse.load_lsr - else - @@kpse.progname = options['progname'] || '' - @@kpse.engine = options['engine'] || '' - @@kpse.format = options['format'] || '' - @@kpse.expand_variables - end - if option = options['expand-braces'] and not option.empty? then - @@kpse.expand_braces(option) - elsif option = options['expand-path'] and not option.empty? then - @@kpse.expand_path(option) - elsif option = options['expand-var'] and not option.empty? then - @@kpse.expand_var(option) - elsif option = options['show-path'] and not option.empty? then - @@kpse.show_path(option) - elsif option = options['var-value'] and not option.empty? then - @@kpse.expand_var(option) - elsif arguments.size > 0 then - files = Array.new - arguments.each do |option| - if file = @@kpse.find_file(option) and not file.empty? then - files << file - end - end - files.join("\n") - else - '' - end - end - - def KpseRunner.kpsereset - @@kpse = nil - end - - private - - def KpseRunner.split_args(arg) - vars, args = Hash.new, Array.new - arg.gsub!(/([\"\'])(.*?)\1/o) do - $2.gsub(' ','') - end - arg = arg.split(/\s+/o) - arg.collect! do |a| - a.gsub('',' ') - end - arg.each do |a| - if a =~ /^(.*?)\=(.*?)$/o then - k, v = $1, $2 - vars[k.sub(/^\-+/,'')] = v - else - args << a - end - end - # puts vars.inspect - # puts args.inspect - return vars, args - end - -end +# if false then -if false then + # k = KpseFast.new # (root) + # k.set_test_patterns + # k.load_cnf + # k.expand_variables + # k.load_lsr - k = KPSEFAST.new # (root) - k.set_test_patterns - k.load_cnf - k.expand_variables - k.load_lsr + # k.show_test_patterns - k.show_test_patterns # puts k.list_variables # puts k.list_expansions # k.list_lsr @@ -876,6 +886,6 @@ if false then # puts "expand value $TEXINPUTS.context" # puts k.var_value("$TEXINPUTS.context") - exit + # exit -end +# end diff --git a/scripts/context/ruby/base/kpseremote.rb b/scripts/context/ruby/base/kpseremote.rb new file mode 100644 index 000000000..f5a72b712 --- /dev/null +++ b/scripts/context/ruby/base/kpseremote.rb @@ -0,0 +1,104 @@ +require 'base/kpsefast' + +class KpseRemote + + 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 + + @@port = ENV['KPSEPORT'] || 7000 + + def KpseRemote::available? + ENV['KPSEMETHOD'] && ENV['KPSEPORT'] + 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) + begin + @kpse, @tree = KpseRemote::start_client(port) + rescue + @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) + @kpse.expand_braces(@tree,str) + end + def expand_path(str) + @kpse.expand_path(@tree,str) + end + def expand_var(str) + @kpse.expand_var(@tree,str) + end + def show_path(str) + @kpse.show_path(@tree,str) + end + def var_value(str) + @kpse.var_value(@tree,str) + end + def find_file(filename) + @kpse.find_file(@tree,filename) + end + def find_files(filename,first=false) + @kpse.find_files(@tree,filename,first) + end + +end diff --git a/scripts/context/ruby/base/kpserunner.rb b/scripts/context/ruby/base/kpserunner.rb new file mode 100644 index 000000000..cfc2ad4fb --- /dev/null +++ b/scripts/context/ruby/base/kpserunner.rb @@ -0,0 +1,87 @@ +require 'base/kpsefast' + +module KpseRunner + + @@kpse = nil + + def KpseRunner.kpsewhich(arg='') + options, arguments = split_args(arg) + unless @@kpse then + if ENV['KPSEMETHOD'] && ENV['KPSEPORT'] then + require 'base/kpseremote' + @@kpse = KpseRemote.new + else + @@kpse = nil + end + if @@kpse && @@kpse.okay? then + @@kpse.progname = options['progname'] || '' + @@kpse.engine = options['engine'] || '' + @@kpse.format = options['format'] || '' + else + require 'base/kpsefast' + @@kpse = KpseFast.new + @@kpse.load_cnf + @@kpse.progname = options['progname'] || '' + @@kpse.engine = options['engine'] || '' + @@kpse.format = options['format'] || '' + @@kpse.expand_variables + @@kpse.load_lsr + end + else + @@kpse.progname = options['progname'] || '' + @@kpse.engine = options['engine'] || '' + @@kpse.format = options['format'] || '' + @@kpse.expand_variables + end + if option = options['expand-braces'] and not option.empty? then + @@kpse.expand_braces(option) + elsif option = options['expand-path'] and not option.empty? then + @@kpse.expand_path(option) + elsif option = options['expand-var'] and not option.empty? then + @@kpse.expand_var(option) + elsif option = options['show-path'] and not option.empty? then + @@kpse.show_path(option) + elsif option = options['var-value'] and not option.empty? then + @@kpse.expand_var(option) + elsif arguments.size > 0 then + files = Array.new + arguments.each do |option| + if file = @@kpse.find_file(option) and not file.empty? then + files << file + end + end + files.join("\n") + else + '' + end + end + + def KpseRunner.kpsereset + @@kpse = nil + end + + private + + def KpseRunner.split_args(arg) + vars, args = Hash.new, Array.new + arg.gsub!(/([\"\'])(.*?)\1/o) do + $2.gsub(' ','') + end + arg = arg.split(/\s+/o) + arg.collect! do |a| + a.gsub('',' ') + end + arg.each do |a| + if a =~ /^(.*?)\=(.*?)$/o then + k, v = $1, $2 + vars[k.sub(/^\-+/,'')] = v + else + args << a + end + end + # puts vars.inspect + # puts args.inspect + return vars, args + end + +end diff --git a/scripts/context/ruby/base/switch.rb b/scripts/context/ruby/base/switch.rb index 64d518bd4..160b50aba 100644 --- a/scripts/context/ruby/base/switch.rb +++ b/scripts/context/ruby/base/switch.rb @@ -493,15 +493,21 @@ class CommandLine unless foundkey then @registered.each do |option, shortcut, kind| n = 0 - if option =~ /^#{key}/i then - case n - when 0 - foundkey, foundkind = option, kind - n = 1 - when 1 - # ambiguous matches, like --fix => --fixme --fixyou - foundkey, foundkind = nil, nil - break + begin + re = /^#{key}/i + rescue + key = key.inspect.sub(/^\"(.*)\"$/) do $1 end + re = /^#{key}/i + ensure + if option =~ re then + case n + when 0 + foundkey, foundkind, n = option, kind, 1 + when 1 + # ambiguous matches, like --fix => --fixme --fixyou + foundkey, foundkind = nil, nil + break + end end end end diff --git a/scripts/context/ruby/base/system.rb b/scripts/context/ruby/base/system.rb index ed8c2756e..50173a72d 100644 --- a/scripts/context/ruby/base/system.rb +++ b/scripts/context/ruby/base/system.rb @@ -74,7 +74,7 @@ module System end program = program + ' ' + arguments if ! arguments.empty? program.gsub!(/\s+/io, ' ') - program.gsub!(/(\.\/)+/io, '') + #program.gsub!(/(\/\.\/)+/io, '/') program.gsub!(/\\/io, '/') return program end diff --git a/scripts/context/ruby/base/tex.rb b/scripts/context/ruby/base/tex.rb index 481d0eb12..1aee93fb1 100644 --- a/scripts/context/ruby/base/tex.rb +++ b/scripts/context/ruby/base/tex.rb @@ -129,7 +129,7 @@ class TEX 'forcetexutil', 'texutil', 'globalfile', 'autopath', 'purge', 'purgeall', 'keep', 'autopdf', 'xpdf', 'simplerun', 'verbose', - 'nooptionfile' + 'nooptionfile', 'nobackend' ] @@stringvars = [ 'modefile', 'result', 'suffix', 'response', 'path', @@ -223,6 +223,7 @@ class TEX if ! name || name.empty? then name = [booleanvars,stringvars,standardvars,knownvars] end + str = '' # allocate [name].flatten.each do |n| if str = getvariable(n) then unless (str.class == String) && str.empty? then @@ -855,7 +856,7 @@ class TEX end end - def makeoptionfile(rawname, jobname, jobsuffix, finalrun, fastdisabled, kindofrun) + def makeoptionfile(rawname, jobname, jobsuffix, finalrun, fastdisabled, kindofrun, currentrun=1) begin # jobsuffix = orisuffix if topname = File.suffixed(rawname,'top') and opt = File.open(topname,'w') then @@ -863,7 +864,7 @@ class TEX # local handies opt << "\% #{topname}\n" opt << "\\unprotect\n" - opt << "\\setupsystem[\\c!n=#{kindofrun}]\n" + opt << "\\setupsystem[\\c!n=#{kindofrun},\\c!m=#{currentrun}]\n" opt << "\\def\\MPOSTformatswitch\{#{prognameflag('metafun')} #{formatflag('mpost')}=\}\n" if getvariable('batchmode') then opt << "\\batchmode\n" @@ -973,7 +974,7 @@ class TEX else pagelist = Array.new str.split(/\,/).each do |page| - pagerange = page.split(/(\:|\.\.)/o ) + pagerange = page.split(/\D+/o) if pagerange.size > 1 then pagerange.first.to_i.upto(pagerange.last.to_i) do |p| pagelist << p.to_s @@ -1050,12 +1051,13 @@ class TEX end end - def runmp(filename) + def runmp(filename,mpx=false) mpsengine = validmpsengine(getvariable('mpsengine')) mpsformat = validmpsformat(getarrayvariable('mpsformats').first) progname = validprogname(getvariable('progname')) if mpsengine && mpsformat && progname then command = [quoted(mpsengine),prognameflag(progname),formatflag(mpsengine,mpsformat),runoptions(mpsengine),filename,mpsprocextras(mpsformat)].join(' ') + ENV["MPXCOMMAND"] = "0" unless mpx report(command) if getvariable('verbose') system(command) else @@ -1150,30 +1152,32 @@ class TEX end def runbackend(rawname) - case validbackend(getvariable('backend')) - when 'dvipdfmx' then - fixbackendvars('dvipdfm') - system("dvipdfmx -d 4 #{File.unsuffixed(rawname)}") - when 'xetex' then - fixbackendvars('xetex') - system("xdv2pdf #{File.suffixed(rawname,'xdv')}") - when 'dvips' then - fixbackendvars('dvips') - mapfiles = '' - begin - if tuifile = File.suffixed(rawname,'tui') and FileTest.file?(tuifile) then - IO.read(tuifile).scan(/^c \\usedmapfile\{.\}\{(.*?)\}\s*$/o) do - mapfiles += "-u +#{$1} " ; + unless getvariable('nobackend') then + case validbackend(getvariable('backend')) + when 'dvipdfmx' then + fixbackendvars('dvipdfm') + system("dvipdfmx -d 4 #{File.unsuffixed(rawname)}") + when 'xetex' then + fixbackendvars('xetex') + system("xdv2pdf #{File.suffixed(rawname,'xdv')}") + when 'dvips' then + fixbackendvars('dvips') + mapfiles = '' + begin + if tuifile = File.suffixed(rawname,'tui') and FileTest.file?(tuifile) then + IO.read(tuifile).scan(/^c \\usedmapfile\{.\}\{(.*?)\}\s*$/o) do + mapfiles += "-u +#{$1} " ; + end end + rescue + mapfiles = '' end - rescue - mapfiles = '' - end - system("dvips #{mapfiles} #{File.unsuffixed(rawname)}") - when 'pdftex' then - # no need for postprocessing - else - report("no postprocessing needed") + system("dvips #{mapfiles} #{File.unsuffixed(rawname)}") + when 'pdftex' then + # no need for postprocessing + else + report("no postprocessing needed") + end end end @@ -1287,7 +1291,7 @@ class TEX when 'context' then if getvariable('simplerun') || runonce then - makeoptionfile(rawname,jobname,orisuffix,true,true,3) unless getvariable('nooptionfile') + makeoptionfile(rawname,jobname,orisuffix,true,true,3,1) unless getvariable('nooptionfile') ok = runtex(rawname) if ok then ok = runtexutil(rawname) if getvariable('texutil') || getvariable('forcetexutil') @@ -1314,10 +1318,14 @@ class TEX while ! stoprunning && (texruns < nofruns) && ok do texruns += 1 report("TeX run #{texruns}") - if texruns == 1 then - makeoptionfile(rawname,jobname,orisuffix,false,false,1) unless getvariable('nooptionfile') - else - makeoptionfile(rawname,jobname,orisuffix,false,false,2) unless getvariable('nooptionfile') + unless getvariable('nooptionfile') then + if texruns == nofruns then + makeoptionfile(rawname,jobname,orisuffix,false,false,4,texruns) # last + elsif texruns == 1 then + makeoptionfile(rawname,jobname,orisuffix,false,false,1,texruns) # first + else + makeoptionfile(rawname,jobname,orisuffix,false,false,2,texruns) # unknown + end end ok = runtex(File.suffixed(rawname,jobsuffix)) if ok && (nofruns > 1) then @@ -1332,7 +1340,7 @@ class TEX end ok = runtexutil(rawname) if (nofruns == 1) && getvariable('texutil') if ok && finalrun && (nofruns > 1) then - makeoptionfile(rawname,jobname,orisuffix,true,finalrun,4) unless getvariable('nooptionfile') + makeoptionfile(rawname,jobname,orisuffix,true,finalrun,4,texruns) unless getvariable('nooptionfile') report("final TeX run #{texruns}") ok = runtex(File.suffixed(rawname,jobsuffix)) end @@ -1394,7 +1402,7 @@ class TEX if mpdata = File.silentread(mpfile) then mpdata.gsub!(/^\#.*\n/o,'') File.silentrename(mpfile,mpcopy) - texfound = mergebe || mpdata =~ /btex .*? etex/o + texfound = mergebe || mpdata =~ /btex .*? etex/mo if mp = openedfile(mpfile) then mpdata.gsub!(/(btex.*?)\;(.*?etex)/o) do "#{$1}@@@#{$2}" end # mpdata.gsub!(/(\".*?)\;(.*?\")/o) do "#{$1}@@@#{$2}" end @@ -1408,14 +1416,16 @@ class TEX mpdata.gsub!(/beginfig\s*\((\d+)\)\s*\;(.*?)endfig\s*\;/o) do n, str = $1, $2 if str =~ /(.*?)(verbatimtex.*?etex)\s*\;(.*)/o then - "beginfig(#{n})\;\n$1$2\;\n#{mpbetex(n)}\n$3\;endfig\;\n" + "beginfig(#{n})\;\n#{$1}#{$2}\;\n#{mpbetex(n)}\n#{$3}\;endfig\;\n" else "beginfig(#{n})\;\n#{mpbetex(n)}\n#{str}\;endfig\;\n" end end end + mpdata.gsub!(/\n+/mo, "\n") + mpdata.gsub!(/^\s*\;\s*\n/o, "") unless mpdata =~ /beginfig\s*\(\s*0\s*\)/o then - mp << mpbetex[0] if mpbetex.key?(0) + mp << mpbetex['0'] if mpbetex.key?('0') end mp << mpdata # ?? mp << "\n" @@ -1443,7 +1453,7 @@ class TEX end f.close end - File.silentrename(mpfile,mpfile+'.keep') + File.silentrename(mpfile, mpfile+'.keep') File.silentrename(mpcopy, mpfile) end end @@ -1456,13 +1466,26 @@ class TEX mptex = File.suffixed(mpname,'temp','tex') mpdvi = File.suffixed(mpname,'temp','dvi') mplog = File.suffixed(mpname,'temp','log') - mpmpx = File.suffixed(mpname,'temp','mpx') + mpmpx = File.suffixed(mpname,'mpx') ok = system("mpto #{mpname} > #{mptex}") if ok && File.appended(mptex, "\\end\n") then - if context then - ok = RunConTeXtFile(mptex) + if localjob = TEX.new(@logger) then + localjob.setvariable('files',mptex) + localjob.setvariable('backend','dvips') + localjob.setvariable('engine',getvariable('engine')) unless getvariable('engine').empty? + localjob.setvariable('once',true) + localjob.setvariable('nobackend',true) + if context then + localjob.setvariable('texformats',[getvariable('interface')]) unless getvariable('interface').empty? + elsif getvariable('interface').empty? then + localjob.setvariable('texformats',['plain']) + else + localjob.setvariable('texformats',[getvariable('interface')]) + end + localjob.processtex + ok = true # todo else - ok = RunSomeTeXFile(mptex) + ok = false end ok = ok && FileTest.file?(mpdvi) && system("dvitomp #{mpdvi} #{mpmpx}") [mptex,mpdvi,mplog].each do |mpfil| @@ -1508,18 +1531,22 @@ class TEX if File.atleast?(mpname,10) && (mp = File.silentopen(mpname)) then labels = Hash.new while str = mp.gets do - t = if str =~ /%\s*setup\s*:\s*(.*)/o then $1 else '' end - if str =~ /%\s*figure\s*(\d+)\s*:\s*(.*)/o then + t = if str =~ /^%\s*setup\s*:\s*(.*)$/o then $1 else '' end + if str =~ /^%\s*figure\s*(\d+)\s*:\s*(.*)$/o then labels[$1] = labels[$1] || '' unless t.empty? then labels[$1] += "#{t}\n" t = '' end - labels[$1] += "$2\n" + labels[$1] += "#{$2}\n" end end mp.close - return labels if labels.size>0 + if labels.size>0 then + return labels + else + return nil + end end return nil end diff --git a/scripts/context/ruby/base/texutil.rb b/scripts/context/ruby/base/texutil.rb index 2c57702de..12337c643 100644 --- a/scripts/context/ruby/base/texutil.rb +++ b/scripts/context/ruby/base/texutil.rb @@ -823,8 +823,9 @@ class TeXUtil def loaded(filename) begin - report("parsing file #{filename}") - if f = open(File.suffixed(filename,'tui')) then + tuifile = File.suffixed(filename,'tui') + report("parsing file #{tuifile}") + if f = open(tuifile) then f.each do |line| case line.chomp when /^f (.*)$/o then @plugins.reader('MyFiles', $1.splitdata) diff --git a/scripts/context/ruby/base/variables.rb b/scripts/context/ruby/base/variables.rb index 5cbc5ba53..403b57716 100644 --- a/scripts/context/ruby/base/variables.rb +++ b/scripts/context/ruby/base/variables.rb @@ -12,6 +12,89 @@ require 'base/tool' +class Hash + + def nothing?(id) + ! self[id] || self[id].empty? + end + + def subset(pattern) + h = Hash.new + p = pattern.gsub(/([\.\:\-])/) do "\\#{$1}" end + r = /^#{p}/ + self.keys.each do |k| + h[k] = self[k].dup if k =~ r + end + return h + end + +end + +class ExtendedHash < Hash + + @@re_var_a = /\%(.*?)\%/ + @@re_var_b = /\$\((.*?)\)/ + + def set(key,value='',resolve=true) + if value then + self[key] = if resolve then resolved(value.to_s) else value.to_s end + else + self[key] = '' + end + end + + def replace(key,value='') + self[key] = value if self?(key) + end + + def get(key,default='') + if self.key?(key) then self[key] else default end + end + + def true?(key) + self[key] =~ /^(yes|on|true|enable|enabled|y|start)$/io rescue false + end + + def resolved(str) + begin + str.to_s.gsub(@@re_var_a) do + self[$1] || '' + end.gsub(@@re_var_b) do + self[$1] || '' + end + rescue + str.to_s rescue '' + end + end + + def check(key,default='') + if self.key?(key) then + if self[key].empty? then self[key] = (default || '') end + else + self[key] = (default || '') + end + end + + def checked(key,default='') + if self.key?(key) then + if self[key].empty? then default else self[key] end + else + default + end + end + + def empty?(key) + self[key].empty? + end + + # def downcase(key) + # self[key].downcase! + # end + +end + +# the next one is obsolete so we need to replace things + module Variables def setvariable(key,value='') @@ -26,6 +109,10 @@ module Variables if @variables.key?(key) then @variables[key] else default end end + def truevariable(key) + @variables[key] =~ /^(yes|on|true)$/io rescue false + end + def checkedvariable(str,default='') if @variables.key?(key) then if @variables[key].empty? then default else @variables[key] end diff --git a/scripts/context/ruby/ctxtools.rb b/scripts/context/ruby/ctxtools.rb index 4c47d643e..a768264d9 100644 --- a/scripts/context/ruby/ctxtools.rb +++ b/scripts/context/ruby/ctxtools.rb @@ -15,7 +15,7 @@ # todo: move scite here # -# todo: move kpse call to kpse class/module +# todo: move kpse call to kpse class/module, faster and better banner = ['CtxTools', 'version 1.3.1', '2004/2006', 'PRAGMA ADE/POD'] @@ -1528,33 +1528,386 @@ class Commands end -logger = Logger.new(banner.shift) -commandline = CommandLine.new +class TexDeps + + @@cs_tex = %q/ + above abovedisplayshortskip abovedisplayskip + abovewithdelims accent adjdemerits advance afterassignment + aftergroup atop atopwithdelims + badness baselineskip batchmode begingroup + belowdisplayshortskip belowdisplayskip binoppenalty botmark + box boxmaxdepth brokenpenalty + catcode char chardef cleaders closein closeout clubpenalty + copy count countdef cr crcr csname + day deadcycles def defaulthyphenchar defaultskewchar + delcode delimiter delimiterfactor delimeters + delimitershortfall delimeters dimen dimendef discretionary + displayindent displaylimits displaystyle + displaywidowpenalty displaywidth divide + doublehyphendemerits dp dump + edef else emergencystretch end endcsname endgroup endinput + endlinechar eqno errhelp errmessage errorcontextlines + errorstopmode escapechar everycr everydisplay everyhbox + everyjob everymath everypar everyvbox exhyphenpenalty + expandafter + fam fi finalhyphendemerits firstmark floatingpenalty font + fontdimen fontname futurelet + gdef global group globaldefs + halign hangafter hangindent hbadness hbox hfil horizontal + hfill horizontal hfilneg hfuzz hoffset holdinginserts hrule + hsize hskip hss horizontal ht hyphenation hyphenchar + hyphenpenalty hyphen + if ifcase ifcat ifdim ifeof iffalse ifhbox ifhmode ifinner + ifmmode ifnum ifodd iftrue ifvbox ifvmode ifvoid ifx + ignorespaces immediate indent input inputlineno input + insert insertpenalties interlinepenalty + jobname + kern + language lastbox lastkern lastpenalty lastskip lccode + leaders left lefthyphenmin leftskip leqno let limits + linepenalty line lineskip lineskiplimit long looseness + lower lowercase + mag mark mathaccent mathbin mathchar mathchardef mathchoice + mathclose mathcode mathinner mathop mathopen mathord + mathpunct mathrel mathsurround maxdeadcycles maxdepth + meaning medmuskip message mkern month moveleft moveright + mskip multiply muskip muskipdef + newlinechar noalign noboundary noexpand noindent nolimits + nonscript scriptscript nonstopmode nulldelimiterspace + nullfont number + omit openin openout or outer output outputpenalty over + overfullrule overline overwithdelims + pagedepth pagefilllstretch pagefillstretch pagefilstretch + pagegoal pageshrink pagestretch pagetotal par parfillskip + parindent parshape parskip patterns pausing penalty + postdisplaypenalty predisplaypenalty predisplaysize + pretolerance prevdepth prevgraf + radical raise read relax relpenalty right righthyphenmin + rightskip romannumeral + scriptfont scriptscriptfont scriptscriptstyle scriptspace + scriptstyle scrollmode setbox setlanguage sfcode shipout + show showbox showboxbreadth showboxdepth showlists showthe + skewchar skip skipdef spacefactor spaceskip span special + splitbotmark splitfirstmark splitmaxdepth splittopskip + string + tabskip textfont textstyle the thickmuskip thinmuskip time + toks toksdef tolerance topmark topskip tracingcommands + tracinglostchars tracingmacros tracingonline tracingoutput + tracingpages tracingparagraphs tracingrestores tracingstats + uccode uchyph underline unhbox unhcopy unkern unpenalty + unskip unvbox unvcopy uppercase + vadjust valign vbadness vbox vcenter vfil vfill vfilneg + vfuzz voffset vrule vsize vskip vsplit vss vtop + wd widowpenalty write + xdef xleaders xspaceskip + year + /.split + + @@cs_etex = %q/ + beginL beginR botmarks + clubpenalties currentgrouplevel currentgrouptype + currentifbranch currentiflevel currentiftype + detokenize dimexpr displaywidowpenalties + endL endR eTeXrevision eTeXversion everyeof + firstmarks fontchardp fontcharht fontcharic fontcharwd + glueexpr glueshrink glueshrinkorder gluestretch + gluestretchorder gluetomu + ifcsname ifdefined iffontchar interactionmode + interactionmode interlinepenalties + lastlinefit lastnodetype + marks topmarks middle muexpr mutoglue + numexpr + pagediscards parshapedimen parshapeindent parshapelength + predisplaydirection + savinghyphcodes savingvdiscards scantokens showgroups + showifs showtokens splitdiscards splitfirstmarks + TeXXeTstate tracingassigns tracinggroups tracingifs + tracingnesting tracingscantokens + unexpanded unless + widowpenalties + /.split + + @@cs_pdftex = %q/ + pdfadjustspacing pdfannot pdfavoidoverfull + pdfcatalog pdfcompresslevel + pdfdecimaldigits pdfdest pdfdestmargin + pdfendlink pdfendthread + pdffontattr pdffontexpand pdffontname pdffontobjnum pdffontsize + pdfhorigin + pdfimageresolution pdfincludechars pdfinfo + pdflastannot pdflastdemerits pdflastobj + pdflastvbreakpenalty pdflastxform pdflastximage + pdflastximagepages pdflastxpos pdflastypos + pdflinesnapx pdflinesnapy pdflinkmargin pdfliteral + pdfmapfile pdfmaxpenalty pdfminpenalty pdfmovechars + pdfnames + pdfobj pdfoptionpdfminorversion pdfoutline pdfoutput + pdfpageattr pdfpageheight pdfpageresources pdfpagesattr + pdfpagewidth pdfpkresolution pdfprotrudechars + pdfrefobj pdfrefxform pdfrefximage + pdfsavepos pdfsnaprefpoint pdfsnapx pdfsnapy pdfstartlink + pdfstartthread + pdftexrevision pdftexversion pdfthread pdfthreadmargin + pdfuniqueresname + pdfvorigin + pdfxform pdfximage + /.split + + @@cs_omega = %q/ + odelimiter omathaccent omathchar oradical omathchardef omathcode odelcode + leftghost rightghost + charwd charht chardp charit + localleftbox localrightbox + localinterlinepenalty localbrokenpenalty + pagedir bodydir pardir textdir mathdir + boxdir nextfakemath + pagewidth pageheight pagerightoffset pagebottomoffset + nullocp nullocplist ocp externalocp ocplist pushocplist popocplist clearocplists ocptracelevel + addbeforeocplist addafterocplist removebeforeocplist removeafterocplist + OmegaVersion + InputTranslation OutputTranslation DefaultInputTranslation DefaultOutputTranslation + noInputTranslation noOutputTranslation + InputMode OutputMode DefaultInputMode DefaultOutputMode + noInputMode noOutputMode noDefaultInputMode noDefaultOutputMode + /.split + + @@cs_plain = %q/ + TeX + bgroup egroup endgraf space empty null + newcount newdimen newskip newmuskip newbox newtoks newhelp newread newwrite newfam newlanguage newinsert newif + maxdimen magstephalf magstep + frenchspacing nonfrenchspacing normalbaselines obeylines obeyspaces raggedright ttraggedright + thinspace negthinspace enspace enskip quad qquad + smallskip medskip bigskip removelastskip topglue vglue hglue + break nobreak allowbreak filbreak goodbreak smallbreak medbreak bigbreak + line leftline rightline centerline rlap llap underbar strutbox strut + cases matrix pmatrix bordermatrix eqalign displaylines eqalignno leqalignno + pageno folio tracingall showhyphens fmtname fmtversion + hphantom vphantom phantom smash + /.split + + @@cs_eplain = %q/ + eTeX + newmarks grouptype interactionmode nodetype iftype + tracingall loggingall tracingnone + /.split + + # let's ignore \dimendef etc + + @@primitives_def = "def|edef|xdef|gdef|let|newcount|newdimen|newskip|newbox|newtoks|newmarks|chardef|mathchardef|newconditional" + + @@cs_global = [@@cs_tex,@@cs_etex,@@cs_pdftex,@@cs_omega].sort.flatten + @@types = [['invalid','*'],['okay','='],['forward','>'],['backward','<'],['unknown','?']] + + def initialize(logger=nil) + @cs_local = Hash.new + @cs_new = Hash.new + @cs_defd = Hash.new + @cs_used = Hash.new + @filename = 'context.tex' + @files = Array.new # keep load order ! + @compact = false + @logger = logger + end -commandline.registeraction('touchcontextfile', 'update context version') -commandline.registeraction('contextversion', 'report context version') + def load(filename='context.tex',omitlist=['mult-com.tex']) + begin + @filename = filename + File.open(filename) do |f| + f.each do |line| + if line =~ /^\\input\s+(\S+)\s*/o then + @files.push($1) unless omitlist.include?(File.basename($1)) + end + end + end + rescue + @files = Array.new + end + end -commandline.registeraction('jeditinterface', 'generate jedit syntax files [--pipe]') -commandline.registeraction('bbeditinterface', 'generate bbedit syntax files [--pipe]') -commandline.registeraction('sciteinterface', 'generate scite syntax files [--pipe]') -commandline.registeraction('rawinterface', 'generate raw syntax files [--pipe]') + def analyze + @files.each do |filename| + if f = File.open(filename) then + @logger.report("loading #{filename}") if @logger + defs, uses, n = 0, 0, 0 + f.each do |line| + n += 1 + case line + when /^%/ + # skip + when /\\newif\s*\\if([a-zA-Z@\?\!]+)/ then + pushdef(filename,n,"if:#{$1}") + when /\\([a-zA-Z@\?\!]+)(true|false)/ then + pushuse(filename,n,"if:#{$1}") + when /^\s*\\(#{@primitives_def})\\([a-zA-Z@\?\!]{3,})/o + pushdef(filename,n,$2) + when /\\([a-zA-Z@\?\!]{3,})/o + pushuse(filename,n,$1) + end + end + f.close + end + end + end -commandline.registeraction('translateinterface', 'generate interface files (xml) [nl de ..]') -commandline.registeraction('purgefiles', 'remove temporary files [--all --recurse] [basename]') + def feedback(compact=false) + begin + outputfile = File.basename(@filename).sub(/\.tex$/,'')+'.dep' + File.open(outputfile,'w') do |f| + @compact = compact + @logger.report("saving analysis in #{outputfile}") if @logger + list, len = @cs_local.keys.sort, 0 + if @compact then + list.each do |cs| + if cs.length > len then len = cs.length end + end + len += 1 + else + f.puts "\n" + f.puts "\n" + end + list.each do |cs| + if @cs_new.key?(cs) then + if @cs_new[cs] == @cs_local[cs] then + f.puts some_struc(cs,len,1,some_str(@cs_new,@cs_defd,cs)) + elsif @cs_new[cs].first == @cs_local[cs].first then + f.puts some_struc(cs,len,2,some_str(@cs_new,@cs_defd,cs),some_str(@cs_local,@cs_used,cs)) + else + f.puts some_struc(cs,len,3,some_str(@cs_new,@cs_defd,cs),some_str(@cs_local,@cs_used,cs)) + end + else + f.puts some_struc(cs,len,4,some_str(@cs_local,@cs_used,cs)) + end + end + if @compact then + # nothing + else + "\n" unless @compact + end + end + rescue + end + end -commandline.registeraction('documentation', 'generate documentation [--type=] [filename]') + private -commandline.registeraction('filterpages') # no help, hidden temporary feature -commandline.registeraction('purgeallfiles') # no help, compatibility feature + def some_struc(cs,len,type=1,defstr='',usestr='') + if @compact then + "#{cs.ljust(len)} #{@@types[type][1]} #{defstr} #{usestr}" + else + "\n" + + if defstr.empty? then " \n" else " \n#{defstr} <\defined>\n" end + + if usestr.empty? then " \n" else " #{usestr}\n <\used>\n" end + + "\n" + end + end -commandline.registeraction('patternfiles', 'generate pattern files [--all --xml --utf8] [languagecode]') + def some_str(files, lines, cs) + return '' unless files[cs] + if @compact then + str = '[ ' + files[cs].each do |c| + str += c + str += " (#{lines[cs][c].join(' ')}) " if lines[cs][c] + str += ' ' + end + str += ']' + str.gsub(/ +/, ' ') + else + str = '' + files[cs].each do |c| + if lines[cs][c] then + str += " \n" + str += " " + lines[cs][c].each do |l| + # str += " \n" + str += "" + end + str += "\n" + str += " \n" + else + str += " \n" + end + end + str + end + end + + def pushdef(filename,n,cs) + unless @cs_new.key?(cs) then + @cs_new[cs] = Array.new + @cs_defd[cs] = Hash.new unless @cs_defd.key?(cs) + end + @cs_defd[cs][filename] = Array.new unless @cs_defd[cs][filename] + @cs_new[cs].push(filename) unless @cs_new[cs].include?(filename) + @cs_defd[cs][filename] << n + end + + def pushuse(filename,n,cs) + unless @@cs_global.include?(cs.to_s) then + unless @cs_local[cs] then + @cs_local[cs] = Array.new + @cs_used[cs] = Hash.new unless @cs_used.key?(cs) + end + @cs_used[cs][filename] = Array.new unless @cs_used[cs][filename] + @cs_local[cs].push(filename) unless @cs_local[cs].include?(filename) + @cs_used[cs][filename] << n + end + end + +end + +class Commands + + include CommandBase + + def dependencies + + filename = if @commandline.arguments.empty? then 'context.tex' else @commandline.arguments.first end + compact = @commandline.option('compact') + + ['progname=context',''].each do |progname| + unless FileTest.file?(filename) then + name = `kpsewhich #{progname} #{filename}`.chomp + if FileTest.file?(name) then + filename = name + break + end + end + end -commandline.registeraction('dpxmapfiles', 'convert pdftex mapfiles to dvipdfmx [--force] [texmfroot]') -commandline.registeraction('listentities', 'create doctype entity definition from enco-uc.tex') + if FileTest.file?(filename) && deps = TexDeps.new(logger) then + deps.load + deps.analyze + deps.feedback(compact) + else + report("unknown file #{filename}") + end -commandline.registeraction('brandfiles', 'add context copyright notice [--force]') + end + +end -commandline.registeraction('platformize', 'replace line-endings [--recurse --force] [pattern]') +logger = Logger.new(banner.shift) +commandline = CommandLine.new + +commandline.registeraction('touchcontextfile' , 'update context version') +commandline.registeraction('contextversion' , 'report context version') +commandline.registeraction('jeditinterface' , 'generate jedit syntax files [--pipe]') +commandline.registeraction('bbeditinterface' , 'generate bbedit syntax files [--pipe]') +commandline.registeraction('sciteinterface' , 'generate scite syntax files [--pipe]') +commandline.registeraction('rawinterface' , 'generate raw syntax files [--pipe]') +commandline.registeraction('translateinterface', 'generate interface files (xml) [nl de ..]') +commandline.registeraction('purgefiles' , 'remove temporary files [--all --recurse] [basename]') +commandline.registeraction('documentation' , 'generate documentation [--type=] [filename]') +commandline.registeraction('filterpages' ) # no help, hidden temporary feature +commandline.registeraction('purgeallfiles' ) # no help, compatibility feature +commandline.registeraction('patternfiles' , 'generate pattern files [--all --xml --utf8] [languagecode]') +commandline.registeraction('dpxmapfiles' , 'convert pdftex mapfiles to dvipdfmx [--force] [texmfroot]') +commandline.registeraction('listentities' , 'create doctype entity definition from enco-uc.tex') +commandline.registeraction('brandfiles' , 'add context copyright notice [--force]') +commandline.registeraction('platformize' , 'replace line-endings [--recurse --force] [pattern]') +commandline.registeraction('dependencies' , 'analyze depedencies witin context [--compact] [rootfile]') commandline.registervalue('type','') diff --git a/scripts/context/ruby/newtexexec.rb b/scripts/context/ruby/newtexexec.rb index 86780e742..564205d2e 100644 --- a/scripts/context/ruby/newtexexec.rb +++ b/scripts/context/ruby/newtexexec.rb @@ -1,4 +1,4 @@ -banner = ['TeXExec', 'version 6.1.1', '1997-2006', 'PRAGMA ADE/POD'] +banner = ['TeXExec', 'version 6.1.2', '1997-2006', 'PRAGMA ADE/POD'] unless defined? ownpath ownpath = $0.sub(/[\\\/][a-z0-9\-]*?\.rb/i,'') diff --git a/scripts/context/ruby/runtools.rb b/scripts/context/ruby/runtools.rb index f554057f6..9f6fd3328 100644 --- a/scripts/context/ruby/runtools.rb +++ b/scripts/context/ruby/runtools.rb @@ -456,7 +456,7 @@ class Job end end else - error("no setup file '#{setuptex}'") + warning("no setup file '#{setuptex}', tree not initialized") # no error end rescue warning("error in setup: #{$!}") diff --git a/scripts/context/ruby/texmfstart.rb b/scripts/context/ruby/texmfstart.rb index 8c22d7d4a..dfc9b1a26 100644 --- a/scripts/context/ruby/texmfstart.rb +++ b/scripts/context/ruby/texmfstart.rb @@ -2,7 +2,7 @@ # program : texmfstart # copyright : PRAGMA Advanced Document Engineering -# version : 1.8.3 - 2003/2006 +# version : 1.8.5 - 2003/2006 # author : Hans Hagen # # project : ConTeXt / eXaMpLe @@ -32,11 +32,16 @@ $ownpath = File.expand_path(File.dirname($0)) unless defined? $ownpath +$: << $ownpath + require "rbconfig" +require 'base/kpseremote' +require 'base/kpsedirect' + $mswindows = Config::CONFIG['host_os'] =~ /mswin/ $separator = File::PATH_SEPARATOR -$version = "1.8.3" +$version = "1.8.5" if $mswindows then require "win32ole" @@ -80,6 +85,9 @@ $predefined['mpstools'] = 'mpstools.rb' $predefined['exatools'] = 'exatools.rb' $predefined['xmltools'] = 'xmltools.rb' +$predefined['newpstopdf'] = 'newpstopdf.rb' +$predefined['newtexexec'] = 'newtexexec.rb' + $makelist = [ # context 'texexec', @@ -132,6 +140,25 @@ end $applications['htm'] = $applications['html'] $applications['eps'] = $applications['ps'] +$kpse = nil + +def check_kpse + if $kpse then + # already done + elsif KpseRemote::available? then + $kpse = KpseRemote.new + if $kpse.okay? then + puts("using remote kpse") if $verbose + else + $kpse = KpseDirect.new + puts("forcing direct kpse") if $verbose + end + else + $kpse = KpseDirect.new + puts("using direct kpse") if $verbose + end +end + if $mswindows then GetShortPathName = Win32API.new('kernel32', 'GetShortPathName', ['P','P','N'], 'N') @@ -274,9 +301,11 @@ def expanded(arg) # no "other text files", too restricted end . gsub(/(kpse|loc|file|path)\:([a-zA-Z\-\_\.0-9]+)/o) do # was: \S method, original, resolved = $1, $2, '' if $program && ! $program.empty? then - pstrings = ["-progname=#{$program}"] + # pstrings = ["-progname=#{$program}"] +pstrings = [$program] else - pstrings = ['','progname=context'] + # pstrings = ['','-progname=context'] +pstrings = ['','context'] end # auto suffix with texinputs as fall back if ENV["_CTX_K_V_#{original}_"] then @@ -284,22 +313,31 @@ def expanded(arg) # no "other text files", too restricted report("environment provides #{original} as #{resolved}") unless $report resolved else + check_kpse pstrings.each do |pstr| if resolved.empty? then - command = "kpsewhich #{pstr} #{original}" - report("running #{command}") + # command = "kpsewhich #{pstr} #{original}" + # report("running #{command}") + report("locating '#{original}' in program space '#{pstr}'") begin - resolved = `#{command}`.chomp + # resolved = `#{command}`.chomp + $kpse.progname = pstr + $kpse.format = '' + resolved = $kpse.find_file(original) rescue resolved = '' end end # elsewhere in the tree if resolved.empty? then - command = "kpsewhich #{pstr} -format=\"other text files\" #{original}" - report("running #{command}") + # command = "kpsewhich #{pstr} -format=\"other text files\" #{original}" + # report("running #{command}") + report("locating '#{original}' in program space '#{pstr}' using format 'other text files'") begin - resolved = `#{command}`.chomp + # resolved = `#{command}`.chomp + $kpse.progname = pstr + $kpse.format = 'other text files' + resolved = $kpse.find_file(original) rescue resolved = '' end @@ -403,7 +441,7 @@ def usage print("switches : --verbose --report --browser --direct --execute --locate --iftouched\n") print(" --program --file --page --arguments --batch --edit --report --clear\n") print(" --make --lmake --wmake --path --stubpath --indirect --before --after\n") - print(" --tree --autotree --showenv\n") + print(" --tree --autotree --environment --showenv\n") print("\n") print("example : texmfstart pstopdf.rb cow.eps\n") print(" texmfstart --locate examplex.rb\n") @@ -416,10 +454,11 @@ def usage print(" texmfstart bin:xsltproc env:somepreset path:somefile.xsl somefile.xml\n") print(" texmfstart --iftouched=normal,lowres downsample.rb normal lowres\n") print(" texmfstart texmfstart bin:scite kpse:texmf.cnf\n") - print(" texmfstart texmfstart --exec bin:scite *.tex\n") - print(" texmfstart texmfstart --edit texmf.cnf\n") - print(" texmfstart texmfstart --stubpath=/usr/local/bin --make texexec\n") - print(" texmfstart texmfstart --stubpath=auto --make all\n") + print(" texmfstart --exec bin:scite *.tex\n") + print(" texmfstart --edit texmf.cnf\n") + print(" texmfstart --stubpath=/usr/local/bin --make texexec\n") + print(" texmfstart --stubpath=auto --make all\n") + print(" texmfstart --serve\n") end # somehow registration does not work out (at least not under windows) @@ -491,13 +530,16 @@ def find(filename,program) end # now we consult environment settings fullname = nil + check_kpse + $kpse.progname = program suffixlist.each do |suffix| begin break unless $suffixinputs[suffix] environment = ENV[$suffixinputs[suffix]] || ENV[$suffixinputs[suffix]+".#{$program}"] if ! environment || environment.empty? then begin - environment = `kpsewhich -expand-path=\$#{$suffixinputs[suffix]}`.chomp + # environment = `kpsewhich -expand-path=\$#{$suffixinputs[suffix]}`.chomp + environment = $kpse.expand_path("\$#{$suffixinputs[suffix]}") rescue environment = nil else @@ -536,7 +578,9 @@ def find(filename,program) if suffix =~ /(#{$scriptlist})/ then begin report("using 'kpsewhich' to locate '#{filename}' in suffix space '#{suffix}' (1)") - fullname = `kpsewhich -progname=#{program} -format=texmfscripts #{filename}.#{suffix}`.chomp + # fullname = `kpsewhich -progname=#{program} -format=texmfscripts #{filename}.#{suffix}`.chomp + $kpse.format = 'texmfscripts' + fullname = $kpse.find_file("#{filename}.#{suffix}") rescue report("kpsewhich cannot locate '#{filename}' in suffix space '#{suffix}' (1)") fullname = nil @@ -547,7 +591,9 @@ def find(filename,program) # old TDS location: .../texmf/context/... begin report("using 'kpsewhich' to locate '#{filename}' in suffix space '#{suffix}' (2)") - fullname = `kpsewhich -progname=#{program} -format="other text files" #{filename}.#{suffix}`.chomp + # fullname = `kpsewhich -progname=#{program} -format="other text files" #{filename}.#{suffix}`.chomp + $kpse.format = 'other text files' + fullname = $kpse.find_file("#{filename}.#{suffix}") rescue report("kpsewhich cannot locate '#{filename}' in suffix space '#{suffix}' (2)") fullname = nil @@ -572,7 +618,8 @@ def find(filename,program) if (suffixlist.length == 1) && (suffixlist.first =~ /(#{$documentlist})/) then report("aggressively locating '#{filename}' in document trees") begin - texroot = `kpsewhich -expand-var=$SELFAUTOPARENT`.chomp + # texroot = `kpsewhich -expand-var=$SELFAUTOPARENT`.chomp + texroot = $kpse.expand_var("$SELFAUTOPARENT") rescue texroot = '' else @@ -593,7 +640,8 @@ def find(filename,program) end report("aggressively locating '#{filename}' in tex trees") begin - textrees = `kpsewhich -expand-var=$TEXMF`.chomp + # textrees = `kpsewhich -expand-var=$TEXMF`.chomp + textrees = $kpse.expand_var("$TEXMF") rescue textrees = '' end @@ -719,7 +767,6 @@ def make(filename,windows=false,linux=false) end def process(&block) - if $iftouched then files = $directives['iftouched'].split(',') oldname, newname = files[0], files[1] @@ -735,57 +782,74 @@ def process(&block) else yield end +end +def checkenvironment(tree) + report('') + ENV['TMP'] = ENV['TMP'] || ENV['TEMP'] || ENV['TMPDIR'] || ENV['HOME'] + case RUBY_PLATFORM + when /(mswin|bccwin|mingw|cygwin)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-mswin' + when /(linux)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-linux' + when /(darwin|rhapsody|nextstep)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-macosx' + # when /(netbsd|unix)/i then # todo + else # todo + end + ENV['TEXOS'] = "#{ENV['TEXOS'].sub(/^[\\\/]*/, '').sub(/[\\\/]*$/, '')}" + ENV['TEXPATH'] = tree.sub(/\/+$/,'') # + '/' + ENV['TEXMFOS'] = "#{ENV['TEXPATH']}/#{ENV['TEXOS']}" + report('') + report("preset : TEXPATH => #{ENV['TEXPATH']}") + report("preset : TEXOS => #{ENV['TEXOS']}") + report("preset : TEXMFOS => #{ENV['TEXMFOS']}") + report("preset : TMP => #{ENV['TMP']}") + report('') +end + +def loadfile(filename) + begin + IO.readlines(filename).each do |line| + case line.chomp + when /^[\#\%]/ then + # comment + when /^(.*?)\s*(\>|\=|\<)\s*(.*)\s*$/ then + # = assign | > prepend | < append + key, how, value = $1, $2, $3 + begin + # $SAFE = 0 + value.gsub!(/\%(.*?)\%/) do + ENV[$1] || '' + end + # value.gsub!(/\;/,$separator) if key =~ /PATH/i then + case how + when '=', '<<' then ENV[key] = value + when '?', '??' then ENV[key] = ENV[key] || value + when '<', '+=' then ENV[key] = (ENV[key] || '') + $separator + value + when '>', '=+' then ENV[key] = value + $separator + (ENV[key] ||'') + end + rescue + report("user set failed : #{key} (#{$!})") + else + report("user set : #{key} => #{ENV[key]}") + end + end + end + rescue + report("error in reading file '#{filename}'") + end end -def checktree(tree) +def loadtree(tree) begin unless tree.empty? then - setuptex = File.join(tree,'setuptex.tmf') + if File.directory?(tree) then + setuptex = File.join(tree,'setuptex.tmf') + else + setuptex = tree.dup + end if FileTest.file?(setuptex) then - report('') - report("tex tree : #{setuptex}") - ENV['TEXPATH'] = tree.sub(/\/+$/,'') # + '/' - ENV['TMP'] = ENV['TMP'] || ENV['TEMP'] || ENV['TMPDIR'] || ENV['HOME'] - case RUBY_PLATFORM - when /(mswin|bccwin|mingw|cygwin)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-mswin' - when /(linux)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-linux' - when /(darwin|rhapsody|nextstep)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-macosx' - # when /(netbsd|unix)/i then # todo - else # todo - end - ENV['TEXMFOS'] = "#{ENV['TEXPATH']}/#{ENV['TEXOS']}" - report('') - report("preset : TEXPATH => #{ENV['TEXPATH']}") - report("preset : TEXOS => #{ENV['TEXOS']}") - report("preset : TEXMFOS => #{ENV['TEXMFOS']}") - report("preset : TMP => #{ENV['TMP']}") - report('') - IO.readlines(File.join(tree,'setuptex.tmf')).each do |line| - case line.chomp - when /^[\#\%]/ then - # comment - when /^(.*?)\s*(\>|\=|\<)\s*(.*)\s*$/ then - # = assign | > prepend | < append - key, how, value = $1, $2, $3 - begin - # $SAFE = 0 - value.gsub!(/\%(.*?)\%/) do - ENV[$1] || '' - end - # value.gsub!(/\;/,$separator) if key =~ /PATH/i then - case how - when '=' then ENV[key] = value - when '<' then ENV[key] = (ENV[key] ||'') + $separator + value - when '>' then ENV[key] = value + $separator + (ENV[key] ||'') - end - rescue - report("user set failed : #{key} (#{$!})") - else - report("user set : #{key} => #{ENV[key]}") - end - end - end + report("tex tree definition: #{setuptex}") + checkenvironment(File.dirname(setuptex)) + loadfile(setuptex) else report("no setup file '#{setuptex}'") end @@ -795,6 +859,22 @@ def checktree(tree) end end +def loadenvironment(environment) + begin + unless environment.empty? then + filename = if $path.empty? then environment else File.expand_path(File.join($path,environment)) end + if FileTest.file?(filename) then + report("environment : #{environment}") + loadfile(filename) + else + report("no environment file '#{environment}'") + end + end + rescue + report("problem while loading '#{environment}'") + end +end + def show_environment if $showenv then keys = ENV.keys.sort @@ -816,43 +896,46 @@ def execute(arguments) $directives = hashed(arguments) - $help = $directives['help'] || false - $batch = $directives['batch'] || false - $filename = $directives['file'] || '' - $program = $directives['program'] || 'context' - $direct = $directives['direct'] || false - $edit = $directives['edit'] || false - $page = $directives['page'] || 0 - $browser = $directives['browser'] || false - $report = $directives['report'] || false - $verbose = $directives['verbose'] || false - $arguments = $directives['arguments'] || '' - $execute = $directives['execute'] || $directives['exec'] || false - $locate = $directives['locate'] || false + $help = $directives['help'] || false + $batch = $directives['batch'] || false + $filename = $directives['file'] || '' + $program = $directives['program'] || 'context' + $direct = $directives['direct'] || false + $edit = $directives['edit'] || false + $page = $directives['page'] || 0 + $browser = $directives['browser'] || false + $report = $directives['report'] || false + $verbose = $directives['verbose'] || false + $arguments = $directives['arguments'] || '' + $execute = $directives['execute'] || $directives['exec'] || false + $locate = $directives['locate'] || false $autotree = if $directives['autotree'] then (ENV['TEXMFSTART_TREE'] || ENV['TEXMFSTARTTREE'] || '') else '' end - $path = $directives['path'] || '' - $tree = $directives['tree'] || $autotree || '' + $path = $directives['path'] || '' + $tree = $directives['tree'] || $autotree || '' + $environment = $directives['environment'] || '' - $make = $directives['make'] || false - $unix = $directives['unix'] || false - $windows = $directives['windows'] || false - $stubpath = $directives['stubpath'] || '' - $indirect = $directives['indirect'] || false + $make = $directives['make'] || false + $unix = $directives['unix'] || false + $windows = $directives['windows'] || false + $stubpath = $directives['stubpath'] || '' + $indirect = $directives['indirect'] || false - $before = $directives['before'] || '' - $after = $directives['after'] || '' + $before = $directives['before'] || '' + $after = $directives['after'] || '' - $iftouched = $directives['iftouched'] || false + $iftouched = $directives['iftouched'] || false - $openoffice = $directives['oo'] || false + $openoffice = $directives['oo'] || false $crossover = false if $directives['clear'] - $showenv = $directives['showenv'] || false + $showenv = $directives['showenv'] || false $verbose = true if $showenv + $serve = $directives['serve'] || false + $verbose = true if (ENV['_CTX_VERBOSE_'] =~ /(y|yes|t|true|on)/io) && ! $locate && ! $report ENV['_CTX_VERBOSE_'] = 'yes' if $verbose @@ -875,15 +958,27 @@ def execute(arguments) end end - if $help || ! $filename || $filename.empty? then + if $serve then + if ENV['KPSEMETHOD'] && ENV['KPSEPORT'] then + require 'base/kpseremote' + begin + KpseRemote::start_server + rescue + end + else + usage + end + elsif $help || ! $filename || $filename.empty? then usage - checktree($tree) + loadtree($tree) + loadenvironment($environment) show_environment() elsif $batch && $filename && ! $filename.empty? then # todo, take commands from file and avoid multiple starts and checks else report("texmfstart version #{$version}") - checktree($tree) + loadtree($tree) + loadenvironment($environment) show_environment() if $make then if $filename == 'all' then diff --git a/scripts/context/ruby/tmftools.rb b/scripts/context/ruby/tmftools.rb index d125c5cae..56935b452 100644 --- a/scripts/context/ruby/tmftools.rb +++ b/scripts/context/ruby/tmftools.rb @@ -21,10 +21,11 @@ # 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.0.0 (experimental, no help yet)', '2005', 'PRAGMA ADE/POD'] +banner = ['TMFTools', 'version 1.1.0 (experimental, no help yet)', '2005/2006', 'PRAGMA ADE/POD'] unless defined? ownpath ownpath = $0.sub(/[\\\/][a-z0-9\-]*?\.rb/i,'') @@ -33,27 +34,58 @@ end require 'base/switch' require 'base/logger' -require 'base/kpsefast' class Commands include CommandBase def init_kpse - 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 + # 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) @@ -128,6 +160,9 @@ commandline.registerflag('verbose') commandline.registeraction('help') commandline.registeraction('version') +commandline.registeraction('reload') +commandline.registeraction('serve') + commandline.expand Commands.new(commandline,logger,banner).send(commandline.action || 'main') diff --git a/tex/context/base/cont-log.tex b/tex/context/base/cont-log.tex index aa1e1ce72..dae135a1c 100644 --- a/tex/context/base/cont-log.tex +++ b/tex/context/base/cont-log.tex @@ -89,7 +89,7 @@ \kern-.11em\TeX} \def\AMSswitch#1% - {$\fam2\ifdim\korpsgrootte>1.1em\scriptstyle\fi#1$} + {$\fam2\ifdim\bodyfontsize>1.1em\scriptstyle\fi#1$} \def\AmSTeX {\AMSswitch A% diff --git a/tex/context/base/cont-new.tex b/tex/context/base/cont-new.tex index 6a0ce0dee..c9f5a26d9 100644 --- a/tex/context/base/cont-new.tex +++ b/tex/context/base/cont-new.tex @@ -24,7 +24,7 @@ \normalend}} \fi -\newcontextversion{2006.02.15 17:41} +\newcontextversion{2006.03.20 10:19} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new @@ -670,8 +670,13 @@ % temp hack, else no proper default fall back (like \textmultiply); todo: sync encoding +\def\dealwithmathtextencoding + {\expanded{\everyhbox{\the\everyhbox\noexpand\fastenableencoding{\currentencoding}}}% + \def\dealwithmathtextencoding{\let\characterencoding\nocharacterencoding}% + \dealwithmathtextencoding} + \appendtoks - \let\characterencoding\nocharacterencoding + \dealwithmathtextencoding \to \everymathematics % \separatestring123 456\to\test [\test] diff --git a/tex/context/base/context.tex b/tex/context/base/context.tex index 093652d18..0d9810695 100644 --- a/tex/context/base/context.tex +++ b/tex/context/base/context.tex @@ -31,7 +31,7 @@ %D 2004.8.30 the low level interface is english. Watch out and adapt %D your styles an modules. -\def\contextversion{2006.02.15 17:41} +\def\contextversion{2006.03.20 10:19} %D For those who want to use this: diff --git a/tex/context/base/core-fig.tex b/tex/context/base/core-fig.tex index ddbb4bb66..f9367d735 100644 --- a/tex/context/base/core-fig.tex +++ b/tex/context/base/core-fig.tex @@ -617,7 +617,11 @@ {\global\fighei\@@efheight}% \doifsomething\@@efscale {\figxsca\@@efscale - \figysca\@@efscale}} + \figysca\@@efscale}% + \doifsomething\@@efxscale + {\figxsca\@@efxscale}% + \doifsomething\@@efyscale + {\figxsca\@@efyscale}} \def\setfactorfiguresize {\doifinsetelse\@@effactor{\v!max,\v!fit,\v!broad} @@ -655,9 +659,9 @@ \fi} \def\setscalefiguresize - {\doifsomething\@@efscale - {\doapplyfigurescale\figwid\@@epw\figxsca - \doapplyfigurescale\fighei\@@eph\figysca + {\doifsomething{\@@efscale\@@efxscale\@@efxscale} + {\doapplyfigurescale\figwid\@@epw\figxsca\@@efxscale + \doapplyfigurescale\fighei\@@eph\figysca\@@efyscale \global\figwid\zeropoint \global\fighei\zeropoint \doifelsenothing\@@efmaxwidth @@ -700,8 +704,8 @@ {\docalculatefigurescales\fighei\@@eph\figwid\@@epw}% \else \dosetdimensionfiguresize - {\doapplyfigurescale\figwid\@@epw\figxsca - \doapplyfigurescale\fighei\@@eph\figysca}% + {\doapplyfigurescale\figwid\@@epw\figxsca\@@efxscale + \doapplyfigurescale\fighei\@@eph\figysca\@@efyscale}% {\docalculatefigurescales\figwid\@@epw\fighei\@@eph}% {\docalculatefigurescales\fighei\@@eph\figwid\@@epw}% \fi @@ -821,13 +825,29 @@ \divide\dimen0 \dimen2 #3=\dimen0 } % #3 = schaal - \def\doapplyfigurescale#1#2#3% +% \def\doapplyfigurescale#1#2#3% +% {\global#1=#2\relax +% \ifcase0\@@efscale\relax % beter: doifnum... +% #3=\plusthousand +% \else +% #3=\@@efscale +% \fi\relax % important ! +% \ifnum#3=\plusthousand\else +% \global\divide #1 \plusthousand +% \global\multiply#1 #3\relax +% \fi} + + \def\doapplyfigurescale#1#2#3#4% {\global#1=#2\relax - \ifcase0\@@efscale\relax % beter: doifnum... - #3=\plusthousand + \ifcase0#4\relax % @@ef.scale kan empty zijn + \ifcase0\@@efscale\relax % @@efscale kan empty zijn + #3=\plusthousand + \else + #3=\@@efscale + \fi \else - #3=\@@efscale - \fi\relax % important ! + #3=#4% + \fi \ifnum#3=\plusthousand\else \global\divide #1 \plusthousand \global\multiply#1 #3\relax @@ -839,6 +859,8 @@ \beginETEX \dimexpr + % todo: use \relax instead of () + \def\docalculatefigurescales#1#2#3#4% {\scratchdimen\dimexpr(#1/\dimexpr(#2/\plusthousand))% \figxsca\scratchdimen @@ -848,14 +870,28 @@ \def\docalculatefigurescale#1#2#3% {#3\dimexpr(#1/\dimexpr(#2/\plusthousand))} - \def\doapplyfigurescale#1#2#3% - {% #3=\ifnum0\number\@@efscale=\zerocount\plusthousand\else\@@efscale\fi - \ifcase0\@@efscale\relax % @@efschaal kan empty zijn - #3=\plusthousand +% \def\doapplyfigurescale#1#2#3% +% {% #3=\ifnum0\number\@@efscale=\zerocount\plusthousand\else\@@efscale\fi +% \ifcase0\@@efscale\relax % @@efscale kan empty zijn +% #3=\plusthousand +% \else +% #3=\@@efscale +% \fi\relax % important ! +% \global#1\ifnum#3=\plusthousand#2\else\dimexpr(#3\dimexpr(#2/\plusthousand))\fi +% \relax} + + \def\doapplyfigurescale#1#2#3#4% todo: also #5 being sx/sy (\ifdim0#5=0pt ...) + {\ifcase0#4\relax % @@ef.scale kan empty zijn + \ifcase0\@@efscale\relax % @@efscale kan empty zijn + #3=\plusthousand + \else + #3=\@@efscale + \fi \else - #3=\@@efscale - \fi\relax % important ! - \global#1\ifnum#3=\plusthousand#2\else\dimexpr(#3\dimexpr(#2/\plusthousand))\fi + #3=#4% + \fi + \relax % important ! + \global#1\ifnum#3=\plusthousand#2\else\dimexpr#3\dimexpr#2/\plusthousand\relax\relax\fi \relax} \endETEX @@ -1031,7 +1067,7 @@ \getparameters [\??ep] [\c!e=\s!unknown, - %\c!w=15\korpsgrootte,\c!h=10\korpsgrootte, + %\c!w=15\bodyfontsize,\c!h=10\bodyfontsize, \c!w=8\lineheight,\c!h=6\lineheight, \c!x=\!!zeropoint,\c!y=\!!zeropoint, \c!t=,\c!s=,\c!a=,\c!f=\@@effilename]% @@ -1041,7 +1077,7 @@ \c!object=\@@exobject,\c!preset=\v!yes,\c!split=,\c!size=, \c!page=0,\c!controls=\v!no,\c!preview=\v!no,\c!repeat=\v!no, \c!maxwidth=\@@exmaxwidth,\c!maxheight=\@@exmaxheight, - \c!scale=,\c!width=,\c!height=,\c!display=,\c!lines=,\c!grid=, + \c!scale=,\c!xscale=,\c!yscale=,\c!width=,\c!height=,\c!display=,\c!lines=,\c!grid=, %\c!foregroundcolor=, \c!color=,\c!conversion=\@@exconversion,\c!prefix=\@@exprefix,\c!cache=\@@excache, \c!factor=,\c!hfactor=,\c!wfactor=]% @@ -1105,8 +1141,8 @@ {\let\@@eftype\c!mps} {\processaction [\@@effiletype] - [ \c!tex=>\let\@@eftype\c!tex, - \c!tmp=>\let\@@eftype\c!tex + [ \c!tex=>\let\@@eftype\c!tex, % check + \c!tmp=>\let\@@eftype\c!tex % check \edef\@@effilepref{\bufferprefix}% \edef\@@effilename{\@@effilepref\@@effilename}, % todo: nop when conversion @@ -1167,19 +1203,19 @@ \edef\@@effullname{\@@effilename.\@@effiletype}% \def\figureextension##1{\@@effiletype}% \fi}% -% begin prelocate to be converted image -\let\@@efconversionpath\empty -\let\@@efconversionfile\@@effilename -\let\@@efconversiontype\@@effiletype -\doifmodeelse{\systemmodeprefix\v!first} - {\doifelsenothing\@@efconversion\donefalse\donetrue}% - {\donefalse}% -\ifdone - \chardef\figurestatus\zerocount - \locatefigureconversionfile - \chardef\figurestatus\zerocount -\fi -% end + % begin prelocate to be converted image + \let\@@efconversionpath\empty + \let\@@efconversionfile\@@effilename + \let\@@efconversiontype\@@effiletype + \doifmodeelse{\systemmodeprefix\v!first} + {\doifelsenothing\@@efconversion\donefalse\donetrue}% + {\donefalse}% + \ifdone + \chardef\figurestatus\zerocount + \locatefigureconversionfile + \chardef\figurestatus\zerocount + \fi + % end \doifelse\@@efpreset\v!no {\doifelse\@@eftype\s!unknown {\chardef\figurestatus\zerocount @@ -2252,10 +2288,10 @@ \c!reset=\v!no, \c!maxwidth=\@@efwidth, \c!maxheight=\@@efheight, - \c!bodyfont=\korpsgrootte, + \c!bodyfont=\bodyfontsize, \c!directory=, \c!file=\f!utilityfilename.\f!figureextension, - \c!radius=.5\korpsgrootte, + \c!radius=.5\bodyfontsize, \c!corner=\v!rectangular, \c!frame=\v!off, \c!background=, % new diff --git a/tex/context/base/core-fld.tex b/tex/context/base/core-fld.tex index 5f03d699e..4262bbdd2 100644 --- a/tex/context/base/core-fld.tex +++ b/tex/context/base/core-fld.tex @@ -28,6 +28,19 @@ \unprotect +%D First we hook fields into the (viewer based) layering mechanism +%D (implemented as properties). + +\ifx\currentlayerproperty\undefined\else \let\currentlayerproperty\empty\fi + +\appendtoks + \doif\@@iafieldlayer\v!auto + {\def\@@iafieldlayer{\currentlayerproperty}}% +\to \everysetupinteraction + +\setupinteraction + [\c!fieldlayer=\v!auto] % auto by default + %D Internal command, linked to \type{\definesymbol}. \def\dogetfieldsymbol#1% @@ -93,7 +106,6 @@ \@@DriverFieldAfterKey,\@@DriverFieldFormat,\@@DriverFieldValidate,\@@DriverFieldCalculate,% \@@DriverFieldFocusIn,\@@DriverFieldFocusOut}} - \def\presettextfield {\preparefieldvariables \dopresettextfield @@ -771,7 +783,7 @@ {\setvalue{\strippedcsname\setupfield##1}{\dosetupfield[##1][#1,##2][#2,##3][#3,##4][#4,##5]}}}% \else\iffirstargument \doifelse{#1}\v!reset - {\let\dodosetupfield\normaldodosetupfield} + {\resetfields} {\setupfields[][][][#1]}% checken \else \writestatus\m!fields{provide either 1 or 4 arguments}% @@ -780,6 +792,11 @@ \def\setupfields {\doquadrupleempty\dosetupfields} +\def\resetfields + {\let\dodosetupfield\normaldodosetupfield} + +% \setupfields[\v!reset] + % opties: veld, label, kader, vertikaal/horizontaal \newif\ifShowFieldLabel @@ -798,8 +815,8 @@ \HorizontalFieldfalse\VerticalFieldfalse, \v!label=>\ShowFieldLabeltrue, \v!frame=>\ShowFieldFrametrue, - \v!horizontal=>\HorizontalFieldtrue, - \v!vertical=>\VerticalFieldtrue]% + \v!horizontal=>\HorizontalFieldtrue, + \v!vertical=>\VerticalFieldtrue]% \ifVerticalField \getparameters[\??fd] [\c!distance=\!!zeropoint,\c!inbetween=\vskip\@@localoffset, @@ -846,7 +863,7 @@ \c!afterkey=,\c!format=,\c!validate=,\c!calculate=, \c!focusin=,\c!focusout=, \c!fieldoffset=\!!zeropoint,\c!fieldbackgroundcolor=, - \c!fieldframecolor=,\c!fieldlayer=,#5]% + \c!fieldframecolor=,\c!fieldlayer=\@@iafieldlayer,#5]% \scratchdimen\framedwidth \edef\@@DriverFieldWidth {\the\scratchdimen}% \scratchdimen\framedheight\edef\@@DriverFieldHeight{\the\scratchdimen}% \vfill @@ -887,7 +904,7 @@ \c!focusin=,\c!focusout=, \c!afterkey=,\c!format=,\c!validate=,\c!calculate=, \c!fieldoffset=\!!zeropoint,\c!fieldbackgroundcolor=, - \c!fieldframecolor=,\c!fieldlayer=,#5,\c!align=] + \c!fieldframecolor=,\c!fieldlayer=\@@iafieldlayer,#5,\c!align=] {\dogetcommacommandelement1\from\@@DriverFieldValues\to\@@DriverFieldValue \ifx\@@DriverFieldValue\empty \let\@@DriverFieldValue\@@DriverFieldDefault @@ -995,7 +1012,8 @@ [\c!frame=\v!off, \c!option=, \c!regionin=JS(Vide_Field{\currentsystemfield:txt}), - \c!regionout=JS(Hide_Field{\currentsystemfield:txt})]% + \c!regionout=JS(Hide_Field{\currentsystemfield:txt}), + \c!fieldlayer=\@@iafieldlayer]% \lower2ex\hbox to \zeropoint {\fitfield[\currentsystemfield:but]}% #2}% @@ -1004,7 +1022,7 @@ %D And one more: -\def\definefieldstack% +\def\definefieldstack {\dotripleargument\dodefinefieldstack} \def\dodefinefieldstack[#1][#2][#3]% name, symbols, settings diff --git a/tex/context/base/core-mis.tex b/tex/context/base/core-mis.tex index 2a08f6ee3..7de9e1fdb 100644 --- a/tex/context/base/core-mis.tex +++ b/tex/context/base/core-mis.tex @@ -89,7 +89,8 @@ \appendtoks \def\MetaPost{MetaPost}\to\simplifiedcommands \appendtoks \def\MetaFont{MetaFont}\to\simplifiedcommands \appendtoks \def\MetaFun{MetaFun}\to\simplifiedcommands -\appendtoks \def||{-}\to\simplifiedcommands +%appendtoks \def||{-}\to\simplifiedcommands +\appendtoks \def|#1|{\ifx#1\empty\empty-\else#1\fi}\to\simplifiedcommands \appendtoks\let\buildtextaccent\secondoftwoarguments\to\simplifiedcommands @@ -2455,15 +2456,18 @@ % scale \def\doscalelikeafigure % quite dirty and potential interference possible - {\doifsomething{\@@xyfactor\@@xyhfactor\@@xywfactor\@@xyscale + {\doifsomething{\@@xyscale\@@xyxscale\@@xyyscale + \@@xyfactor\@@xyhfactor\@@xywfactor \@@xywidth\@@xyheight\@@xylines} - {\let \@@efscale \@@xyscale + {\let \@@efscale \@@xyscale + \let \@@efxscale \@@xyxscale + \let \@@efyscale \@@xyyscale \let \@@effactor \@@xyfactor \let \@@efwfactor\@@xywfactor \let \@@efhfactor\@@xyhfactor - \let \@@efwidth\@@xywidth + \let \@@efwidth \@@xywidth \let \@@efheight \@@xyheight - \let \@@eflines \@@xylines + \let \@@eflines \@@xylines \let \@@efgrid \@@xygrid \let \@@epx \!!zeropoint \let \@@epy \!!zeropoint @@ -2482,12 +2486,12 @@ \scratchdimen\scay\points \divide\scratchdimen \plushundred \edef\@@xysy{\withoutpt\the\scratchdimen}}} -\def\doscale[#1]% +\def\doscale[#1]% todo: xscale/yscale {\bgroup \forgetall \getparameters [\??xy] - [\c!scale=,\c!width=,\c!height=,\c!lines=, + [\c!scale=,\c!xscale=,\c!yscale=,\c!width=,\c!height=,\c!lines=, \c!factor=,\c!hfactor=,\c!wfactor=,\c!grid=, \c!sx=1,\c!sy=1,#1]% \dowithnextbox diff --git a/tex/context/base/core-nav.tex b/tex/context/base/core-nav.tex index 2f06b70a2..a55022d77 100644 --- a/tex/context/base/core-nav.tex +++ b/tex/context/base/core-nav.tex @@ -52,43 +52,54 @@ \def\resetinteractionparameter#1% use with case, no checking done {\letvalue{\??ia#1}\empty} +% \def\interactionparameter#1% +% {\csname\??ia#1\endcsname} + +\newtoks\everysetupinteraction + \def\setupinteraction {\dosingleargument\dodosetupinteraction} \def\dodosetupinteraction[#1]% % \dosetupinteraction == special {\getparameters[\??ia][#1]% - \doifelse\@@iastate\v!start - {\iflocation\else - \showmessage\m!interactions2{\ifusepagedestinations\space(PAGE)\fi}% - \global\locationtrue - \fi} - {\iflocation - \showmessage\m!interactions3{\ifusepagedestinations\space(PAGE)\fi}% - \global\locationfalse - \fi}% - \iflocation - \setsystemmode \v!interaction - \else - \resetsystemmode\v!interaction - \fi - \dosetuppageview\@@iafocus - \doifsomething\@@iacalculate - {\doregistercalculationset\@@iacalculate}% - \doifelse\@@iastrut\v!yes - \locationstruttrue - \locationstrutfalse - \doifelse\@@iaclick\v!yes - \highlighthyperlinkstrue - \highlighthyperlinksfalse - \doifelse\@@iasplit\v!yes - \locationsplittrue - \locationsplitfalse - \doifelse\@@iadisplay\v!new - \gotonewwindowtrue - \gotonewwindowfalse - \doifelse\@@iapage\v!yes - {\global\usepagedestinationstrue} - {\global\usepagedestinationsfalse}} + \the\everysetupinteraction} + +% todo, move partial append to where the action happens + +\appendtoks + \doifelse\@@iastate\v!start + {\iflocation\else + \showmessage\m!interactions2{\ifusepagedestinations\space(PAGE)\fi}% + \global\locationtrue + \fi} + {\iflocation + \showmessage\m!interactions3{\ifusepagedestinations\space(PAGE)\fi}% + \global\locationfalse + \fi}% + \iflocation + \setsystemmode \v!interaction + \else + \resetsystemmode\v!interaction + \fi + \dosetuppageview\@@iafocus + \doifsomething\@@iacalculate + {\doregistercalculationset\@@iacalculate}% + \doifelse\@@iastrut\v!yes + \locationstruttrue + \locationstrutfalse + \doifelse\@@iaclick\v!yes + \highlighthyperlinkstrue + \highlighthyperlinksfalse + \doifelse\@@iasplit\v!yes + \locationsplittrue + \locationsplitfalse + \doifelse\@@iadisplay\v!new + \gotonewwindowtrue + \gotonewwindowfalse + \doifelse\@@iapage\v!yes + {\global\usepagedestinationstrue} + {\global\usepagedestinationsfalse}% +\to \everysetupinteraction %D We have to make sure of some settings: diff --git a/tex/context/base/core-sec.tex b/tex/context/base/core-sec.tex index 2c4db940b..bf60a2ae6 100644 --- a/tex/context/base/core-sec.tex +++ b/tex/context/base/core-sec.tex @@ -1078,10 +1078,14 @@ \global\paginageblokkeerdtrue \fi} +% \setuphead[section][aligntitle=float] % permits title next to sidefloat +% +% \placefigure[left]{}{} \section{\dorecurse{10}{bagger }} \input tufte + \def\dohandlepagebreakAB#1% will be replaced by a more clever (signaling) mechanism (in beta) - {\flushsidefloats + {\doifnotvalue{\??ko#1\c!aligntitle}\v!float\flushsidefloats \getvalue{\??ko#1\c!before}% - %\whitespace vervangen door \noindent elders + % \whitespace vervangen door \noindent elders \relax \ifpaginageblokkeerd \global\paginageblokkeerdfalse @@ -1096,6 +1100,7 @@ \dosomebreak\allowbreak \fi \fi + \doifvalue{\??ko#1\c!aligntitle}\v!float\indent \xdef\@@kolevel{\getvalue{\??se\@@sectie\c!level}}} \def\dohandlepagebreakBB#1#2#3% @@ -1861,7 +1866,7 @@ \everypar\emptytoks % needed indeed \noindent % ipv \whitespace elders, na \forgetall ! \bgroup - \doifelsevalue{\??ko#1\c!aligntitle}\v!yes % new + \doifinsetelse{\getvalue{\??ko#1\c!aligntitle}}{\v!yes,\v!float}% new {\skip0 1\leftskip \skip2 1\rightskip \xdef\localheadskip{\the\skip0}% @@ -1989,18 +1994,18 @@ {\doifvaluenothing{\??ko#1\c!file}{\autocrossdocumentfalse}} {\autocrossdocumentfalse}% % no message needed here, should be a proper switch -\noflines\zerocount + \noflines\zerocount \ifdisplaysectionhead -% new -\processaction - [\getvalue{\??ko#1\c!hang}] - [ \v!line=>\hangheadplacement\noflines\zerocount, - \v!broad=>\hangheadplacement\getnoflines\scratchdimen, - \v!fit=>\hangheadplacement\getrawnoflines\scratchdimen, - \v!none=>\noflines\zerocount, - \v!default=>\noflines\zerocount, - \v!unknown=>\hangheadplacement\noflines0\commalistelement\advance\noflines\minusone]% -% so far + % new + \processaction + [\getvalue{\??ko#1\c!hang}] + [ \v!line=>\hangheadplacement\noflines\zerocount, + \v!broad=>\hangheadplacement\getnoflines\scratchdimen, + \v!fit=>\hangheadplacement\getrawnoflines\scratchdimen, + \v!none=>\noflines\zerocount, + \v!default=>\noflines\zerocount, + \v!unknown=>\hangheadplacement\noflines0\commalistelement\advance\noflines\minusone]% + % so far \let\headlastlinewidth\!!zeropoint \snaptogrid[\getvalue{\??ko#1\c!grid}]\hbox {\hskip\localheadskip @@ -2019,11 +2024,13 @@ \fi}% \doflushnotes % new, not really needed \endgraf -\ifnum\noflines>\zerocount - \dorecurse\noflines{\nointerlineskip\dosomebreak\nobreak\strut\endgraf}% -\fi - \nointerlineskip - \dosomebreak\nobreak + \ifvmode + \ifnum\noflines>\zerocount + \dorecurse\noflines{\nointerlineskip\dosomebreak\nobreak\strut\endgraf}% + \fi + \nointerlineskip + \dosomebreak\nobreak + \fi #2% \else \strut diff --git a/tex/context/base/core-spa.tex b/tex/context/base/core-spa.tex index 29651ae71..229f47598 100644 --- a/tex/context/base/core-spa.tex +++ b/tex/context/base/core-spa.tex @@ -3653,7 +3653,7 @@ % \hyphenpenalty = ( 2.5 * \hsize ) / \raggedness % \tolerance >= 1500 % was 200 -% \raggedness = 2 .. 6\korpsgrootte +% \raggedness = 2 .. 6\bodyfontsize \chardef\raggedstatus=0 % normal left center right diff --git a/tex/context/base/core-sys.tex b/tex/context/base/core-sys.tex index f606b1ad7..cd2908b9c 100644 --- a/tex/context/base/core-sys.tex +++ b/tex/context/base/core-sys.tex @@ -76,7 +76,7 @@ \or \setsystemmode\v!first % 3 : first and only run \or - \setsystemmode\v!last % 4 : extra last run + \setsystemmode\v!last % 4 : (extra) last run \fi \processaction [\@@svtype] diff --git a/tex/context/base/core-ver.tex b/tex/context/base/core-ver.tex index 7cd0d6100..a488a3329 100644 --- a/tex/context/base/core-ver.tex +++ b/tex/context/base/core-ver.tex @@ -771,12 +771,12 @@ {\edef\!!stringa{\csname\??tp#1\c!blank\endcsname}}% \processaction [\!!stringa] - [\v!standard=>\scratchskip\ctxparskip, + [ \v!standard=>\scratchskip\ctxparskip, \v!small=>\scratchskip\blankokleinmaat, \v!medium=>\scratchskip\blankomiddelmaat, - \v!big=>\scratchskip\blankogrootmaat, - \v!halfline=>\scratchskip.5\baselineskip, - \v!line=>\scratchskip\baselineskip, + \v!big=>\scratchskip\blankogrootmaat, + \v!halfline=>\scratchskip.5\baselineskip, + \v!line=>\scratchskip\baselineskip, \v!none=>\scratchskip\zeropoint, \s!unknown=>\scratchskip\commalistelement]% \ifgridsnapping @@ -794,9 +794,17 @@ %D indirect way. As we will see, they are a specific case of a %D more general mechanism. +% \def\dostarttyping#1% +% {\getvalue{\??tp#1\c!before}% +% \startpacked % includes \bgroup +% \initializetyping{#1}% +% \startverbatimcolor +% \expandafter\processdisplayverbatim\expandafter{\s!stop#1}} + \def\dostarttyping#1% {\getvalue{\??tp#1\c!before}% \startpacked % includes \bgroup + \dosetuptypelinenumbering{#1}{}% \initializetyping{#1}% \startverbatimcolor \expandafter\processdisplayverbatim\expandafter{\s!stop#1}} @@ -1165,7 +1173,7 @@ \dodotypefile[\v!file][]{#3}% \fi\fi} -\unprotected \def\dosetuptypelinenumbering#1#2% +\def\dosetuptypelinenumbering#1#2% {\doifundefined{\??tp#1\c!start}{\setuptyping[#1][\c!start=1,\c!stop=,\c!step=1,\c!nlines=,#2]}% \doifelsevalue{\??tp#1\c!numbering}\v!file {\setuplinenumbering[\c!method=\v!file]% @@ -1176,11 +1184,14 @@ \doifvaluenothing{\??tp#1\c!step }{\setvalue{\??tp#1\c!step }{1}}% \setuplinenumbering [\c!method=\v!type, + \c!continue=\getvalue{\??tp#1\c!continue}, \c!start=\getvalue{\??tp#1\c!start}, \c!step=\getvalue{\??tp#1\c!step}]% \donetrue} {\donefalse}}% \ifdone + \ifx\startlinenumbering\undefined \let\startlinenumbering\relax \fi + \ifx\stoplinenumbering \undefined \let\stoplinenumbering \relax \fi \def\beginofverbatimlines{\startlinenumbering}% \def\endofverbatimlines {\stoplinenumbering }% \fi} diff --git a/tex/context/base/enco-037.tex b/tex/context/base/enco-037.tex new file mode 100644 index 000000000..d9fc653b2 --- /dev/null +++ b/tex/context/base/enco-037.tex @@ -0,0 +1,276 @@ +%D \module +%D [ file=enco-037, +%D version=2006.02.13, +%D title=\CONTEXT\ \UNICODE\ Macros, +%D subtitle=Encoding for vector 37, +%D author=Luigi Scarso, +%D date=\currentdate, +%D copyright={PRAGMA}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\startencoding[default] + +\definecharacter UnicodeLightHorizontal {\uchar{37}{000}} %%BOX DRAWINGS LIGHT HORIZONTAL +\definecharacter UnicodeHeavyHorizontal {\uchar{37}{001}} %%BOX DRAWINGS HEAVY HORIZONTAL +\definecharacter UnicodeLightVertical {\uchar{37}{002}} %%BOX DRAWINGS LIGHT VERTICAL +\definecharacter UnicodeHeavyVertical {\uchar{37}{003}} %%BOX DRAWINGS HEAVY VERTICAL +\definecharacter UnicodeLightTripleDashHorizontal {\uchar{37}{004}} %%BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL +\definecharacter UnicodeHeavyTripleDashHorizontal {\uchar{37}{005}} %%BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL +\definecharacter UnicodeLightTripleDashVertical {\uchar{37}{006}} %%BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL +\definecharacter UnicodeHeavyTripleDashVertical {\uchar{37}{007}} %%BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL +\definecharacter UnicodeLightQuadrupleDashHorizontal {\uchar{37}{008}} %%BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL +\definecharacter UnicodeHeavyQuadrupleDashHorizontal {\uchar{37}{009}} %%BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL +\definecharacter UnicodeLightQuadrupleDashVertical {\uchar{37}{010}} %%BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL +\definecharacter UnicodeHeavyQuadrupleDashVertical {\uchar{37}{011}} %%BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL +\definecharacter UnicodeLightDownAndRight {\uchar{37}{012}} %%BOX DRAWINGS LIGHT DOWN AND RIGHT +\definecharacter UnicodeDownLightAndRightHeavy {\uchar{37}{013}} %%BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY +\definecharacter UnicodeDownHeavyAndRightLight {\uchar{37}{014}} %%BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT +\definecharacter UnicodeHeavyDownAndRight {\uchar{37}{015}} %%BOX DRAWINGS HEAVY DOWN AND RIGHT +\definecharacter UnicodeLightDownAndLeft {\uchar{37}{016}} %%BOX DRAWINGS LIGHT DOWN AND LEFT +\definecharacter UnicodeDownLightAndLeftHeavy {\uchar{37}{017}} %%BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY +\definecharacter UnicodeDownHeavyAndLeftLight {\uchar{37}{018}} %%BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT +\definecharacter UnicodeHeavyDownAndLeft {\uchar{37}{019}} %%BOX DRAWINGS HEAVY DOWN AND LEFT +\definecharacter UnicodeLightUpAndRight {\uchar{37}{020}} %%BOX DRAWINGS LIGHT UP AND RIGHT +\definecharacter UnicodeUpLightAndRightHeavy {\uchar{37}{021}} %%BOX DRAWINGS UP LIGHT AND RIGHT HEAVY +\definecharacter UnicodeUpHeavyAndRightLight {\uchar{37}{022}} %%BOX DRAWINGS UP HEAVY AND RIGHT LIGHT +\definecharacter UnicodeHeavyUpAndRight {\uchar{37}{023}} %%BOX DRAWINGS HEAVY UP AND RIGHT +\definecharacter UnicodeLightUpAndLeft {\uchar{37}{024}} %%BOX DRAWINGS LIGHT UP AND LEFT +\definecharacter UnicodeUpLightAndLeftHeavy {\uchar{37}{025}} %%BOX DRAWINGS UP LIGHT AND LEFT HEAVY +\definecharacter UnicodeUpHeavyAndLeftLight {\uchar{37}{026}} %%BOX DRAWINGS UP HEAVY AND LEFT LIGHT +\definecharacter UnicodeHeavyUpAndLeft {\uchar{37}{027}} %%BOX DRAWINGS HEAVY UP AND LEFT +\definecharacter UnicodeLightVerticalAndRight {\uchar{37}{028}} %%BOX DRAWINGS LIGHT VERTICAL AND RIGHT +\definecharacter UnicodeVerticalLightAndRightHeavy {\uchar{37}{029}} %%BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY +\definecharacter UnicodeUpHeavyAndRightDownLight {\uchar{37}{030}} %%BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT +\definecharacter UnicodeDownHeavyAndRightUpLight {\uchar{37}{031}} %%BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT +\definecharacter UnicodeVerticalHeavyAndRightLight {\uchar{37}{032}} %%BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT +\definecharacter UnicodeDownLightAndRightUpHeavy {\uchar{37}{033}} %%BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY +\definecharacter UnicodeUpLightAndRightDownHeavy {\uchar{37}{034}} %%BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY +\definecharacter UnicodeHeavyVerticalAndRight {\uchar{37}{035}} %%BOX DRAWINGS HEAVY VERTICAL AND RIGHT +\definecharacter UnicodeLightVerticalAndLeft {\uchar{37}{036}} %%BOX DRAWINGS LIGHT VERTICAL AND LEFT +\definecharacter UnicodeVerticalLightAndLeftHeavy {\uchar{37}{037}} %%BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY +\definecharacter UnicodeUpHeavyAndLeftDownLight {\uchar{37}{038}} %%BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT +\definecharacter UnicodeDownHeavyAndLeftUpLight {\uchar{37}{039}} %%BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT +\definecharacter UnicodeVerticalHeavyAndLeftLight {\uchar{37}{040}} %%BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT +\definecharacter UnicodeDownLightAndLeftUpHeavy {\uchar{37}{041}} %%BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY +\definecharacter UnicodeUpLightAndLeftDownHeavy {\uchar{37}{042}} %%BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY +\definecharacter UnicodeHeavyVerticalAndLeft {\uchar{37}{043}} %%BOX DRAWINGS HEAVY VERTICAL AND LEFT +\definecharacter UnicodeLightDownAndHorizontal {\uchar{37}{044}} %%BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +\definecharacter UnicodeLeftHeavyAndRightDownLight {\uchar{37}{045}} %%BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT +\definecharacter UnicodeRightHeavyAndLeftDownLight {\uchar{37}{046}} %%BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT +\definecharacter UnicodeDownLightAndHorizontalHeavy {\uchar{37}{047}} %%BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY +\definecharacter UnicodeDownHeavyAndHorizontalLight {\uchar{37}{048}} %%BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT +\definecharacter UnicodeRightLightAndLeftDownHeavy {\uchar{37}{049}} %%BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY +\definecharacter UnicodeLeftLightAndRightDownHeavy {\uchar{37}{050}} %%BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY +\definecharacter UnicodeHeavyDownAndHorizontal {\uchar{37}{051}} %%BOX DRAWINGS HEAVY DOWN AND HORIZONTAL +\definecharacter UnicodeLightUpAndHorizontal {\uchar{37}{052}} %%BOX DRAWINGS LIGHT UP AND HORIZONTAL +\definecharacter UnicodeLeftHeavyAndRightUpLight {\uchar{37}{053}} %%BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT +\definecharacter UnicodeRightHeavyAndLeftUpLight {\uchar{37}{054}} %%BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT +\definecharacter UnicodeUpLightAndHorizontalHeavy {\uchar{37}{055}} %%BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY +\definecharacter UnicodeUpHeavyAndHorizontalLight {\uchar{37}{056}} %%BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT +\definecharacter UnicodeRightLightAndLeftUpHeavy {\uchar{37}{057}} %%BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY +\definecharacter UnicodeLeftLightAndRightUpHeavy {\uchar{37}{058}} %%BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY +\definecharacter UnicodeHeavyUpAndHorizontal {\uchar{37}{059}} %%BOX DRAWINGS HEAVY UP AND HORIZONTAL +\definecharacter UnicodeLightVerticalAndHorizontal {\uchar{37}{060}} %%BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +\definecharacter UnicodeLeftHeavyAndRightVerticalLight {\uchar{37}{061}} %%BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT +\definecharacter UnicodeRightHeavyAndLeftVerticalLight {\uchar{37}{062}} %%BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT +\definecharacter UnicodeVerticalLightAndHorizontalHeavy {\uchar{37}{063}} %%BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY +\definecharacter UnicodeUpHeavyAndDownHorizontalLight {\uchar{37}{064}} %%BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT +\definecharacter UnicodeDownHeavyAndUpHorizontalLight {\uchar{37}{065}} %%BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT +\definecharacter UnicodeVerticalHeavyAndHorizontalLight {\uchar{37}{066}} %%BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT +\definecharacter UnicodeLeftUpHeavyAndRightDownLight {\uchar{37}{067}} %%BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT +\definecharacter UnicodeRightUpHeavyAndLeftDownLight {\uchar{37}{068}} %%BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT +\definecharacter UnicodeLeftDownHeavyAndRightUpLight {\uchar{37}{069}} %%BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT +\definecharacter UnicodeRightDownHeavyAndLeftUpLight {\uchar{37}{070}} %%BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT +\definecharacter UnicodeDownLightAndUpHorizontalHeavy {\uchar{37}{071}} %%BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY +\definecharacter UnicodeUpLightAndDownHorizontalHeavy {\uchar{37}{072}} %%BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY +\definecharacter UnicodeRightLightAndLeftVerticalHeavy {\uchar{37}{073}} %%BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY +\definecharacter UnicodeLeftLightAndRightVerticalHeavy {\uchar{37}{074}} %%BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY +\definecharacter UnicodeHeavyVerticalAndHorizontal {\uchar{37}{075}} %%BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL +\definecharacter UnicodeLightDoubleDashHorizontal {\uchar{37}{076}} %%BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL +\definecharacter UnicodeHeavyDoubleDashHorizontal {\uchar{37}{077}} %%BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL +\definecharacter UnicodeLightDoubleDashVertical {\uchar{37}{078}} %%BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL +\definecharacter UnicodeHeavyDoubleDashVertical {\uchar{37}{079}} %%BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL +\definecharacter UnicodeDoubleHorizontal {\uchar{37}{080}} %%BOX DRAWINGS DOUBLE HORIZONTAL +\definecharacter UnicodeDoubleVertical {\uchar{37}{081}} %%BOX DRAWINGS DOUBLE VERTICAL +\definecharacter UnicodeDownSingleAndRightDouble {\uchar{37}{082}} %%BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE +\definecharacter UnicodeDownDoubleAndRightSingle {\uchar{37}{083}} %%BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE +\definecharacter UnicodeDoubleDownAndRight {\uchar{37}{084}} %%BOX DRAWINGS DOUBLE DOWN AND RIGHT +\definecharacter UnicodeDownSingleAndLeftDouble {\uchar{37}{085}} %%BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE +\definecharacter UnicodeDownDoubleAndLeftSingle {\uchar{37}{086}} %%BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE +\definecharacter UnicodeDoubleDownAndLeft {\uchar{37}{087}} %%BOX DRAWINGS DOUBLE DOWN AND LEFT +\definecharacter UnicodeUpSingleAndRightDouble {\uchar{37}{088}} %%BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE +\definecharacter UnicodeUpDoubleAndRightSingle {\uchar{37}{089}} %%BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE +\definecharacter UnicodeDoubleUpAndRight {\uchar{37}{090}} %%BOX DRAWINGS DOUBLE UP AND RIGHT +\definecharacter UnicodeUpSingleAndLeftDouble {\uchar{37}{091}} %%BOX DRAWINGS UP SINGLE AND LEFT DOUBLE +\definecharacter UnicodeUpDoubleAndLeftSingle {\uchar{37}{092}} %%BOX DRAWINGS UP DOUBLE AND LEFT SINGLE +\definecharacter UnicodeDoubleUpAndLeft {\uchar{37}{093}} %%BOX DRAWINGS DOUBLE UP AND LEFT +\definecharacter UnicodeVerticalSingleAndRightDouble {\uchar{37}{094}} %%BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE +\definecharacter UnicodeVerticalDoubleAndRightSingle {\uchar{37}{095}} %%BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE +\definecharacter UnicodeDoubleVerticalAndRight {\uchar{37}{096}} %%BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +\definecharacter UnicodeVerticalSingleAndLeftDouble {\uchar{37}{097}} %%BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE +\definecharacter UnicodeVerticalDoubleAndLeftSingle {\uchar{37}{098}} %%BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE +\definecharacter UnicodeDoubleVerticalAndLeft {\uchar{37}{099}} %%BOX DRAWINGS DOUBLE VERTICAL AND LEFT +\definecharacter UnicodeDownSingleAndHorizontalDouble {\uchar{37}{100}} %%BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE +\definecharacter UnicodeDownDoubleAndHorizontalSingle {\uchar{37}{101}} %%BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE +\definecharacter UnicodeDoubleDownAndHorizontal {\uchar{37}{102}} %%BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +\definecharacter UnicodeUpSingleAndHorizontalDouble {\uchar{37}{103}} %%BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE +\definecharacter UnicodeUpDoubleAndHorizontalSingle {\uchar{37}{104}} %%BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE +\definecharacter UnicodeDoubleUpAndHorizontal {\uchar{37}{105}} %%BOX DRAWINGS DOUBLE UP AND HORIZONTAL +\definecharacter UnicodeVerticalSingleAndHorizontalDouble {\uchar{37}{106}} %%BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE +\definecharacter UnicodeVerticalDoubleAndHorizontalSingle {\uchar{37}{107}} %%BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE +\definecharacter UnicodeDoubleVerticalAndHorizontal {\uchar{37}{108}} %%BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +\definecharacter UnicodeLightArcDownAndRight {\uchar{37}{109}} %%BOX DRAWINGS LIGHT ARC DOWN AND RIGHT +\definecharacter UnicodeLightArcDownAndLeft {\uchar{37}{110}} %%BOX DRAWINGS LIGHT ARC DOWN AND LEFT +\definecharacter UnicodeLightArcUpAndLeft {\uchar{37}{111}} %%BOX DRAWINGS LIGHT ARC UP AND LEFT +\definecharacter UnicodeLightArcUpAndRight {\uchar{37}{112}} %%BOX DRAWINGS LIGHT ARC UP AND RIGHT +\definecharacter UnicodeLightDiagonalUpperRightToLowerLeft {\uchar{37}{113}} %%BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT +\definecharacter UnicodeLightDiagonalUpperLeftToLowerRight {\uchar{37}{114}} %%BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT +\definecharacter UnicodeLightDiagonalCross {\uchar{37}{115}} %%BOX DRAWINGS LIGHT DIAGONAL CROSS +\definecharacter UnicodeLightLeft {\uchar{37}{116}} %%BOX DRAWINGS LIGHT LEFT +\definecharacter UnicodeLightUp {\uchar{37}{117}} %%BOX DRAWINGS LIGHT UP +\definecharacter UnicodeLightRight {\uchar{37}{118}} %%BOX DRAWINGS LIGHT RIGHT +\definecharacter UnicodeLightDown {\uchar{37}{119}} %%BOX DRAWINGS LIGHT DOWN +\definecharacter UnicodeHeavyLeft {\uchar{37}{120}} %%BOX DRAWINGS HEAVY LEFT +\definecharacter UnicodeHeavyUp {\uchar{37}{121}} %%BOX DRAWINGS HEAVY UP +\definecharacter UnicodeHeavyRight {\uchar{37}{122}} %%BOX DRAWINGS HEAVY RIGHT +\definecharacter UnicodeHeavyDown {\uchar{37}{123}} %%BOX DRAWINGS HEAVY DOWN +\definecharacter UnicodeLightLeftAndHeavyRight {\uchar{37}{124}} %%BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT +\definecharacter UnicodeLightUpAndHeavyDown {\uchar{37}{125}} %%BOX DRAWINGS LIGHT UP AND HEAVY DOWN +\definecharacter UnicodeHeavyLeftAndLightRight {\uchar{37}{126}} %%BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT +\definecharacter UnicodeHeavyUpAndLightDown {\uchar{37}{127}} %%BOX DRAWINGS HEAVY UP AND LIGHT DOWN +\definecharacter UnicodeUpperHalfBlock {\uchar{37}{128}} %%UPPER HALF BLOCK +\definecharacter UnicodeLowerOneEighthBlock {\uchar{37}{129}} %%LOWER ONE EIGHTH BLOCK +\definecharacter UnicodeLowerOneQuarterBlock {\uchar{37}{130}} %%LOWER ONE QUARTER BLOCK +\definecharacter UnicodeLowerThreeEighthsBlock {\uchar{37}{131}} %%LOWER THREE EIGHTHS BLOCK +\definecharacter UnicodeLowerHalfBlock {\uchar{37}{132}} %%LOWER HALF BLOCK +\definecharacter UnicodeLowerFiveEighthsBlock {\uchar{37}{133}} %%LOWER FIVE EIGHTHS BLOCK +\definecharacter UnicodeLowerThreeQuartersBlock {\uchar{37}{134}} %%LOWER THREE QUARTERS BLOCK +\definecharacter UnicodeLowerSevenEighthsBlock {\uchar{37}{135}} %%LOWER SEVEN EIGHTHS BLOCK +\definecharacter UnicodeFullBlock {\uchar{37}{136}} %%FULL BLOCK +\definecharacter UnicodeLeftSevenEighthsBlock {\uchar{37}{137}} %%LEFT SEVEN EIGHTHS BLOCK +\definecharacter UnicodeLeftThreeQuartersBlock {\uchar{37}{138}} %%LEFT THREE QUARTERS BLOCK +\definecharacter UnicodeLeftFiveEighthsBlock {\uchar{37}{139}} %%LEFT FIVE EIGHTHS BLOCK +\definecharacter UnicodeLeftHalfBlock {\uchar{37}{140}} %%LEFT HALF BLOCK +\definecharacter UnicodeLeftThreeEighthsBlock {\uchar{37}{141}} %%LEFT THREE EIGHTHS BLOCK +\definecharacter UnicodeLeftOneQuarterBlock {\uchar{37}{142}} %%LEFT ONE QUARTER BLOCK +\definecharacter UnicodeLeftOneEighthBlock {\uchar{37}{143}} %%LEFT ONE EIGHTH BLOCK +\definecharacter UnicodeRightHalfBlock {\uchar{37}{144}} %%RIGHT HALF BLOCK +\definecharacter UnicodeLightShade {\uchar{37}{145}} %%LIGHT SHADE +\definecharacter UnicodeMediumShade {\uchar{37}{146}} %%MEDIUM SHADE +\definecharacter UnicodeDarkShade {\uchar{37}{147}} %%DARK SHADE +\definecharacter UnicodeUpperOneEighthBlock {\uchar{37}{148}} %%UPPER ONE EIGHTH BLOCK +\definecharacter UnicodeRightOneEighthBlock {\uchar{37}{149}} %%RIGHT ONE EIGHTH BLOCK +\definecharacter UnicodeQuadrantLowerLeft {\uchar{37}{150}} %%[Unassigned U+2596] +\definecharacter UnicodeQuadrantLowerRight {\uchar{37}{151}} %%[Unassigned U+2597] +\definecharacter UnicodeQuadrantUpperLeft {\uchar{37}{152}} %%[Unassigned U+2598] +\definecharacter UnicodeQuadrantUpperLeftAndLowerLeftAndLowerRight {\uchar{37}{153}} %%[Unassigned U+2599] +\definecharacter UnicodeQuadrantUpperLeftAndLowerRight {\uchar{37}{154}} %%[Unassigned U+259A] +\definecharacter UnicodeQuadrantUpperLeftAndUpperRightandLowerLeft {\uchar{37}{155}} %%[Unassigned U+259B] +\definecharacter UnicodeQuadrantUpperLeftAndUpperRightAndLowerRight {\uchar{37}{156}} %%[Unassigned U+259C] +\definecharacter UnicodeQuadrantUpperRight {\uchar{37}{157}} %%[Unassigned U+259D] +\definecharacter UnicodeQuadrantUpperRightAndLowerLeft {\uchar{37}{158}} %%[Unassigned U+259E] +\definecharacter UnicodeQuadrantUpperRightAndLowerLeftAndLowerRight {\uchar{37}{159}} %%[Unassigned U+259F] +\definecharacter UnicodeBlackSquare {\uchar{37}{160}} %%BLACK SQUARE +\definecharacter UnicodeWhiteSquare {\uchar{37}{161}} %%WHITE SQUARE +\definecharacter UnicodeWhiteSquareWithRoundedCorners {\uchar{37}{162}} %%WHITE SQUARE WITH ROUNDED CORNERS +\definecharacter UnicodeWhiteSquareContainingBlackSmallSquare {\uchar{37}{163}} %%WHITE SQUARE CONTAINING BLACK SMALL SQUARE +\definecharacter UnicodeSquareWithHorizontalFill {\uchar{37}{164}} %%SQUARE WITH HORIZONTAL FILL +\definecharacter UnicodeSquareWithVerticalFill {\uchar{37}{165}} %%SQUARE WITH VERTICAL FILL +\definecharacter UnicodeSquareWithOrthogonalCrosshatchFill {\uchar{37}{166}} %%SQUARE WITH ORTHOGONAL CROSSHATCH FILL +\definecharacter UnicodeSquareWithUpperLeftToLowerRightFill {\uchar{37}{167}} %%SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL +\definecharacter UnicodeSquareWithUpperRightToLowerLeftFill {\uchar{37}{168}} %%SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL +\definecharacter UnicodeSquareWithDiagonalCrosshatchFill {\uchar{37}{169}} %%SQUARE WITH DIAGONAL CROSSHATCH FILL +\definecharacter UnicodeBlackSmallSquare {\uchar{37}{170}} %%BLACK SMALL SQUARE +\definecharacter UnicodeWhiteSmallSquare {\uchar{37}{171}} %%WHITE SMALL SQUARE +\definecharacter UnicodeBlackRectangle {\uchar{37}{172}} %%BLACK RECTANGLE +\definecharacter UnicodeWhiteRectangle {\uchar{37}{173}} %%WHITE RECTANGLE +\definecharacter UnicodeBlackVerticalRectangle {\uchar{37}{174}} %%BLACK VERTICAL RECTANGLE +\definecharacter UnicodeWhiteVerticalRectangle {\uchar{37}{175}} %%WHITE VERTICAL RECTANGLE +\definecharacter UnicodeBlackParallelogram {\uchar{37}{176}} %%BLACK PARALLELOGRAM +\definecharacter UnicodeWhiteParallelogram {\uchar{37}{177}} %%WHITE PARALLELOGRAM +\definecharacter UnicodeBlackUpPointingTriangle {\uchar{37}{178}} %%BLACK UP-POINTING TRIANGLE +\definecharacter UnicodeWhiteUpPointingTriangle {\uchar{37}{179}} %%WHITE UP-POINTING TRIANGLE +\definecharacter UnicodeBlackUpPointingSmallTriangle {\uchar{37}{180}} %%BLACK UP-POINTING SMALL TRIANGLE +\definecharacter UnicodeWhiteUpPointingSmallTriangle {\uchar{37}{181}} %%WHITE UP-POINTING SMALL TRIANGLE +\definecharacter UnicodeBlackRightPointingTriangle {\uchar{37}{182}} %%BLACK RIGHT-POINTING TRIANGLE +\definecharacter UnicodeWhiteRightPointingTriangle {\uchar{37}{183}} %%WHITE RIGHT-POINTING TRIANGLE +\definecharacter UnicodeBlackRightPointingSmallTriangle {\uchar{37}{184}} %%BLACK RIGHT-POINTING SMALL TRIANGLE +\definecharacter UnicodeWhiteRightPointingSmallTriangle {\uchar{37}{185}} %%WHITE RIGHT-POINTING SMALL TRIANGLE +\definecharacter UnicodeBlackRightPointingPointer {\uchar{37}{186}} %%BLACK RIGHT-POINTING POINTER +\definecharacter UnicodeWhiteRightPointingPointer {\uchar{37}{187}} %%WHITE RIGHT-POINTING POINTER +\definecharacter UnicodeBlackDownPointingTriangle {\uchar{37}{188}} %%BLACK DOWN-POINTING TRIANGLE +\definecharacter UnicodeWhiteDownPointingTriangle {\uchar{37}{189}} %%WHITE DOWN-POINTING TRIANGLE +\definecharacter UnicodeBlackDownPointingSmallTriangle {\uchar{37}{190}} %%BLACK DOWN-POINTING SMALL TRIANGLE +\definecharacter UnicodeWhiteDownPointingSmallTriangle {\uchar{37}{191}} %%WHITE DOWN-POINTING SMALL TRIANGLE +\definecharacter UnicodeBlackLeftPointingTriangle {\uchar{37}{192}} %%BLACK LEFT-POINTING TRIANGLE +\definecharacter UnicodeWhiteLeftPointingTriangle {\uchar{37}{193}} %%WHITE LEFT-POINTING TRIANGLE +\definecharacter UnicodeBlackLeftPointingSmallTriangle {\uchar{37}{194}} %%BLACK LEFT-POINTING SMALL TRIANGLE +\definecharacter UnicodeWhiteLeftPointingSmallTriangle {\uchar{37}{195}} %%WHITE LEFT-POINTING SMALL TRIANGLE +\definecharacter UnicodeBlackLeftPointingPointer {\uchar{37}{196}} %%BLACK LEFT-POINTING POINTER +\definecharacter UnicodeWhiteLeftPointingPointer {\uchar{37}{197}} %%WHITE LEFT-POINTING POINTER +\definecharacter UnicodeBlackDiamond {\uchar{37}{198}} %%BLACK DIAMOND +\definecharacter UnicodeWhiteDiamond {\uchar{37}{199}} %%WHITE DIAMOND +\definecharacter UnicodeWhiteDiamondContainingBlackSmallDiamond {\uchar{37}{200}} %%WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND +\definecharacter UnicodeFisheye {\uchar{37}{201}} %%FISHEYE +\definecharacter UnicodeLozenge {\uchar{37}{202}} %%LOZENGE +\definecharacter UnicodeWhiteCircle {\uchar{37}{203}} %%WHITE CIRCLE +\definecharacter UnicodeDottedCircle {\uchar{37}{204}} %%DOTTED CIRCLE +\definecharacter UnicodeCircleWithVerticalFill {\uchar{37}{205}} %%CIRCLE WITH VERTICAL FILL +\definecharacter UnicodeBullseye {\uchar{37}{206}} %%BULLSEYE +\definecharacter UnicodeBlackCircle {\uchar{37}{207}} %%BLACK CIRCLE +\definecharacter UnicodeCircleWithLeftHalfBlack {\uchar{37}{208}} %%CIRCLE WITH LEFT HALF BLACK +\definecharacter UnicodeCircleWithRightHalfBlack {\uchar{37}{209}} %%CIRCLE WITH RIGHT HALF BLACK +\definecharacter UnicodeCircleWithLowerHalfBlack {\uchar{37}{210}} %%CIRCLE WITH LOWER HALF BLACK +\definecharacter UnicodeCircleWithUpperHalfBlack {\uchar{37}{211}} %%CIRCLE WITH UPPER HALF BLACK +\definecharacter UnicodeCircleWithUpperRightQuadrantBlack {\uchar{37}{212}} %%CIRCLE WITH UPPER RIGHT QUADRANT BLACK +\definecharacter UnicodeCircleWithAllButUpperLeftQuadrantBlack {\uchar{37}{213}} %%CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK +\definecharacter UnicodeLeftHalfBlackCircle {\uchar{37}{214}} %%LEFT HALF BLACK CIRCLE +\definecharacter UnicodeRightHalfBlackCircle {\uchar{37}{215}} %%RIGHT HALF BLACK CIRCLE +\definecharacter UnicodeInverseBullet {\uchar{37}{216}} %%INVERSE BULLET +\definecharacter UnicodeInverseWhiteCircle {\uchar{37}{217}} %%INVERSE WHITE CIRCLE +\definecharacter UnicodeUpperHalfInverseWhiteCircle {\uchar{37}{218}} %%UPPER HALF INVERSE WHITE CIRCLE +\definecharacter UnicodeLowerHalfInverseWhiteCircle {\uchar{37}{219}} %%LOWER HALF INVERSE WHITE CIRCLE +\definecharacter UnicodeUpperLeftQuadrantCircularArc {\uchar{37}{220}} %%UPPER LEFT QUADRANT CIRCULAR ARC +\definecharacter UnicodeUpperRightQuadrantCircularArc {\uchar{37}{221}} %%UPPER RIGHT QUADRANT CIRCULAR ARC +\definecharacter UnicodeLowerRightQuadrantCircularArc {\uchar{37}{222}} %%LOWER RIGHT QUADRANT CIRCULAR ARC +\definecharacter UnicodeLowerLeftQuadrantCircularArc {\uchar{37}{223}} %%LOWER LEFT QUADRANT CIRCULAR ARC +\definecharacter UnicodeUpperHalfCircle {\uchar{37}{224}} %%UPPER HALF CIRCLE +\definecharacter UnicodeLowerHalfCircle {\uchar{37}{225}} %%LOWER HALF CIRCLE +\definecharacter UnicodeBlackLowerRightTriangle {\uchar{37}{226}} %%BLACK LOWER RIGHT TRIANGLE +\definecharacter UnicodeBlackLowerLeftTriangle {\uchar{37}{227}} %%BLACK LOWER LEFT TRIANGLE +\definecharacter UnicodeBlackUpperLeftTriangle {\uchar{37}{228}} %%BLACK UPPER LEFT TRIANGLE +\definecharacter UnicodeBlackUpperRightTriangle {\uchar{37}{229}} %%BLACK UPPER RIGHT TRIANGLE +\definecharacter UnicodeWhiteBullet {\uchar{37}{230}} %%WHITE BULLET +\definecharacter UnicodeSquareWithLeftHalfBlack {\uchar{37}{231}} %%SQUARE WITH LEFT HALF BLACK +\definecharacter UnicodeSquareWithRightHalfBlack {\uchar{37}{232}} %%SQUARE WITH RIGHT HALF BLACK +\definecharacter UnicodeSquareWithUpperLeftDiagonalHalfBlack {\uchar{37}{233}} %%SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK +\definecharacter UnicodeSquareWithLowerRightDiagonalHalfBlack {\uchar{37}{234}} %%SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK +\definecharacter UnicodeWhiteSquareWithVerticalBisectingLine {\uchar{37}{235}} %%WHITE SQUARE WITH VERTICAL BISECTING LINE +\definecharacter UnicodeWhiteUpPointingTriangleWithDot {\uchar{37}{236}} %%WHITE UP-POINTING TRIANGLE WITH DOT +\definecharacter UnicodeUpPointingTriangleWithLeftHalfBlack {\uchar{37}{237}} %%UP-POINTING TRIANGLE WITH LEFT HALF BLACK +\definecharacter UnicodeUpPointingTriangleWithRightHalfBlack {\uchar{37}{238}} %%UP-POINTING TRIANGLE WITH RIGHT HALF BLACK +\definecharacter UnicodeLargeCircle {\uchar{37}{239}} %%LARGE CIRCLE +\definecharacter UnicodeWhiteSquareWithUpperLeftQuadrant {\uchar{37}{240}} %%WHITE SQUARE WITH UPPER LEFT QUADRANT +\definecharacter UnicodeWhiteSquareWithLowerLeftQuadrant {\uchar{37}{241}} %%WHITE SQUARE WITH LOWER LEFT QUADRANT +\definecharacter UnicodeWhiteSquareWithLowerRightQuadrant {\uchar{37}{242}} %%WHITE SQUARE WITH LOWER RIGHT QUADRANT +\definecharacter UnicodeWhiteSquareWithUpperRightQuadrant {\uchar{37}{243}} %%WHITE SQUARE WITH UPPER RIGHT QUADRANT +\definecharacter UnicodeWhiteCircleWithUpperLeftQuadrant {\uchar{37}{244}} %%WHITE CIRCLE WITH UPPER LEFT QUADRANT +\definecharacter UnicodeWhiteCircleWithLowerLeftQuadrant {\uchar{37}{245}} %%WHITE CIRCLE WITH LOWER LEFT QUADRANT +\definecharacter UnicodeWhiteCircleWithLowerRightQuadrant {\uchar{37}{246}} %%WHITE CIRCLE WITH LOWER RIGHT QUADRANT +\definecharacter UnicodeWhiteCircleWithUpperRightQuadrant {\uchar{37}{247}} %%WHITE CIRCLE WITH UPPER RIGHT QUADRANT +\definecharacter UnicodeUpperLeftTriangle {\uchar{37}{248}} %%[Unassigned U+25F8] +\definecharacter UnicodeUpperRightTriangle {\uchar{37}{249}} %%[Unassigned U+25F9] +\definecharacter UnicodeLowerLeftTriangle {\uchar{37}{250}} %%[Unassigned U+25FA] +\definecharacter UnicodeWhiteMediumSquare {\uchar{37}{251}} %%[Unassigned U+25FB] +\definecharacter UnicodeBlackMediumSquare {\uchar{37}{252}} %%[Unassigned U+25FC] +\definecharacter UnicodeWhiteMediumSmallSquare {\uchar{37}{253}} %%[Unassigned U+25FD] +\definecharacter UnicodeBlackMediumSmallSquare {\uchar{37}{254}} %%[Unassigned U+25FE] +\definecharacter UnicodeLowerRightTriangle {\uchar{37}{255}} %%[Unassigned U+25FF] + +\stopencoding + +\endinput + diff --git a/tex/context/base/m-cweb.tex b/tex/context/base/m-cweb.tex index 65184ddae..1d3455acf 100644 --- a/tex/context/base/m-cweb.tex +++ b/tex/context/base/m-cweb.tex @@ -224,9 +224,9 @@ %D The original macros are based on a 10~point bodyfont size. We %D therefore have to specify dimension in points a bit %D different. Specifications like .6pt are changed to -%D \type{.06} times \type{\korpsgrootte}. +%D \type{.06} times \type{\bodyfontsize}. -\defCWEBmacro\CWEBpt {\korpsgrootte} % still dutch +\defCWEBmacro\CWEBpt {\bodyfontsize} % still dutch %D \macros{CEE,UNIX,TEX,CPLUSPLUS}{} %D diff --git a/tex/context/base/mult-con.tex b/tex/context/base/mult-con.tex index cf3da58b2..3ed401edb 100644 --- a/tex/context/base/mult-con.tex +++ b/tex/context/base/mult-con.tex @@ -2136,6 +2136,10 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub endfassung finalni finale final final + float: blok float + gleitobjekt plvouciobjekt + oggettomobile obiectmobil + flottant depth: diepte depth tiefe podlehloubky profondita adancime diff --git a/tex/context/base/page-bck.tex b/tex/context/base/page-bck.tex index 22596001d..9dcc920ad 100644 --- a/tex/context/base/page-bck.tex +++ b/tex/context/base/page-bck.tex @@ -524,7 +524,7 @@ \setupbackgrounds [\v!paper,\v!page,\v!leftpage,\v!rightpage] [\c!frame=\v!off, - \c!radius=.5\korpsgrootte, + \c!radius=.5\bodyfontsize, \c!corner=\v!rectangular, \c!background=, \c!screen=\@@rsscreen, diff --git a/tex/context/base/page-flt.tex b/tex/context/base/page-flt.tex index a19c326a3..8e4c16e36 100644 --- a/tex/context/base/page-flt.tex +++ b/tex/context/base/page-flt.tex @@ -557,8 +557,8 @@ {\presetlocalframed[\??fl#1]% \setupfloat [#1] - [\c!width=8\lineheight, % 15\korpsgrootte, - \c!height=6\lineheight, % 10\korpsgrootte, + [\c!width=8\lineheight, % 15\bodyfontsize, + \c!height=6\lineheight, % 10\bodyfontsize, \c!minwidth=, \c!maxwidth=, \c!maxheight=, @@ -1339,7 +1339,7 @@ \def\addlocalbackgroundtobox{\resetglobal\gobbleoneargument}% \fi -\def\captionminwidth {15\korpsgrootte} +\def\captionminwidth {15\bodyfontsize} \def\captionovershoot {2em} \def\dopreparenocaption#1#2#3#4% @@ -2068,7 +2068,7 @@ \c!height=\v!fit, \c!offset=\v!overlay, \c!frame=\v!off, - \c!radius=.5\korpsgrootte, + \c!radius=.5\bodyfontsize, \c!corner=\v!rectangular, \c!background=, \c!backgroundscreen=\@@rsscreen, diff --git a/tex/context/base/page-lin.tex b/tex/context/base/page-lin.tex index dfb99ca95..9a18347a0 100644 --- a/tex/context/base/page-lin.tex +++ b/tex/context/base/page-lin.tex @@ -200,12 +200,39 @@ \newevery \everylinenumber \relax +% \def\dodoplacelinenumber +% {% beware of em's, the font is already switched ! +% \setbox\scratchbox\hbox +% {\setbox0\hbox{\@@rncommand{\completelinenumber}}\vsmashbox0% +% \ifcase\linenumberlocation +% \rlap{\hbox to \@@rnwidth{\box0\hss}}% was \llap, nog testen !! +% \or +% \inleftmargin +% {\forgetall +% \doifelse\@@rnwidth\v!margin +% {\hsize\leftmarginwidth}{\hsize\@@rnwidth}% +% \alignedline\@@rnalign\v!right{\box0\hskip\@@rndistance}}% +% \else +% \inrightmargin +% {\forgetall +% \doifelse\@@rnwidth\v!margin +% {\hsize\rightmarginwidth}{\hsize\@@rnwidth}% +% \alignedline\@@rnalign\v!left{\hskip\@@rndistance\box0}}% +% \fi}% +% \vsmashbox\scratchbox +% \box\scratchbox +% \the\everylinenumber} + \def\dodoplacelinenumber {% beware of em's, the font is already switched ! \setbox\scratchbox\hbox {\setbox0\hbox{\@@rncommand{\completelinenumber}}\vsmashbox0% \ifcase\linenumberlocation - \rlap{\hbox to \@@rnwidth{\box0\hss}}% was \llap, nog testen !! + \iftypesettinglines % hack + \expandafter\llap + \else + \expandafter\rlap + \fi{\hbox to \@@rnwidth{\box0\hss}}% was \llap, nog testen !! \or \inleftmargin {\forgetall @@ -240,9 +267,12 @@ % \v!text=>\chardef\linenumberlocation\zerocount, %\s!unknown=>\chardef\linenumberlocation\zerocount, %\s!default=>\chardef\linenumberlocation\zerocount]% - \ifcase\linenumberlocation % text - \advance\leftskip \@@rnwidth\relax - \fi + \doifnot\@@rnwidth\v!margin + {\freezedimenmacro\@@rnwidth + \ifcase\linenumberlocation % text + \advance\leftskip\@@rnwidth\relax + \fi}% + \freezedimenmacro\@@rndistance \chardef\@@rn@@rnmethod \ifprocessingverbatim\zerocount\else\iftypesettinglines\plusone\else\plustwo\fi\fi \processaction @@ -431,7 +461,7 @@ \newcount\internalparagraphnumber -\def\setupparagraphnumbering% +\def\setupparagraphnumbering {\dosingleempty\dosetupparagraphnumbering} \def\dosetupparagraphnumbering[#1]% diff --git a/tex/context/base/page-lyr.tex b/tex/context/base/page-lyr.tex index fc5a17317..727bbec3f 100644 --- a/tex/context/base/page-lyr.tex +++ b/tex/context/base/page-lyr.tex @@ -724,8 +724,8 @@ {\doifelselayerdata{OTRTEXT} {\setbox#1\hbox to \makeupwidth {\startoverlay + {\tightlayer[OTRTEXT]} % first, otherwise problems with toc {\normalsettextpagecontent{#1}{#2}{#3}\box#1} - {\tightlayer[OTRTEXT]} \stopoverlay}% \dp#1\zeropoint}% {\normalsettextpagecontent{#1}{#2}{#3}}} diff --git a/tex/context/base/page-mul.tex b/tex/context/base/page-mul.tex index c68a4dcf2..0a8a5c75b 100644 --- a/tex/context/base/page-mul.tex +++ b/tex/context/base/page-mul.tex @@ -27,7 +27,7 @@ \let\OTRMULsetvsize \OTRONEsetvsize \let\OTRMULsethsize \OTRONEsethsize \let\OTRMULdopagecontents \OTRONEdopagecontents -\let\OTRMULfinalsidefloatoutput\OTRONEfinalsidefloatoutput +\let\OTRMULfinalsidefloatoutput\OTRONEfinalsidefloatoutput % ??? \let\OTRMULflushfloatbox \OTRONEflushfloatbox \let\OTRMULdosettopinserts \relax @@ -37,6 +37,9 @@ \let\OTRMULdosetbothinserts \relax \let\OTRMULflushsavedfloats \relax +\let\OTRMULflushsidefloats \forgetsidefloats % \relax +\let\OTRMULsynchronizesidefloats\forgetsidefloats % \relax + \newtoks \OTRMULoutput \def\OTRMULgotonextpage @@ -632,6 +635,8 @@ \edef\maxcolumndepth{\the\dp\currentcolumnbox}% \fi}} +\chardef\columnedtopflushmethod\plusone + \def\flushcolumnedpage {\bgroup \forgetall @@ -698,14 +703,26 @@ \global\precolumnboxheight\zeropoint \setvsize \dosomebreak\nobreak - % wrong, but keep it as a reminder - % \ifgridsnapping \else - % \scratchdimen\topskip - % \advance\scratchdimen -\openstrutheight - % \nointerlineskip - % \vskip-\scratchdimen - % \fi - % so that we don't add it again + \ifgridsnapping \else + \ifcase\columnedtopflushmethod + % sometimes method 1 goes wrong, so we need a way out; best sort this out + % when we run into it again + \or + % \input tufte \startcolumns \showbaselines \input tufte \stopcolumns \input tufte + \scratchdimen\topskip + \advance\scratchdimen -\openstrutheight + \nointerlineskip + \vskip-\scratchdimen + \or + % untested but maybe handy + \scratchdimen\topskip + \advance\scratchdimen -\openstrutheight + \nointerlineskip + \vskip-\scratchdimen + \vskip-\lineheight + \vbox{\strut}% + \fi + \fi \prevdepth\openstrutdepth \nointerlineskip \dp\columnpagebox\zeropoint @@ -984,7 +1001,7 @@ \getmulticolumnlines \dimen0=\nofcolumnlines\openlineheight \dohandleallcolumns - {\splitcurrentcolumn from \box\normalpagebox to \dimen0} + {\splitcurrentcolumn from \box\normalpagebox to \dimen0}% \setbox\restofpage\vbox{\unvbox\normalpagebox}% \ifinheritcolumns \ifr@ggedbottom % vreemd @@ -1038,6 +1055,8 @@ %D \type{\box4} garantees a more robust check when skips are %D used. +\def\multicolumnsbalancemax{250} % 100 is too small when floats are involved + \def\balancedmulticolumnsout {\bgroup \setmulticolumnsout @@ -1083,49 +1102,58 @@ \dimen2=\onepoint % RUBISH \dimen2=\spacingfactor\dimen2 \fi - \loop - \advance\count255 \plusone - \global\setbox\restofpage\copy0\relax - \splitfirstcolumn from \box\restofpage to \dimen0 - \dohandlemidcolumns - {\splitcurrentcolumn from \box\restofpage to \dimen0}% - \splitlastcolumn from \box\restofpage to \dimen0 - \setbox2\vbox{\unvcopy\firstcolumnbox}% - \dimen4\zeropoint - \dohandleallcolumns - {\setbox4\vbox - {\unvcopy\currentcolumnbox - %rather new, test this on pdftex-z.tex - \unpenalty\unskip\unpenalty\unskip}% maybe better in main splitter - %\writestatus{balance}{\the\currentcolumnbox: \the\ht4}% - \dimen6\ht4 - \ifdim\dimen6>\dimen4 \dimen4=\dimen6 \fi}% - \advance\dimen4 -.0005pt % get rid of accurracy problem, pretty new - \ifnum\count255>100 - \donefalse - \else\ifdim\dimen4>\ht2 - \donetrue - \else - \donefalse - \fi\fi - \ifdone - \advance\dimen0 \dimen2\relax - \repeat + \doloop + {\advance\count255 \plusone + \global\setbox\restofpage\copy0\relax + \splitfirstcolumn from \box\restofpage to \dimen0 + \dohandlemidcolumns + {\splitcurrentcolumn from \box\restofpage to \dimen0}% + \splitlastcolumn from \box\restofpage to \dimen0 + \setbox2\vbox{\unvcopy\firstcolumnbox}% + \dimen4\zeropoint + \dohandleallcolumns + {\setbox4\vbox + {\unvcopy\currentcolumnbox + %rather new, test this on pdftex-z.tex + \unpenalty\unskip\unpenalty\unskip}% maybe better in main splitter + %\writestatus{balance}{\the\currentcolumnbox: \the\ht4}% +% \dimen6\ht4 \ifdim\dimen6>\dimen4 \dimen4=\dimen6 \fi}% + \ifdim\ht4>\dimen4 \dimen4=\ht4 \fi}% + \advance\dimen4 -.0005pt % get rid of accurracy problem, pretty new + \ifnum\count255>\multicolumnsbalancemax\relax + \exitloop + \else\ifdim\dimen4>\ht2 + \advance\dimen0 \dimen2\relax + \else + \exitloop + \fi\fi}% \dohandleallcolumns {\global\setbox\currentcolumnbox\vbox{\unvcopy\currentcolumnbox}}% NIEUW - \ifnum\count255>100\relax + \ifnum\count255>\multicolumnsbalancemax\relax \showmessage\m!columns7\empty \else \showmessage\m!columns8{\the\count255\space}% \fi \egroup \ifinheritcolumns - \dimen0\ht\firstcolumnbox - \dimen2\ht\firstcolumnbox + % We cannot assume that the first column is the tallest, if + % only because we may have an aborted balance (one line in the + % first column and a graphic in the second one). + % + % \dimen0\ht\firstcolumnbox + % \dimen2\ht\firstcolumnbox + % + \dimen0=\zeropoint + \dohandleallcolumns + {\ifdim\ht\currentcolumnbox>\dimen0 + \dimen0=\ht\currentcolumnbox + \fi}% + \dimen2\dimen0 + % so far \advance\dimen2 -\openlineheight \dohandleallcolumns {\dimen4\ht\currentcolumnbox - \dimen6=10\openlineheight + \dimen6=10\openlineheight % funny value \global\setbox\currentcolumnbox\vbox to \dimen0 {\unvbox\currentcolumnbox \ifdim\dimen4>\dimen6 @@ -1175,7 +1203,11 @@ \global\output{\balancingerror}% \b@selinebottomtrue % forces depth in separation rule \flushcolumnedpage +\ifdim\pagetotal>\textheight + \eject % new +\else \allowbreak +\fi \egroup} %D The multicolumn mechanism is incorporated in a \CONTEXT\ @@ -1238,8 +1270,7 @@ \let\flushcolumnfloats\noflushcolumnfloats} \def\setlocalcolumnfloats - {\everypar - {\flushnotes\flushcolumnfloat\flushmargincontents\checkindentation}% + {\everypar{\flushnotes\flushcolumnfloat\flushmargincontents\checkindentation}% \let\flushcolumnfloat\doflushcolumnfloat %\let\doroomfloat\docolumnroomfloat \let\docheckiffloatfits\docolumnroomfloat @@ -1490,6 +1521,24 @@ \egroup \fi} +%D The next macro can be used to flush floats in the current +%D stream. No width checking is (yet) done. + +\def\insertcolumnfloats + {\doloop + {\ifsomefloatwaiting + \bgroup + \forgetall + % no check for width + \dogetfloat + \blank[\@@bkspacebefore] + \snaptogrid\vbox{\copy\floatbox} + \blank[\@@bkspaceafter] + \egroup + \else + \exitloop + \fi}} + %D This were the multi||column routines. They can and need to %D be improved but at the moment their behaviour is acceptable. %D @@ -1632,9 +1681,9 @@ {\goodbreak} \installcolumnbreakhandler {MUL} \v!yes - {\par % todo: since + {\par % todo: since {\testrulewidth\zeropoint\ruledvskip\textheight} % we misuse a - \penalty-200 % side effect + \penalty-200 % side effect \vskip-\textheight \prevdepth-\thousandpoint} % signals top of column to \blank @@ -1645,14 +1694,14 @@ \c!direction=\v!right, \c!rule=\v!off, \c!tolerance=\v!tolerant, - \c!distance=1.5\korpsgrootte, % influenced by switching + \c!distance=1.5\bodyfontsize, % influenced by switching \c!height=, \c!balance=\v!yes, \c!align=\v!text, \c!blank={\v!line,\v!fixed}, \c!option=, \c!rulethickness=\linewidth, - \c!offset=.5\korpsgrootte] + \c!offset=.5\bodyfontsize] %D Undocumented and still under development. @@ -1663,7 +1712,7 @@ {\bgroup \nopenalties \getparameters[\??kl] - [\c!width=\hsize,\c!distance=1.5\korpsgrootte,% + [\c!width=\hsize,\c!distance=1.5\bodyfontsize,% \c!n=2,\c!lines=0,#1]% \let\rigidcolumnlines\@@kllines \setrigidcolumnhsize\@@klwidth\@@kldistance\@@kln diff --git a/tex/context/base/page-set.tex b/tex/context/base/page-set.tex index 3aa1b0dc5..5e295b82d 100644 --- a/tex/context/base/page-set.tex +++ b/tex/context/base/page-set.tex @@ -52,6 +52,9 @@ \def\@otr@{otr} +\let\OTRSETflushsidefloats \forgetsidefloats % \relax +\let\OTRSETsynchronizesidefloats\forgetsidefloats % \relax + \def\OTRSETgridcell #1#2{\csname \@otr@:\number#1:\number#2\endcsname} \def\OTRSETgetgridcell#1#2{\box\csname \@otr@:\number#1:\number#2\endcsname} \def\OTRSETsetgridcell#1#2{\global\setbox\csname\@otr@:\number#1:\number#2\endcsname} diff --git a/tex/context/base/page-sid.tex b/tex/context/base/page-sid.tex index 882464fc3..e67f3e50f 100644 --- a/tex/context/base/page-sid.tex +++ b/tex/context/base/page-sid.tex @@ -864,4 +864,22 @@ \kern-\!!counta\baselineskip \penalty\zerocount } +% We need to hook it into the other otr's. This code will move. + +\let\OTRONEflushsidefloats \flushsidefloats +\let\OTRONEsynchronizesidefloats\synchronizesidefloats + +% page-set +% +% \let\OTRSETflushsidefloats \forgetsidefloats +% \let\OTRSETsynchronizesidefloats\forgetsidefloats + +% page-mul +% +% \let\OTRMULflushsidefloats \forgetsidefloats +% \let\OTRMULsynchronizesidefloats\forgetsidefloats + +\def\synchronizesidefloats{\OTRcommand\synchronizesidefloats} +\def\flushsidefloats {\OTRcommand\flushsidefloats} + \protect \endinput diff --git a/tex/context/base/prop-lay.tex b/tex/context/base/prop-lay.tex index 749848fa8..a5f43dc13 100644 --- a/tex/context/base/prop-lay.tex +++ b/tex/context/base/prop-lay.tex @@ -36,11 +36,15 @@ {0}% type (1=frozen) {\printviewerlayer}}% 1=printable +\let\currentlayerproperty\empty + \def\startlayerproperty - {\dostartviewerlayer\currentproperty} + {\let\currentlayerproperty\currentproperty + \dostartviewerlayer\currentproperty} \def\stoplayerproperty - {\dostopviewerlayer} + {\dostopviewerlayer + \let\currentlayerproperty\previousproperty} \setglobalsystemreference \rt!exec \v!HideLayer {hidelayer} \setglobalsystemreference \rt!exec \v!VideLayer {videlayer} diff --git a/tex/context/base/regi-utf.tex b/tex/context/base/regi-utf.tex index 96f1a4061..fe7b0b958 100644 --- a/tex/context/base/regi-utf.tex +++ b/tex/context/base/regi-utf.tex @@ -17,6 +17,18 @@ %D instead of a active token handler because here we don't want %D the \type {{}}. We only support this in \ETEX. +% ÀÁÂÃÄÅàáâãäå +% ÆÇæç +% ÈÉÊËèéêë +% ÌÍÎÏÞìíîïþ +% Ðð +% Ññ +% ÒÓÔÕÖòóôõö +% Øø +% ÙÚÛÜùúû +% Ýýÿ +% ß + \beginTEX \expandafter \endinput \endTEX diff --git a/tex/context/base/spec-dpx.tex b/tex/context/base/spec-dpx.tex index 161cee303..3c0d45897 100644 --- a/tex/context/base/spec-dpx.tex +++ b/tex/context/base/spec-dpx.tex @@ -412,13 +412,13 @@ \scratchdimen#4\edef\height{\the\scratchdimen\space}% \setbox\nextbox\vbox {\special{pdf:bxobj @#1::#2 width \width height \height}% - % we need to compensate for the box offset (ugly, sigh) - \scratchdimen\nextboxht - \advance\scratchdimen\nextboxdp - \advance\scratchdimen-#4\relax - \nextboxdp\zeropoint - \nextboxht\zeropoint - \hbox to #3{\hss\lower.5\scratchdimen\box\nextbox\hss}% + % we need to compensate for the box offset (ugly, sigh) + \scratchdimen\nextboxht + \advance\scratchdimen\nextboxdp + \advance\scratchdimen-#4\relax + \nextboxdp\zeropoint + \nextboxht\zeropoint + \hbox to #3{\hss\lower.5\scratchdimen\box\nextbox\hss}% \ifx\currentPDFresources\empty \else \special{pdf:put @resources <<\currentPDFresources\the\pdfpageresources>>}% @@ -753,9 +753,9 @@ {\vbox to \zeropoint {\vss \hbox to \zeropoint - {\special{pdf:btrans matrix #1 #2 #3 #4 #5 #6}% + {\special{pdf:btrans matrix #1 #2 #3 #4 #5 #6}% \rlap{\special{pdf:image width 1bp height 1bp (#7)}} - \special{pdf:etrans}\hss}}} + \special{pdf:etrans}\hss}}} {\message{[unknown figure #7]}}} %D 5. Modified codes from \type{supp-pdf} @@ -809,7 +809,7 @@ \vss\hbox to #4\scaledpoint{\hss\box\scratchbox\hss}\vss \else %\vss\box\scratchbox - \vss\hbox to #4\scaledpoint{\box\scratchbox\hss} + \vss\hbox to #4\scaledpoint{\box\scratchbox\hss}% \fi\fi}}% \box\scratchbox \elabelgroup} diff --git a/tex/context/base/spec-tpd.tex b/tex/context/base/spec-tpd.tex index f6c7097bc..a69cfff09 100644 --- a/tex/context/base/spec-tpd.tex +++ b/tex/context/base/spec-tpd.tex @@ -97,7 +97,7 @@ %D bitmap fonts (when asked for). \ifx\pdfimageresolution\undefined \newcount\pdfimageresolution \fi -\ifx\pdfimageresolution\undefined \newcount\pdfpkresolution \fi +\ifx\pdfpkresolution \undefined \newcount\pdfpkresolution \fi \pdfimageresolution=300 \pdfpkresolution =600 diff --git a/tex/context/base/supp-mis.tex b/tex/context/base/supp-mis.tex index 7ad444695..9ab55142f 100644 --- a/tex/context/base/supp-mis.tex +++ b/tex/context/base/supp-mis.tex @@ -23,12 +23,14 @@ \def\StartLatexHack {\edef\StopLatexHack {\catcode`\noexpand/=\the\catcode`/ + \catcode`\noexpand-=\the\catcode`- \catcode`\noexpand:=\the\catcode`: \catcode`\noexpand;=\the\catcode`; \catcode`\noexpand"=\the\catcode`" \catcode`\noexpand<=\the\catcode`< \catcode`\noexpand>=\the\catcode`>}% - \catcode`/=12 \catcode`:=12 \catcode`;=12 + \catcode`/=12 \catcode`-=12 + \catcode`:=12 \catcode`;=12 \catcode`"=12 \catcode`<=12 \catcode`>=12 } %D This hack is needed especially for \LATEX\ users who use diff --git a/tex/context/base/supp-mpe.tex b/tex/context/base/supp-mpe.tex index 23a2410ab..04ee0a813 100644 --- a/tex/context/base/supp-mpe.tex +++ b/tex/context/base/supp-mpe.tex @@ -175,7 +175,8 @@ \fi} \def\handleMPspecialscommentx #1 % version 2 - {\doifelse{#1}{10000}{\settrue\manyMPspecials}{\setfalse\manyMPspecials}% local +% {\doifelsedoifelse{#1}{10000}{\settrue\manyMPspecials}{\setfalse\manyMPspecials}% local + {\ifnum10000=0#1\relax\settrue\manyMPspecials\else\setfalse\manyMPspecials\fi \handleMPsequence} % one can say (in meta-ini): diff --git a/tex/context/base/supp-vis.tex b/tex/context/base/supp-vis.tex index 95cee5176..efe47751f 100644 --- a/tex/context/base/supp-vis.tex +++ b/tex/context/base/supp-vis.tex @@ -1869,10 +1869,10 @@ %D %D Beware, it's a macro not a \DIMENSION. -\ifx\korpsgrootte\undefined +\ifx\bodyfontsize\undefined \edef\defaulttestrulewidth{\the\testrulewidth} \else - \def\defaulttestrulewidth{.02\korpsgrootte} % still dutch + \def\defaulttestrulewidth{.02\bodyfontsize} % still dutch \fi \def\showmakeup diff --git a/tex/context/base/unic-037.tex b/tex/context/base/unic-037.tex new file mode 100644 index 000000000..87f655a68 --- /dev/null +++ b/tex/context/base/unic-037.tex @@ -0,0 +1,278 @@ +%D \module +%D [ file=unic-037, +%D version=2006.02.13, +%D title=\CONTEXT\ \UNICODE\ Macros, +%D subtitle=Vector 37, +%D author=Luigi Scarso, +%D date=\currentdate, +%D copyright={PRAGMA}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\unprotect + +\startunicodevector 37 + \expandafter\strippedcsname + \ifcase\numexpr #1+1\relax\or %% + \UnicodeLightHorizontal\or + \UnicodeHeavyHorizontal\or + \UnicodeLightVertical\or + \UnicodeHeavyVertical\or + \UnicodeLightTripleDashHorizontal\or + \UnicodeHeavyTripleDashHorizontal\or + \UnicodeLightTripleDashVertical\or + \UnicodeHeavyTripleDashVertical\or + \UnicodeLightQuadrupleDashHorizontal\or + \UnicodeHeavyQuadrupleDashHorizontal\or + \UnicodeLightQuadrupleDashVertical\or + \UnicodeHeavyQuadrupleDashVertical\or + \UnicodeLightDownAndRight\or + \UnicodeDownLightAndRightHeavy\or + \UnicodeDownHeavyAndRightLight\or + \UnicodeHeavyDownAndRight\or + \UnicodeLightDownAndLeft\or + \UnicodeDownLightAndLeftHeavy\or + \UnicodeDownHeavyAndLeftLight\or + \UnicodeHeavyDownAndLeft\or + \UnicodeLightUpAndRight\or + \UnicodeUpLightAndRightHeavy\or + \UnicodeUpHeavyAndRightLight\or + \UnicodeHeavyUpAndRight\or + \UnicodeLightUpAndLeft\or + \UnicodeUpLightAndLeftHeavy\or + \UnicodeUpHeavyAndLeftLight\or + \UnicodeHeavyUpAndLeft\or + \UnicodeLightVerticalAndRight\or + \UnicodeVerticalLightAndRightHeavy\or + \UnicodeUpHeavyAndRightDownLight\or + \UnicodeDownHeavyAndRightUpLight\or + \UnicodeVerticalHeavyAndRightLight\or + \UnicodeDownLightAndRightUpHeavy\or + \UnicodeUpLightAndRightDownHeavy\or + \UnicodeHeavyVerticalAndRight\or + \UnicodeLightVerticalAndLeft\or + \UnicodeVerticalLightAndLeftHeavy\or + \UnicodeUpHeavyAndLeftDownLight\or + \UnicodeDownHeavyAndLeftUpLight\or + \UnicodeVerticalHeavyAndLeftLight\or + \UnicodeDownLightAndLeftUpHeavy\or + \UnicodeUpLightAndLeftDownHeavy\or + \UnicodeHeavyVerticalAndLeft\or + \UnicodeLightDownAndHorizontal\or + \UnicodeLeftHeavyAndRightDownLight\or + \UnicodeRightHeavyAndLeftDownLight\or + \UnicodeDownLightAndHorizontalHeavy\or + \UnicodeDownHeavyAndHorizontalLight\or + \UnicodeRightLightAndLeftDownHeavy\or + \UnicodeLeftLightAndRightDownHeavy\or + \UnicodeHeavyDownAndHorizontal\or + \UnicodeLightUpAndHorizontal\or + \UnicodeLeftHeavyAndRightUpLight\or + \UnicodeRightHeavyAndLeftUpLight\or + \UnicodeUpLightAndHorizontalHeavy\or + \UnicodeUpHeavyAndHorizontalLight\or + \UnicodeRightLightAndLeftUpHeavy\or + \UnicodeLeftLightAndRightUpHeavy\or + \UnicodeHeavyUpAndHorizontal\or + \UnicodeLightVerticalAndHorizontal\or + \UnicodeLeftHeavyAndRightVerticalLight\or + \UnicodeRightHeavyAndLeftVerticalLight\or + \UnicodeVerticalLightAndHorizontalHeavy\or + \UnicodeUpHeavyAndDownHorizontalLight\or + \UnicodeDownHeavyAndUpHorizontalLight\or + \UnicodeVerticalHeavyAndHorizontalLight\or + \UnicodeLeftUpHeavyAndRightDownLight\or + \UnicodeRightUpHeavyAndLeftDownLight\or + \UnicodeLeftDownHeavyAndRightUpLight\or + \UnicodeRightDownHeavyAndLeftUpLight\or + \UnicodeDownLightAndUpHorizontalHeavy\or + \UnicodeUpLightAndDownHorizontalHeavy\or + \UnicodeRightLightAndLeftVerticalHeavy\or + \UnicodeLeftLightAndRightVerticalHeavy\or + \UnicodeHeavyVerticalAndHorizontal\or + \UnicodeLightDoubleDashHorizontal\or + \UnicodeHeavyDoubleDashHorizontal\or + \UnicodeLightDoubleDashVertical\or + \UnicodeHeavyDoubleDashVertical\or + \UnicodeDoubleHorizontal\or + \UnicodeDoubleVertical\or + \UnicodeDownSingleAndRightDouble\or + \UnicodeDownDoubleAndRightSingle\or + \UnicodeDoubleDownAndRight\or + \UnicodeDownSingleAndLeftDouble\or + \UnicodeDownDoubleAndLeftSingle\or + \UnicodeDoubleDownAndLeft\or + \UnicodeUpSingleAndRightDouble\or + \UnicodeUpDoubleAndRightSingle\or + \UnicodeDoubleUpAndRight\or + \UnicodeUpSingleAndLeftDouble\or + \UnicodeUpDoubleAndLeftSingle\or + \UnicodeDoubleUpAndLeft\or + \UnicodeVerticalSingleAndRightDouble\or + \UnicodeVerticalDoubleAndRightSingle\or + \UnicodeDoubleVerticalAndRight\or + \UnicodeVerticalSingleAndLeftDouble\or + \UnicodeVerticalDoubleAndLeftSingle\or + \UnicodeDoubleVerticalAndLeft\or + \UnicodeDownSingleAndHorizontalDouble\or + \UnicodeDownDoubleAndHorizontalSingle\or + \UnicodeDoubleDownAndHorizontal\or + \UnicodeUpSingleAndHorizontalDouble\or + \UnicodeUpDoubleAndHorizontalSingle\or + \UnicodeDoubleUpAndHorizontal\or + \UnicodeVerticalSingleAndHorizontalDouble\or + \UnicodeVerticalDoubleAndHorizontalSingle\or + \UnicodeDoubleVerticalAndHorizontal\or + \UnicodeLightArcDownAndRight\or + \UnicodeLightArcDownAndLeft\or + \UnicodeLightArcUpAndLeft\or + \UnicodeLightArcUpAndRight\or + \UnicodeLightDiagonalUpperRightToLowerLeft\or + \UnicodeLightDiagonalUpperLeftToLowerRight\or + \UnicodeLightDiagonalCross\or + \UnicodeLightLeft\or + \UnicodeLightUp\or + \UnicodeLightRight\or + \UnicodeLightDown\or + \UnicodeHeavyLeft\or + \UnicodeHeavyUp\or + \UnicodeHeavyRight\or + \UnicodeHeavyDown\or + \UnicodeLightLeftAndHeavyRight\or + \UnicodeLightUpAndHeavyDown\or + \UnicodeHeavyLeftAndLightRight\or + \UnicodeHeavyUpAndLightDown\or + \UnicodeUpperHalfBlock\or + \UnicodeLowerOneEighthBlock\or + \UnicodeLowerOneQuarterBlock\or + \UnicodeLowerThreeEighthsBlock\or + \UnicodeLowerHalfBlock\or + \UnicodeLowerFiveEighthsBlock\or + \UnicodeLowerThreeQuartersBlock\or + \UnicodeLowerSevenEighthsBlock\or + \UnicodeFullBlock\or + \UnicodeLeftSevenEighthsBlock\or + \UnicodeLeftThreeQuartersBlock\or + \UnicodeLeftFiveEighthsBlock\or + \UnicodeLeftHalfBlock\or + \UnicodeLeftThreeEighthsBlock\or + \UnicodeLeftOneQuarterBlock\or + \UnicodeLeftOneEighthBlock\or + \UnicodeRightHalfBlock\or + \UnicodeLightShade\or + \UnicodeMediumShade\or + \UnicodeDarkShade\or + \UnicodeUpperOneEighthBlock\or + \UnicodeRightOneEighthBlock\or + \UnicodeQuadrantLowerLeft\or + \UnicodeQuadrantLowerRight\or + \UnicodeQuadrantUpperLeft\or + \UnicodeQuadrantUpperLeftAndLowerLeftAndLowerRight\or + \UnicodeQuadrantUpperLeftAndLowerRight\or + \UnicodeQuadrantUpperLeftAndUpperRightandLowerLeft\or + \UnicodeQuadrantUpperLeftAndUpperRightAndLowerRight\or + \UnicodeQuadrantUpperRight\or + \UnicodeQuadrantUpperRightAndLowerLeft\or + \UnicodeQuadrantUpperRightAndLowerLeftAndLowerRight\or + \UnicodeBlackSquare\or + \UnicodeWhiteSquare\or + \UnicodeWhiteSquareWithRoundedCorners\or + \UnicodeWhiteSquareContainingBlackSmallSquare\or + \UnicodeSquareWithHorizontalFill\or + \UnicodeSquareWithVerticalFill\or + \UnicodeSquareWithOrthogonalCrosshatchFill\or + \UnicodeSquareWithUpperLeftToLowerRightFill\or + \UnicodeSquareWithUpperRightToLowerLeftFill\or + \UnicodeSquareWithDiagonalCrosshatchFill\or + \UnicodeBlackSmallSquare\or + \UnicodeWhiteSmallSquare\or + \UnicodeBlackRectangle\or + \UnicodeWhiteRectangle\or + \UnicodeBlackVerticalRectangle\or + \UnicodeWhiteVerticalRectangle\or + \UnicodeBlackParallelogram\or + \UnicodeWhiteParallelogram\or + \UnicodeBlackUpPointingTriangle\or + \UnicodeWhiteUpPointingTriangle\or + \UnicodeBlackUpPointingSmallTriangle\or + \UnicodeWhiteUpPointingSmallTriangle\or + \UnicodeBlackRightPointingTriangle\or + \UnicodeWhiteRightPointingTriangle\or + \UnicodeBlackRightPointingSmallTriangle\or + \UnicodeWhiteRightPointingSmallTriangle\or + \UnicodeBlackRightPointingPointer\or + \UnicodeWhiteRightPointingPointer\or + \UnicodeBlackDownPointingTriangle\or + \UnicodeWhiteDownPointingTriangle\or + \UnicodeBlackDownPointingSmallTriangle\or + \UnicodeWhiteDownPointingSmallTriangle\or + \UnicodeBlackLeftPointingTriangle\or + \UnicodeWhiteLeftPointingTriangle\or + \UnicodeBlackLeftPointingSmallTriangle\or + \UnicodeWhiteLeftPointingSmallTriangle\or + \UnicodeBlackLeftPointingPointer\or + \UnicodeWhiteLeftPointingPointer\or + \UnicodeBlackDiamond\or + \UnicodeWhiteDiamond\or + \UnicodeWhiteDiamondContainingBlackSmallDiamond\or + \UnicodeFisheye\or + \UnicodeLozenge\or + \UnicodeWhiteCircle\or + \UnicodeDottedCircle\or + \UnicodeCircleWithVerticalFill\or + \UnicodeBullseye\or + \UnicodeBlackCircle\or + \UnicodeCircleWithLeftHalfBlack\or + \UnicodeCircleWithRightHalfBlack\or + \UnicodeCircleWithLowerHalfBlack\or + \UnicodeCircleWithUpperHalfBlack\or + \UnicodeCircleWithUpperRightQuadrantBlack\or + \UnicodeCircleWithAllButUpperLeftQuadrantBlack\or + \UnicodeLeftHalfBlackCircle\or + \UnicodeRightHalfBlackCircle\or + \UnicodeInverseBullet\or + \UnicodeInverseWhiteCircle\or + \UnicodeUpperHalfInverseWhiteCircle\or + \UnicodeLowerHalfInverseWhiteCircle\or + \UnicodeUpperLeftQuadrantCircularArc\or + \UnicodeUpperRightQuadrantCircularArc\or + \UnicodeLowerRightQuadrantCircularArc\or + \UnicodeLowerLeftQuadrantCircularArc\or + \UnicodeUpperHalfCircle\or + \UnicodeLowerHalfCircle\or + \UnicodeBlackLowerRightTriangle\or + \UnicodeBlackLowerLeftTriangle\or + \UnicodeBlackUpperLeftTriangle\or + \UnicodeBlackUpperRightTriangle\or + \UnicodeWhiteBullet\or + \UnicodeSquareWithLeftHalfBlack\or + \UnicodeSquareWithRightHalfBlack\or + \UnicodeSquareWithUpperLeftDiagonalHalfBlack\or + \UnicodeSquareWithLowerRightDiagonalHalfBlack\or + \UnicodeWhiteSquareWithVerticalBisectingLine\or + \UnicodeWhiteUpPointingTriangleWithDot\or + \UnicodeUpPointingTriangleWithLeftHalfBlack\or + \UnicodeUpPointingTriangleWithRightHalfBlack\or + \UnicodeLargeCircle\or + \UnicodeWhiteSquareWithUpperLeftQuadrant\or + \UnicodeWhiteSquareWithLowerLeftQuadrant\or + \UnicodeWhiteSquareWithLowerRightQuadrant\or + \UnicodeWhiteSquareWithUpperRightQuadrant\or + \UnicodeWhiteCircleWithUpperLeftQuadrant\or + \UnicodeWhiteCircleWithLowerLeftQuadrant\or + \UnicodeWhiteCircleWithLowerRightQuadrant\or + \UnicodeWhiteCircleWithUpperRightQuadrant\or + \UnicodeUpperLeftTriangle\or + \UnicodeUpperRightTriangle\or + \UnicodeLowerLeftTriangle\or + \UnicodeWhiteMediumSquare\or + \UnicodeBlackMediumSquare\or + \UnicodeWhiteMediumSmallSquare\or + \UnicodeBlackMediumSmallSquare\or + \UnicodeLowerRightTriangle\else% + \unknownchar\fi +\stopunicodevector +\protect \endinput + diff --git a/tex/context/base/verb-ini.tex b/tex/context/base/verb-ini.tex index 97bbf02c4..e7d239e2a 100644 --- a/tex/context/base/verb-ini.tex +++ b/tex/context/base/verb-ini.tex @@ -2040,8 +2040,42 @@ % \initializeverbatimline % \copyverbatimline} +% \def\doprocessdisplayverbatim#1#2% +% {\par +% \bgroup +% \escapechar-1 +% \xdef\verbatimname{\string#2}% +% \egroup +% \ifcase#1% +% \let\endofdisplayverbatim\relax +% \else +% \def\endofdisplayverbatim{\csname\verbatimname\endcsname}% +% \fi +% \bgroup +% \parindent\zeropoint +% \ifdim\lastskip<\parskip +% \removelastskip +% \vskip\parskip +% \fi +% \parskip\zeropoint +% \processingverbatimtrue +% \ifcase#1% +% \convertargument#2\to\endofverbatimcommand +% \else +% \expandafter\let\csname\verbatimname\endcsname=\relax +% \expandafter\convertargument\csname\verbatimname\endcsname +% \to\endofverbatimcommand +% \fi +% \verbatimfont +% \setverbatimspaceskip +% \global\linepartrue % needed for paragraph numbering +% \setupcopyverbatim +% \initializeverbatimline +% \copyverbatimline} + \def\doprocessdisplayverbatim#1#2% {\par + \beginofverbatimlines \bgroup \escapechar-1 \xdef\verbatimname{\string#2}% @@ -2049,7 +2083,7 @@ \ifcase#1% \let\endofdisplayverbatim\relax \else - \def\endofdisplayverbatim{\csname\verbatimname\endcsname}% + \def\endofdisplayverbatim{\endofverbatimlines\csname\verbatimname\endcsname}% \fi \bgroup \parindent\zeropoint diff --git a/tex/context/interface/cont-cz.xml b/tex/context/interface/cont-cz.xml index cbc1bb632..a35cf0d6e 100644 --- a/tex/context/interface/cont-cz.xml +++ b/tex/context/interface/cont-cz.xml @@ -869,6 +869,11 @@ + + + + + @@ -4225,6 +4230,7 @@ + @@ -7526,7 +7532,7 @@ - + @@ -7572,7 +7578,7 @@ - + @@ -7657,7 +7663,7 @@ - + @@ -8391,6 +8397,12 @@ + + + + + + @@ -8909,6 +8921,11 @@ + + + + + diff --git a/tex/context/interface/cont-de.xml b/tex/context/interface/cont-de.xml index 6d916958c..0e3be31e7 100644 --- a/tex/context/interface/cont-de.xml +++ b/tex/context/interface/cont-de.xml @@ -869,6 +869,11 @@ + + + + + @@ -4225,6 +4230,7 @@ + @@ -7526,7 +7532,7 @@ - + @@ -7572,7 +7578,7 @@ - + @@ -7657,7 +7663,7 @@ - + @@ -8391,6 +8397,12 @@ + + + + + + @@ -8909,6 +8921,11 @@ + + + + + diff --git a/tex/context/interface/cont-en.xml b/tex/context/interface/cont-en.xml index 1e12929ec..f32882eae 100644 --- a/tex/context/interface/cont-en.xml +++ b/tex/context/interface/cont-en.xml @@ -869,6 +869,11 @@ + + + + + @@ -4225,6 +4230,7 @@ + @@ -8391,6 +8397,12 @@ + + + + + + @@ -8909,6 +8921,11 @@ + + + + + diff --git a/tex/context/interface/cont-fr.xml b/tex/context/interface/cont-fr.xml index 84e9172a2..0b420db07 100644 --- a/tex/context/interface/cont-fr.xml +++ b/tex/context/interface/cont-fr.xml @@ -869,6 +869,11 @@ + + + + + @@ -4225,6 +4230,7 @@ + @@ -7526,7 +7532,7 @@ - + @@ -7572,7 +7578,7 @@ - + @@ -7657,7 +7663,7 @@ - + @@ -8391,6 +8397,12 @@ + + + + + + @@ -8909,6 +8921,11 @@ + + + + + diff --git a/tex/context/interface/cont-it.xml b/tex/context/interface/cont-it.xml index 631277f54..b746a404b 100644 --- a/tex/context/interface/cont-it.xml +++ b/tex/context/interface/cont-it.xml @@ -869,6 +869,11 @@ + + + + + @@ -4225,6 +4230,7 @@ + @@ -7526,7 +7532,7 @@ - + @@ -7572,7 +7578,7 @@ - + @@ -7657,7 +7663,7 @@ - + @@ -8391,6 +8397,12 @@ + + + + + + @@ -8909,6 +8921,11 @@ + + + + + diff --git a/tex/context/interface/cont-nl.xml b/tex/context/interface/cont-nl.xml index cc7e7d77e..a93db0812 100644 --- a/tex/context/interface/cont-nl.xml +++ b/tex/context/interface/cont-nl.xml @@ -869,6 +869,11 @@ + + + + + @@ -4225,6 +4230,7 @@ + @@ -7526,7 +7532,7 @@ - + @@ -7572,7 +7578,7 @@ - + @@ -7657,7 +7663,7 @@ - + @@ -8391,6 +8397,12 @@ + + + + + + @@ -8909,6 +8921,11 @@ + + + + + diff --git a/tex/context/interface/cont-ro.xml b/tex/context/interface/cont-ro.xml index c8f30aa32..9499180e0 100644 --- a/tex/context/interface/cont-ro.xml +++ b/tex/context/interface/cont-ro.xml @@ -869,6 +869,11 @@ + + + + + @@ -4225,6 +4230,7 @@ + @@ -7526,7 +7532,7 @@ - + @@ -7572,7 +7578,7 @@ - + @@ -7657,7 +7663,7 @@ - + @@ -8391,6 +8397,12 @@ + + + + + + @@ -8909,6 +8921,11 @@ + + + + + diff --git a/tex/context/interface/keys-cz.xml b/tex/context/interface/keys-cz.xml index b0910bb68..0f1558aa8 100644 --- a/tex/context/interface/keys-cz.xml +++ b/tex/context/interface/keys-cz.xml @@ -1,6 +1,6 @@ - + @@ -526,6 +526,7 @@ + diff --git a/tex/context/interface/keys-de.xml b/tex/context/interface/keys-de.xml index e3bff4c65..c65c54bdd 100644 --- a/tex/context/interface/keys-de.xml +++ b/tex/context/interface/keys-de.xml @@ -1,6 +1,6 @@ - + @@ -526,6 +526,7 @@ + diff --git a/tex/context/interface/keys-en.xml b/tex/context/interface/keys-en.xml index 6d953803a..1495b40f1 100644 --- a/tex/context/interface/keys-en.xml +++ b/tex/context/interface/keys-en.xml @@ -1,6 +1,6 @@ - + @@ -526,6 +526,7 @@ + diff --git a/tex/context/interface/keys-fr.xml b/tex/context/interface/keys-fr.xml index 7db7ff4aa..b5d6c4a0c 100644 --- a/tex/context/interface/keys-fr.xml +++ b/tex/context/interface/keys-fr.xml @@ -1,6 +1,6 @@ - + @@ -526,6 +526,7 @@ + diff --git a/tex/context/interface/keys-it.xml b/tex/context/interface/keys-it.xml index f2ed3e237..f5f5acf57 100644 --- a/tex/context/interface/keys-it.xml +++ b/tex/context/interface/keys-it.xml @@ -1,6 +1,6 @@ - + @@ -526,6 +526,7 @@ + diff --git a/tex/context/interface/keys-nl.xml b/tex/context/interface/keys-nl.xml index c9ef3ea26..4e4c83d23 100644 --- a/tex/context/interface/keys-nl.xml +++ b/tex/context/interface/keys-nl.xml @@ -1,6 +1,6 @@ - + @@ -526,6 +526,7 @@ + diff --git a/tex/context/interface/keys-ro.xml b/tex/context/interface/keys-ro.xml index ca6535388..44e208cdf 100644 --- a/tex/context/interface/keys-ro.xml +++ b/tex/context/interface/keys-ro.xml @@ -1,6 +1,6 @@ - + @@ -526,6 +526,7 @@ + -- cgit v1.2.3