diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/context/ruby/base/tex.rb | 53 | ||||
| -rw-r--r-- | scripts/context/ruby/rlxtools.rb | 73 | ||||
| -rw-r--r-- | scripts/context/ruby/texexec.rb | 7 | 
3 files changed, 108 insertions, 25 deletions
| diff --git a/scripts/context/ruby/base/tex.rb b/scripts/context/ruby/base/tex.rb index 4335a9618..61701e501 100644 --- a/scripts/context/ruby/base/tex.rb +++ b/scripts/context/ruby/base/tex.rb @@ -88,15 +88,17 @@ class TEX      ['pdfetex','pdftex','pdf','pdftex','standard'] .each do |b| @@backends[b]   = 'pdftex'    end      ['dvipdfmx','dvipdfm','dpx','dpm']             .each do |b| @@backends[b]   = 'dvipdfmx'  end -    ['xetex','xtx']                                .each do |b| @@backends[b]   = 'dvipdfmx'  end +    ['xetex','xtx']                                .each do |b| @@backends[b]   = 'xetex'     end      ['dvips','ps']                                 .each do |b| @@backends[b]   = 'dvips'     end      ['dvipsone']                                   .each do |b| @@backends[b]   = 'dvipsone'  end      ['acrobat','adobe','distiller']                .each do |b| @@backends[b]   = 'acrobat'   end +    ['xdv','xdv2pdf']                              .each do |b| @@backends[b]   = 'xdv2pdf'   end      ['tex','standard']                             .each do |b| @@mappaths[b]   = 'dvips'     end      ['pdftex','pdfetex']                           .each do |b| @@mappaths[b]   = 'pdftex'    end -    ['aleph','omega']                              .each do |b| @@mappaths[b]   = 'dvipdfm'   end -    ['xetex']                                      .each do |b| @@mappaths[b]   = 'dvipdfm'   end +    ['aleph','omega','xetex']                      .each do |b| @@mappaths[b]   = 'dvipdfm'   end +    ['dvipdfm', 'dvipdfmx', 'xdvipdfmx']           .each do |b| @@mappaths[b]   = 'dvipdfm'   end +    ['xdv','xdv2pdf']                              .each do |b| @@mappaths[b]   = 'dvips'     end      # todo norwegian (no) @@ -133,7 +135,8 @@ class TEX      ['cont-en','cont-nl','cont-de','cont-it',       'cont-fr','cont-cz','cont-ro','cont-uk']      .each do |f| @@texprocstr[f] = "\\emergencyend"  end -    # @@runoptions['xetex'] = ['--no-pdf'] # from now on we assume (x)dvipdfmx to be used +  # @@runoptions['xetex'] = ['--output-driver \\\"-d 4 -V 5\\\"'] # we need the pos pass +    @@runoptions['xetex'] = ['--no-pdf'] # from now on we assume (x)dvipdfmx to be used      @@booleanvars = [          'batchmode', 'nonstopmode', 'fast', 'fastdisabled', 'silentmode', 'final', @@ -244,6 +247,12 @@ class TEX          report("runtime: #{runtime}")      end +    def runcommand(something) +        command = [something].flatten.join(' ') +        report("running: #{command}") if getvariable('verbose') +        system(command) +    end +      def inspect(name=nil)          if ! name || name.empty? then              name = [booleanvars,stringvars,standardvars,knownvars] @@ -507,9 +516,7 @@ class TEX                  end                  texformats.each do |texformat|                      report("generating tex format #{texformat}") -                    command = [quoted(texengine),prognameflag(progname),iniflag,tcxflag,prefixed(texformat,texengine),texmakeextras(texformat)].join(' ') -                    report(command) if getvariable('verbose') -                    system(command) +                    runcommand([quoted(texengine),prognameflag(progname),iniflag,tcxflag,prefixed(texformat,texengine),texmakeextras(texformat)])                  end              else                  report("unable to make format due to lack of permissions") @@ -527,10 +534,8 @@ class TEX              if FileTest.writable?(mpsformatpath) then                  mpsformats.each do |mpsformat|                      report("generating mps format #{mpsformat}") -                    # command = [quoted(mpsengine),prognameflag(progname),iniflag,tcxflag,mpsformat,mpsmakeextras(mpsformat)].join(' ') -                    command = [quoted(mpsengine),iniflag,tcxflag,mpsformat,mpsmakeextras(mpsformat)].join(' ') -                    report(command) if getvariable('verbose') -                    system(command) +                  # runcommand([quoted(mpsengine),prognameflag(progname),iniflag,tcxflag,mpsformat,mpsmakeextras(mpsformat)]) +                    runcommand([quoted(mpsengine),iniflag,tcxflag,mpsformat,mpsmakeextras(mpsformat)])                  end              else                  report("unable to make format due to lack of permissions") @@ -1183,9 +1188,7 @@ class TEX          report("progname: #{progname}")          if texengine && texformat && progname then              fixbackendvars(@@mappaths[texengine]) -            command = [quoted(texengine),prognameflag(progname),formatflag(texengine,texformat),tcxflag,runoptions(texengine),filename,texprocextras(texformat)].join(' ') -            report(command) if getvariable('verbose') -            system(command) +            runcommand([quoted(texengine),prognameflag(progname),formatflag(texengine,texformat),tcxflag,runoptions(texengine),filename,texprocextras(texformat)])              true          else              false @@ -1199,10 +1202,8 @@ class TEX          progname  = validprogname(getvariable('progname'))          if mpsengine && mpsformat && progname then              ENV["MPXCOMMAND"] = "0" unless mpx -            # command = [quoted(mpsengine),prognameflag(progname),formatflag(mpsengine,mpsformat),tcxflag,runoptions(mpsengine),filename,mpsprocextras(mpsformat)].join(' ') -            command = [quoted(mpsengine),formatflag(mpsengine,mpsformat),tcxflag,runoptions(mpsengine),mpname,mpsprocextras(mpsformat)].join(' ') -            report(command) if getvariable('verbose') -            system(command) +          # runcommand([quoted(mpsengine),prognameflag(progname),formatflag(mpsengine,mpsformat),tcxflag,runoptions(mpsengine),filename,mpsprocextras(mpsformat)]) +            runcommand([quoted(mpsengine),formatflag(mpsengine,mpsformat),tcxflag,runoptions(mpsengine),mpname,mpsprocextras(mpsformat)])              true          else              false @@ -1311,15 +1312,21 @@ class TEX              case validbackend(getvariable('backend'))                  when 'dvipdfmx' then                      fixbackendvars('dvipdfm') -                    system("dvipdfmx -d 4 #{File.unsuffixed(rawname)}") +                    runcommand("dvipdfmx -d 4 -V 5 #{File.unsuffixed(rawname)}")                  when 'xetex'    then                      # xetex now runs its own backend                      xdvfile = File.suffixed(rawname,'xdv')                      if FileTest.file?(xdvfile) then -                        fixbackendvars('xetex') -                        system("xdvipdfmx #{xdvfile}") +                        fixbackendvars('dvipdfm') +                        runcommand("xdvipdfmx -d 4 -V 5 #{xdvfile}") +                    end +                when 'xdv2pdf' then +                    xdvfile = File.suffixed(rawname,'xdv') +                    if FileTest.file?(xdvfile) then +                        fixbackendvars('xdv2pdf') +                        runcommand("xdv2pdf #{xdvfile}")                      end -                when 'dvips'    then +                when 'dvips' then                      fixbackendvars('dvips')                      mapfiles = ''                      begin @@ -1331,7 +1338,7 @@ class TEX                      rescue                          mapfiles = ''                      end -                    system("dvips #{mapfiles} #{File.unsuffixed(rawname)}") +                    runcommand("dvips #{mapfiles} #{File.unsuffixed(rawname)}")                  when 'pdftex'   then                      # no need for postprocessing                  else diff --git a/scripts/context/ruby/rlxtools.rb b/scripts/context/ruby/rlxtools.rb index 6a796114f..a7af5b691 100644 --- a/scripts/context/ruby/rlxtools.rb +++ b/scripts/context/ruby/rlxtools.rb @@ -247,10 +247,83 @@ class Commands  end +class Commands + +    include CommandBase + +    def identify +        @commandline.arguments.each do |filename| +            if state = do_identify(filename) then +                begin +                    File.open(filename+'.rli','w') do |f| +                        f << state +                    end +                rescue +                    report("error in identifying #{filename}") +                else +                    report("#{filename} is identified") +                end +            end +        end +    end + +    private + +    def do_identify(filename) +        begin +            str = nil +            if FileTest.file?(filename) then +                result = `identify -format \"x=%x,y=%y,w=%w,h=%h,b=%b\" #{filename}`.chomp.split(',') +                tags = Hash.new +                result.each do |r| +                    if rr = r.split("=") then +                        tags[rr[0]] = rr[1] +                    end +                end +                size   = (tags['b']||0).to_i +                width  = unified(tags['w']||0,tags['x']||'1') +                height = unified(tags['h']||0,tags['y']||'1') +                if size > 0 then +                    str = '' +                    str << "<?xml version='1.0' standalone='yes'?>\n" +                    str << "<rl:identify name='#{File.basename(filename)}'>\n" +                    str << "  <rl:size>#{size}</rl:size>\n" +                    str << "  <rl:path>#{File.dirname(filename).sub(/\\/o,'/')}</rl:path>\n" +                    str << "  <rl:width>#{width}</rl:width>\n" +                    str << "  <rl:height>#{height}</rl:height>\n" +                    str << "</rl:identify>\n" +                end +            else +                str = nil +            end +        rescue +            str = nil +        end +        return str +    end + +    def unified(dim,res) +        case res +            when /([\d\.]+)\s*PixelsPerInch/io then +                sprintf("%.4fin",dim.to_f/$1.to_f) +            when /([\d\.]+)\s*PixelsPerCentimeter/io then +                sprintf("%.4fcm",dim.to_f/$1.to_f) +            when /([\d\.]+)\s*PixelsPerMillimeter/io then +                sprintf("%.4fmm",dim.to_f/$1.to_f) +            when /([\d\.]+)\s*PixelsPerPoint/io then +                sprintf("%.4fbp",dim.to_f/$1.to_f) +            else +                sprintf("%.4fbp",dim.to_f) +        end +    end + +end +  logger      = Logger.new(banner.shift)  commandline = CommandLine.new  commandline.registeraction('manipulate', ' [--test] manipulatorfile resourselog') +commandline.registeraction('identify', 'filename')  commandline.registeraction('help')  commandline.registeraction('version') diff --git a/scripts/context/ruby/texexec.rb b/scripts/context/ruby/texexec.rb index 2751cef63..06e74812d 100644 --- a/scripts/context/ruby/texexec.rb +++ b/scripts/context/ruby/texexec.rb @@ -501,15 +501,17 @@ class Commands          elsif @commandline.oneof('dvipdfmx','dvipdfm','dpx','dpm') then              job.setvariable('backend','dvipdfmx')          elsif @commandline.oneof('xetex','xtx') then -            job.setvariable('backend','dvipdfmx') +            job.setvariable('backend','xetex')          elsif @commandline.oneof('aleph') then              job.setvariable('backend','dvipdfmx')          elsif @commandline.oneof('dvips','ps') then              job.setvariable('backend','dvips') +        elsif @commandline.oneof('xdv') then +            job.setvariable('backend','xdv')          else              case job.getvariable('texengine')                  when 'pdfetex' then job.setvariable('backend','pdftex') -                when 'xetex'   then job.setvariable('backend','dvipdfmx') +                when 'xetex'   then job.setvariable('backend','xetex')                  when 'aleph'   then job.setvariable('backend','dvipdfmx')              else                  job.setvariable('backend','standard') @@ -655,6 +657,7 @@ commandline.registerflag('ps')  commandline.registerflag('xetex')  commandline.registerflag('xtx') +commandline.registerflag('xdv')  commandline.registerflag('aleph') | 
