Patch title: Release 93 bulk changes
Abstract:
File: /graphic/vfilter/postscript.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/unsafe.pli"
module "/pliant/language/context.pli"
module "/pliant/language/stream.pli"
module "/pliant/language/stream/openmode.pli"
module "/pliant/admin/file.pli"
module "/pliant/admin/execute.pli"
module "/pliant/graphic/image/prototype.pli"
module "/pliant/graphic/vfilter/prototype.pli"
module "/pliant/graphic/draw/prototype.pli"
module "/pliant/graphic/vector/font.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/math/curve.pli"
module "/pliant/math/curve/mode.pli"
module "/pliant/math/transform.pli"
module "/pliant/math/matrix.pli"
module "/pliant/language/type/text/str32.pli"
module "/pliant/graphic/misc/bytes.pli"
module "/pliant/util/encoding/html.pli"
module "/pliant/language/stream/pipe.pli"



module "/pliant/language/unsafe.pli"
module "/pliant/language/context.pli"
module "/pliant/language/stream.pli"
module "/pliant/language/stream/openmode.pli"
module "/pliant/admin/file.pli"
module "/pliant/admin/execute.pli"
module "/pliant/graphic/image/prototype.pli"
module "/pliant/graphic/vfilter/prototype.pli"
module "/pliant/graphic/draw/prototype.pli"
module "/pliant/graphic/vector/font.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/math/curve.pli"
module "/pliant/math/curve/mode.pli"
module "/pliant/math/transform.pli"
module "/pliant/math/matrix.pli"
module "/pliant/language/type/text/str32.pli"
module "/pliant/graphic/misc/bytes.pli"
module "/pliant/util/encoding/html.pli"
module "/pliant/language/stream/pipe.pli"



method f image_prototype options -> proto
  oarg DrawWriteFilterPs f ; arg Str options ; arg ImagePrototype proto
  proto := f proto



#-----------------------------------------------------------



method f load stream options draw -> status
  oarg_rw DrawReadFilterPs f ; arg_rw Stream stream ; arg St
  var Str pdf_temp := file_temporary
  stream_pipe (var Str gs_in_pipe) (var Str gs_out_pipe)
  stream_pipe (var Str gmt_in_pipe) (var Str gmt_out_pipe)
  var Sem gs_sem
  gs_sem request
  thread
    part convert "convert PostScript to PDF"
#-----------------------------------------------------------



method f load stream options draw -> status
  oarg_rw DrawReadFilterPs f ; arg_rw Stream stream ; arg St
  var Str pdf_temp := file_temporary
  stream_pipe (var Str gs_in_pipe) (var Str gs_out_pipe)
  stream_pipe (var Str gmt_in_pipe) (var Str gmt_out_pipe)
  var Sem gs_sem
  gs_sem request
  thread
    part convert "convert PostScript to PDF"
      execute "gs -q -sDEVICE=pdfwrite -dCompressPages=false
      execute "gs -q -sDEVICE=pdfwrite -dCompressPages=false -dEncodeColorImages=false -dEncodeGrayImages=false -dEncodeMonoImages=false -dSubsetFonts=false -sOutputFile="+file_os_name:pdf_temp+" -dNOPAUSE -dSAFER - -c quit" input gs_in_pipe
    share:gs_sem release
  var Str gamutname
  var Sem gmt_sem
  gmt_sem request
  thread
    part discover "discover PostScript gamut"
      share gamutname := "pantone:"
      var CBool newpage := false
      (var Stream ps) open gmt_in_pipe in+safe+anyeol
      while not ps:atend
        var Str l := ps readline ; ps recover
        if (l 0 1)="%"
          if (l parse "%%" "BeginBinary" ":" (var Int count)
            while count>0 and not ps:atend
              ps read_available (var Address adr) (var Int s
              count -= size
          eif (l parse "%%" "Page" ":" any)
            newpage := true
          eif (l parse "%%" "PlateColor" ":" any:(var Str co
            gamutname += (shunt (gamutname gamutname:len-1)<
            newpage := false
      if gamutname<>"pantone:"
        gamutname += "+transparencies"
      else
        gamutname := ""
    share:gmt_sem release
  (var Stream gs_out) open gs_out_pipe out+safe
  (var Stream gmt_out) open gmt_out_pipe out+safe
  while not stream:atend and gs_out=success and gmt_out=succ
    stream read_available (var Address adr) (var Int size)
    gs_out raw_write adr size
    gmt_out raw_write adr size
  gs_out close ; gmt_out close
  gs_sem request ; gs_sem release
  gmt_sem request ; gmt_sem release
    share:gs_sem release
  var Str gamutname
  var Sem gmt_sem
  gmt_sem request
  thread
    part discover "discover PostScript gamut"
      share gamutname := "pantone:"
      var CBool newpage := false
      (var Stream ps) open gmt_in_pipe in+safe+anyeol
      while not ps:atend
        var Str l := ps readline ; ps recover
        if (l 0 1)="%"
          if (l parse "%%" "BeginBinary" ":" (var Int count)
            while count>0 and not ps:atend
              ps read_available (var Address adr) (var Int s
              count -= size
          eif (l parse "%%" "Page" ":" any)
            newpage := true
          eif (l parse "%%" "PlateColor" ":" any:(var Str co
            gamutname += (shunt (gamutname gamutname:len-1)<
            newpage := false
      if gamutname<>"pantone:"
        gamutname += "+transparencies"
      else
        gamutname := ""
    share:gmt_sem release
  (var Stream gs_out) open gs_out_pipe out+safe
  (var Stream gmt_out) open gmt_out_pipe out+safe
  while not stream:atend and gs_out=success and gmt_out=succ
    stream read_available (var Address adr) (var Int size)
    gs_out raw_write adr size
    gmt_out raw_write adr size
  gs_out close ; gmt_out close
  gs_sem request ; gs_sem release
  gmt_sem request ; gmt_sem release
  (var Stream pdf_stream) open pdf_temp in+safe
  var Link:Stream pdf_stream :> new Stream
  pdf_stream open pdf_temp in+safe
  var Link:DrawReadFilter pdf_filter :> draw_read_filter ".p
  var Link:DrawReadFilter pdf_filter :> draw_read_filter ".p
  status := pdf_filter load pdf_stream options+(shunt gamutn
  status := pdf_filter load pdf_stream options+" share_fonts_with_same_name"+(shunt gamutname<>"" " separated gamut "+string:gamutname " gamut [dq]rgb[dq]") draw
  pdf_stream close
  file_delete pdf_temp


  pdf_stream close
  file_delete pdf_temp