格式化Postscript ErrorHandler

时间:2014-08-27 16:23:00

标签: postscript

有人可以帮助我将以下postscript代码格式化为可读格式吗?我需要修改逻辑以在所有条件下返回错误响应,并且永远不会打印错误页面。

%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0
/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false
setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype
ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch
def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0
rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def
/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def
typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72
def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp
exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def
/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype
{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}
readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop
(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def
/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )
tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup
xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint
tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck
{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])
tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup
rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}
forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier
/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin
$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0
ne{grestoreall}if errorname(VMerror)ne{showpage}if initgraphics courier setfont
lmargin 720 moveto errorname(VMerror)eq{userdict/ehsave known{clear userdict
/ehsave get restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}{
(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt
$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==}
repeat}if}ifelse systemdict/showpage get exec(%%[ Error: )print errorname
=print(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end
end}dup 0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking
where{pop/setpacking where{pop oldpack setpacking}if}if
%%EndResource

2 个答案:

答案 0 :(得分:2)

这是Windows PostScript打印机驱动程序序言的一部分,它依赖于序言的其他部分。 “格式化”它对你没有帮助,你需要有效地拆解它才能改变它。

但是,设备中的默认错误处理程序“可能”不会打印错误页面,因此处理它的最简单方法就是批量删除它。

答案 1 :(得分:1)

正如肯所说,所有这些代码都是打印错误页面。所以只需删除它。但是,对于解开代码墙的任务,有一些选择。

indent在添加空格和支撑相关的缩进方面做得不错。它需要C代码,因此会引发很多错误。但它确实将事情分解为更易读的东西(如果忽略或删除缩进:错误)。

错误地在斜杠和以下名称之间添加一个空格,因此也会自动更正。

/ currentpacking where
{
  pop / oldpack currentpacking def / setpacking where
  {
  pop false setpacking}
if}
if /$brkpage 64 dict def $brkpage begin / prnt
{
  dup type / stringtype ne
  {
    = string
indent: Standard input:3: Error:Stmt nesting error.
indent: Standard input:5: Error:Stmt nesting error.
      cvs} if dup length 6 mul / tx exch def / ty 10 def currentpoint /
        toy exch def /
        tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0
        rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}
        bind def / nl
      {
      currentpoint exch pop lmargin exch moveto 0 - 10 rmoveto}
    def
      /==
      {
      /cp 0 def typeprint nl}
    def / typeprint
    {
    dup type exec}
    readonly def / lmargin 72 def / rmargin 72 def / tprint
    {
      dup length cp add rmargin gt
      {
      nl / cp 0 def}
    if dup length cp add / cp exch def prnt}
    readonly def / cvsprint
    {
      = string
indent: Standard input:9: Error:Stmt nesting error.
        cvs tprint ()tprint} readonly def / integertype
        {
        cvsprint}
      readonly def / realtype
      {
      cvsprint}
      readonly def / booleantype
      {
      cvsprint}
      readonly def / operatortype
      {
      (--) tprint = string cvs tprint (--)tprint}
      readonly def / marktype
      {
      pop (-mark -) tprint}
      readonly def / dicttype
      {
      pop (-dictionary -) tprint}
      readonly def / nulltype
      {
      pop (-null -) tprint}
      readonly def / filetype
      {
      pop (-filestream -) tprint}
      readonly def / savetype
      {
      pop (-savelevel -) tprint}
      readonly def / fonttype
      {
      pop (-fontid -) tprint}
      readonly def / nametype
      {
        dup xcheck not
        {
        (/)tprint}
      if cvsprint}
      readonly def / stringtype
      {
        dup rcheck
        {
          (\()tprint tprint (\))
indent: Standard input:17: Error:Stmt nesting error.
            tprint}
            {
            pop (-string -) tprint}
        ifelse}
        readonly def / arraytype
        {
          dup rcheck
          {
            dup xcheck
            {
              (
                {
                )tprint
                {
                typeprint}
              forall (}
            ) tprint}
            {
              ([)tprint
               {
               typeprint}
               forall (])tprint}
          ifelse}
          {
          pop (-array -) tprint}
        ifelse}
        readonly def / packedarraytype
        {
          dup rcheck
          {
            dup xcheck
            {
              (
                {
                )tprint
                {
                typeprint}
              forall (}
            ) tprint}
            {
              ([)tprint
               {
               typeprint}
               forall (])tprint}
          ifelse}
          {
          pop (-packedarray -) tprint}
        ifelse}
        readonly def / courier
          / Courier findfont 10 scalefont def end errordict / handleerror
        {
          systemdict begin $error begin $brkpage begin newerror
          {
            /newerror false store vmstatus pop pop 0 ne
            {
            grestoreall}
            if errorname (VMerror)
                ne
              {
              showpage}
            if initgraphics courier setfont
              lmargin 720 moveto errorname (VMerror)
                eq
              {
                userdict / ehsave known
                {
                clear userdict / ehsave get restore 2 vmreclaim}
              if vmstatus exch pop exch pop PrtVMMsg}
            {
              (ERROR:)
                prnt errorname prnt nl (OFFENDING COMMAND:) prnt /
                command load prnt $error / ostack known
              {
                nl nl (STACK:) prnt nl nl $error / ostack get aload length
                {
                ==}
              repeat}
            if}
          ifelse systemdict / showpage get exec (%%[Error:)print errorname = print (; OffendingCommand:)print / command load = print (] %%)
indent: Standard input:30: Error:Stmt nesting error.
              = flush} if end
indent: Standard input:31: Error:Stmt nesting error.
                end
                  end} dup 0 systemdict put dup 4 $brkpage put bind readonly
                  put / currentpacking where
                {
                  pop / setpacking where
                  {
                  pop oldpack setpacking}
                if}
            if
indent: Standard input:34: Error:Unexpected end of file