THE FINAL COUNTDOWN
[ipdf/sam.git] / chapters / Background / Standards / Interpreted.tex
1 Adobe's PostScript Language Reference Manual defines a turing complete language for producing graphics output on an abstract ``output device''\cite{plrm}. A PostScript document is treated as a procedural program; an interpreter executes instructions in the order they are written by the programmer. In particular, the document specifies the locations of enclosed curves using B\'{e}zier splines (Section \ref{Bezier Splines}), whilst text is treated as vector fonts described in Section \ref{Fonts}.
2 \begin{comment}
3 Each symbol is pushed onto a stack as it is read. Special symbols called ``operators'' can act upon this stack and/or the output device. An internal ``graphics state'' stack can be constructed to store styling information (such as colour, line thickness, the current cursor position). It is possible for the language to define new operators.\end{comment} 
4 PostScript was and is still widely used in printing of documents onto paper; many printers execute postscript directly, and newer formats including PDF must still be converted into PostScript by printer drivers\cite{pdfref17, cheng2002portable}.
5
6
7
8 Adobe's Portable Document Format (PDF) is currently used almost universally for sharing documents; the ability to export or print to PDF can be found in most graphical document editors and even some plain text editors\cite{cheng2002portable}. 
9
10 Hayes describes PDF as ``... essentially 'flattened' PostScript; it’s what’s left when you remove all the procedures and loops in a program, replacing them with sequences of simple drawing commands.''\cite{hayes2012pixels}. Consultation of the PDF 1.7 standard shows that this statement does not a give a complete picture --- despite being based on the Adobe PostScript model of a document as a series of ``pages'' to be printed by executing sequential instructions, from version 1.5 the PDF standard began to borrow some ideas from the Document Object Model. 
11
12 For example, interactive elements such as forms may be included as XHTML objects and styled using CSS. ``Actions'' are objects used to modify the data structure dynamically. In particular, it is possible to include Javascript Actions. Adobe defines the API for Javascript actions seperately to the PDF standard\cite{js_3d_pdf}. There is some evidence in the literature of attempts to exploit these features, with mixed success\cite{barnes2013embedding, hayes2012pixels}.
13
14 Figure \ref{PS} shows a vector image and one possible way to express this image in PostScript. 
15
16 There are some limitations in PostScript's model. As mentioned in Section \ref{Compositing}, since PostScript predates Porter and Duff Compositing, there is no concept of transparency. In fact, using tools to convert between the SVG image in Figure \ref{SVG} and PostScript will simply rasterise the image and embed the rastered image in PostScript\footnote{For Figure \ref{SVG} converted using the Inkscape SVG editor: \url{http://szmoore.net/ipdf/figures/shape-svg-converted-to.ps}} 
17
18 Another limitation of PostScript is that the model of a document as a static page, convenient for printers which literally produce static pages, is unable to include interactive or dynamic elements. Dynamic PostScript attempted to fix this problem, but ``never caught on''\cite{hayes2012pixels}.
19
20 %\begin{comment}
21 \begin{figure}[H]
22 \begin{minipage}[t]{0.65\textwidth}
23 \begin{minted}{postscript}
24 %!PS-Adobe-3.0 EPSF-3.0
25 %%BoundingBox: 0 -1 85 150
26 % These lines are comments to aid in human understanding
27 % Define an operator to produce a rectangular path
28 /re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
29       0 exch rlineto 0 rlineto closepath } bind def
30 % Operator to produce the path for the first rectangle
31 /re1 { 24.613 133.001 24 -120 re } bind def
32 % Operator to produce the path for the second rectangle
33 /re2 { 10.215 45.001 48 -16 re } bind def
34 % Operator which will produce the curved path
35 /curve { 46.215 1.001 moveto 
36         46.215 1.001 91.812 11.399 71.812 35.399 curveto 
37         51.812 59.399  29.414 33.802 51.812 59.399 curveto 
38         74.215 85.001 93.414 45.802 74.215 85.001 curveto 
39         55.016 125.001 61.414 49.802 46.215 75.399 curveto 
40         31.016 101.001 56.613 126.598 56.613 126.598 curveto 
41         56.613 126.598 88.613 166.598 56.613 137.802 curveto 
42         24.613 109.001 -18.586 83.399 9.414 50.598 curveto 
43         37.414 17.802 45.414 1.001 45.414 1.001 curveto 
44 closepath } bind def
45 % Set stroke properties
46 0.8 setlinewidth 0 setlinecap 0 setlinejoin [] 
47         0.0 setdash 4 setmiterlimit 
48 % Draw the straight line
49 0 setgray 0.613 149.001 moveto 83.812 0.2 lineto fill 
50 % Fill and outline the first rectangular path
51 0 0 1 setrgbcolor re1 fill 0 setgray re1 stroke
52 % Fill and outline the curved shape
53 1 0 0 setrgbcolor curve fill 0 setgray curve stroke
54 % Fill and outline the second rectangle 
55 0 1 0 setrgbcolor re2 fill 0 setgray re2 stroke
56 showpage
57 \end{minted}
58 \end{minipage}
59 \begin{minipage}[t]{0.3\textwidth}
60         \begin{figure}[H]
61         \centering
62         \includegraphics[width=1\textwidth]{figures/shape.eps}
63         \end{figure}
64 \end{minipage}
65         \caption{Vector image and a possible PostScript representation}\label{PS}
66 \end{figure}
67
68
69 \subsubsection{{\TeX}, METAFONT and {\LaTeX}}
70
71 Knuth's ``The {\TeX}book''\cite{knuth1984texbook} and ``The METAFONT book''\cite{knuth1983metafont} define two complementary programming languages for typesetting documents. Wheras PostScript may be considered an interpreted language, in that it can be produced in a human readable form which is also readable by an interpreter, {\TeX} is a compiled language; a program parses human readable {\TeX} to produce a machine readable format DVI (``DeVice Independent''). A DVI interpreter might be thought of as a virtual ``Display Processor'' for drawing vector graphics directly (as defined in the earlier editions of ``Computer Graphics''\cite{computergraphics2}). 
72
73 DVI itself is not a widely used format for sharing documents. However, an system based upon {\TeX} called {\LaTeX} which includes libraries for advanced typesetting and programs that ultimately produce PDF output is particularly popular for producing technical reports and papers\footnote{The site \url{http://tex.stackexchange.com} (accessed 2014-05-22) is devoted to {\TeX} and {\LaTeX}} --- this report itself has been produced using the CTAN {\LaTeX} packages\footnote{The complete {\TeX} source code to produce this document can be found at \url{http://szmoore.net/ipdf/sam/}}.
74 %\end{comment}

UCC git Repository :: git.ucc.asn.au