2014-08-27 3 views
-4

Может ли кто-нибудь помочь мне отформатировать следующий код постскриптума в читаемом формате? Мне нужно изменить логику, чтобы вернуть ответ об ошибке во всех условиях и никогда не печатать страницу с ошибкой.Формат Postscript ErrorHandler

%%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 
+1

В любом случае это выглядит лучше! – JuliandotNut

+0

Я думаю, что этот вопрос несправедливо закрыт. Использование инструментов для правильного отступа кода абсолютно по теме для stackoverflow. «Слишком много возможных ответов» просто не относится к этому вопросу, поскольку доступный пул к инструментам очень крошечный, и я не вижу проблемы с включением всех их здесь. Я призываю всех, кто считает, что существует слишком много вариантов, чтобы перечислить 10 из них. – hlovdal

+0

Теперь для некоторых действительно впечатляющих нечитаемых postscript, посмотрите http://web.mit.edu/PostScript/obfuscated-1993/Tiny_RayTracing.ps. – hlovdal

ответ

2

Это часть пролога драйвера принтера Windows PostScript, и он опирается на другие части пролога. «Форматирование» не поможет вам, вам нужно будет эффективно разобрать его, чтобы изменить его.

Однако обработчик ошибок по умолчанию на вашем устройстве «вероятно» не печатает страницу с ошибкой, поэтому самый простой способ справиться с ней - просто удалить ее оптом.

+0

+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