%D \module %D [ file=spec-def, %D version=1996.01.25, %D title=\CONTEXT\ Special Macros, %D subtitle=Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. %D This module used to be integrated in \type {spec-ini}, %D but testing optimization is more convenient this way. \writestatus{loading}{ConTeXt Special Macros / Definitions} \unprotect %D Ok, messy, but we need this because we load drivers before %D references. \newif\ifcollectreferenceactions %D The following libraries are defined. Two postscript %D drivers are supported, as well as two mechanisms for %D interactive texts. %D %D \startlinecorrection %D \starttable[|l|l|l|l|l|] %D \HL %D \NC \bf file \NC %D \bf name \NC %D \bf calls \NC %D \bf support \NC %D \bf program / driver \NC\SR %D \HL %D \NC \tttf spec-tex \NC %D \tttf tex \NC %D \NC %D Generic \TEX\ (\DVI) \NC %D (default) \NC\FR %D \NC \tttf spec-tpd \NC %D \tttf \PDF \NC %D \NC %D Han The Thanh \NC %D (pdftex) \NC\MR %D \NC \tttf spec-ps \NC %D \tttf postscript \NC %D \NC %D Adobe PostScript \NC %D (default) \NC\MR %D \NC \tttf spec-tr \NC %D \tttf rokicki \NC %D \tttf postscript \NC %D Thomas Rokicki \NC %D (dvips) \NC\MR %D \NC \tttf spec-yy \NC %D \tttf yandy \NC %D \tttf postscript \NC %D YandY \NC %D (dvipsone, dviwindo) \NC\MR %D \NC \tttf spec-pdf \NC %D \tttf pdf \NC %D \NC %D Adobe PDF \NC %D (Acrobat) \NC\MR %D \NC \tttf spec-win \NC %D \tttf dviwindo \NC %D YandY \NC %D (dviwindo) \NC\MR %D \NC \tttf spec-htm \NC %D \tttf html \NC %D \NC %D HTML V 2.0 \NC %D (dvips) \NC\LR %D \HL %D \stoptable %D \stoplinecorrection %D \macros %D {dostartgraymode,dostopgraymode, %D dostartrgbcolormode,dostartcmykcolormode,dostartgraycolormode,dostopcolormode} %D %D Switching to and from color can be done in two ways: %D %D \startitemize[packed,n] %D \item insert driver specific commands %D \item pass instructions to the output device %D \stopitemize %D %D The first approach is more general and lays the %D responsibility at the driver side. Probably due to the fact %D that \TEX\ does not directly support color, we have been %D confronted for the last few years with changing special %D definitions. The need for support depends on how a macro %D package handles colored text that crosses the page boundary. %D Again, there are two approaches. %D %D \startitemize[packed,n] %D \item let \TEX\ do the job %D \item let the driver handle things %D \stopitemize %D %D The first approach is as driver independant as possible and %D can easily be accomplished by using \TEX's mark mechanism. %D In \CONTEXT\ we follow this approach. More and more, drivers %D are starting to support color, including stacking them. %D %D Colors as well as grayscales can be represented in scales %D from~0 to~1. When drivers use values in the range 0..255, %D this value has to be adapted in the translation process. %D Technically it's possible to get a grayscale from combining %D colors. In the \cap{RGB} color system, a color with Red, %D Green and Blue components of 0.80 show the same gray as a %D Gray Scale specified 0.80. The \cap{CMYK} color system %D supports a Black component apart from Cyan, Magenta and %D Yellow. %D %D Depending on the target format, color support differs from %D gray support. PostScript for example offers different %D operators for setting gray and color. This is because %D printing something using three colors is someting else than %D printing with just black. %D %D In \CONTEXT\ we have implemented a color subsystem that %D supports the use of well defined colors that, when printed %D in black and white, still can be distinguished. This %D approach enables us to serve both printed and electronic %D versions, using colored text and illustrations. More on the %D fundamentals of this topic can be found in the \cap{MAPS} of %D the Dutch User Group, 14 (95.1). %D %D To satisfy all those needs, we define four specials which %D supply enough information for drivers to act upon. We %D could have used more general commands with the keywords %D 'rgb' and 'gray', but because these specials are used often, %D we prefer the more direct and shorter alternative. %D %D We start with the installation of color and grayscale %D specials. The values are in the range 0..1 (e.g. 0.25). %D %D \starttyping %D \dostartgraymode {gray} ... \dostopgraymode %D \dostartrgbcolormode {red} {green} {blue} ... \dostopcolormode %D \dostartcmykcolormode {cyan} {magenta} {yellow} {black} ... \dostopcolormode %D \dostartgraycolormode {gray} ... \dostopcolormode %D \stoptyping %D %D Because we can expect conflicts between drivers, we %D implement them as category \type{or}. In previous versions %D of \DVIPSONE\ the use of their color||specials did not %D interfere with the PostScript ones, but recent versions do. \installspecial [\dostartgraymode] [or] [1] \installspecial [\dostopgraymode] [or] [0] \installspecial [\dostartrgbcolormode] [or] [3] \installspecial [\dostartcmykcolormode] [or] [4] \installspecial [\dostartgraycolormode] [or] [1] \installspecial [\dostopcolormode] [or] [0] %D New and experimental: \installspecial [\dostartspotcolormode] [or] [2] \installspecial [\doregisterrgbspotcolor] [or] [7] \installspecial [\doregistercmykspotcolor] [or] [8] \installspecial [\doregistergrayspotcolor] [or] [5] \installspecial [\doregisterrgbindexcolor] [or] [7] \installspecial [\doregistercmykindexcolor] [or] [8] \installspecial [\doregistergrayindexcolor] [or] [5] \installspecial [\doregisterspotcolorname] [or] [2] \installspecial [\dostartnonecolormode] [or] [0] \installspecial [\doregisternonecolor] [or] [0] %D For some drivers, the stop special is of no use and can %D simply call the start one with zero arguments. %D \macros %D {dogetfiguresize,doinsertfile,doinsertMPfile} %D %D Probably the most problematic special is the following %D one. Because we want to be able to support different %D schemes, we pass a lot of data to it. %D %D The support of inserting files (like illustrations) comes in %D many flavors. Some drivers use scales, some take dimensions. %D Some need offsets and others act on stored characteristics. %D They need one thing in common: a filename. Although separate %D specials for different formats sometimes are more clear, we %D decided to combine them all in one: %D %D \starttyping %D \doinsertfile {type,method} {file,label} %D {xscale} {yscale} {x} {y} {w} {h} %D {options} %D \stoptyping %D %D The scale is given percents, the other values are base %D points. %D %D Per 2006 we have simplified this model. The amount of drivers %D is not growing and all support scaling. We pass variables via %D Driver specific macros. %D %D \starttyping %D \doinsertfile %D \stoptyping %D %D The special is implemented as \type{or}. Because \DVIPSONE\ %D understands them all, a chain of alternatives would generate %D multiple occurrences of the same illustration. %D %D When option 1 is passed, the viewers is asked to present a %D preview, like the first frame of a movie. \installspecial [\dogetfiguresize][or] [0] % now a special \installspecial [\doinsertfile] [or] [0] % [9] \installspecial [\doinsertMPfile] [or] [1] % speed up %D No start||stop construction is needed here, because there in %D no further interference of \TEX. All dimensions are output %D in points and scales as a number, where 100 equal 100\%. (We %D used to pass scaled points). %D \macros %D {doinsertsoundtrack} %D %D Sounds are (for the moment) just files with %D associated options. %D %D \starttyping %D \doinsertsoundtrack {file} {label} {options} %D \stoptyping \installspecial [\doinsertsoundtrack] [or] [3] %D \macros %D {dogetnofinsertpages} %D %D Some file formats support more than one page, like \PDF, %D and for special applications, one may want to have access %D to the total number of pages. %D %D \starttyping %D \dogetnofinsertpages{filename} %D \stoptyping %D %D The number is also available after the insert is placed, %D since inclusion may take place immediate when an insert is %D called upon. \def\nofinsertpages{1} % one of the few 'talk backs' \installspecial [\dogetnofinsertpages] [or] [1] %D \macros %D {dostartrotation, %D dostoprotation} %D %D We support rotation with the special: %D %D \starttyping %D \dostartrotation {angle} ... \dostoprotation %D \stoptyping %D %D For the moment these specials are installed as %D category \type{or}. \installspecial [\dostartrotation] [or] [1] \installspecial [\dostoprotation] [or] [0] %D \macros %D {dostartscaling, %D dostopscaling} %D %D Scaling is also supported: %D %D \starttyping %D \dostartscaling {x} {y} ... \dostopscaling %D \stoptyping %D %D Like the previous one, these specials are of category %D \type{or}. \installspecial [\dostartscaling] [or] [2] \installspecial [\dostopscaling] [or] [0] %D \macros %D {dostartmirroring, %D dostopmirroring} %D %D And indeed, mirroring is there too: %D %D \starttyping %D \dostartmirroring {x} {y} ... \dostopmirroring %D \stoptyping %D %D Again these specials are installed as category \type{or}. \installspecial [\dostartmirroring] [or] [0] \installspecial [\dostopmirroring] [or] [0] %D \macros %D {dostartnegative, %D dostopnegative} %D %D When producing output for an image setter, negating the %D page comes into view. Here are the tools: \installspecial [\dostartnegative] [or] [0] \installspecial [\dostopnegative] [or] [0] %D \macros %D {dostartoverprint, %D dostopoverprint} %D %D Rudimentary overprint (knockout) control is implemented %D using: \installspecial [\dostartoverprint] [or] [0] \installspecial [\dostopoverprint] [or] [0] %D The following two specials are used in for instance \type %D {\vadjust}'d margin material inside colored paragraphs. \installspecial [\dostartgraphicgroup] [or] [0] \installspecial [\dostopgraphicgroup ] [or] [0] %D \macros %D {doselectfirstpaperbin, %D doselectsecondpaperbin} %D %D Here are some very printer||specific ones. No further %D comment. \installspecial [\doselectfirstpaperbin] [or] [0] \installspecial [\doselectsecondpaperbin] [or] [0] %D \macros %D {doovalbox} %D %D When we look at the implementation, this is a complicated %D one. There are seven arguments. %D %D \starttyping %D \doovalbox {w} {h} {d} {linewidth} {radius} {stroke} {fill} {variant} %D \stoptyping %D %D This command has to return a \type{\vbox} which can be used %D to lay over another one (with text). The radius is in %D degrees, the stroke and fill are~\type{1} (true) of~\type{0} %D (false). \installspecial [\doovalbox] [or] [8] %D \macros %D {dostartclipping,dostopclipping} %D %D Clipping is implemented in such a way that an arbitrary %D can be fed. %D %D \starttyping %D \dostartclipping {pathname}{width} {height} %D \dostopclipping %D \stoptyping %D %D \installspecial [\dostartclipping] [or] [3] \installspecial [\dostopclipping] [or] [0] %D \macros %D {dosetupidentity} %D %D We can declare some characteristics of the document with %D %D \starttyping %D \dosetupidentity {title} {subject} {author} {creator} {date} {keys} %D \stoptyping %D %D All data is in string format. \installspecial [\dosetupidentity] [and] [6] %D \macros %D {dosetuppaper} %D %D This special can be used to tell the driver what page size %D to use. The special takes three arguments. %D %D \starttyping %D \dosetuppaper {type} {width} {height} %D \stoptyping %D %D The type is one of the common identifiers, like A4, A5 or %D B2. \installspecial [\dosetuppaper] [and] [3] %D \macros %D {dosetupprinter} %D %D Some drivers enable the user to specify the paper type %D used and/or page dimensions to be taken into account. %D %D \starttyping %D \dosetupprinter {type} {hoffset} {voffset} {width} {height} %D \stoptyping %D %D The first argument is one of \type{letter}, \type{legal}, %D \type{A4}, \type{A5} etc. The dimensions are in %D basepoints. \installspecial [\dosetupprinter] [and] [5] %D \macros %D {dosetupopenaction, dosetupclosaction, %D dosetupopenpageaction, dosetupclospageaction, %D dosetupinteraction, %D dosetupscreen, %D dosetupviewmode} %D %D Here come some obscure interactive commands. Probably the %D specs will change with the development of the macros that %D use them. %D %D The first ones can be used to set up the interaction. %D %D \starttyping %D \dosetupinteraction %D \stoptyping %D %D Normally this command does nothing but giving a message %D that some scheme is supported. %D %D \starttyping %D \dosetupstartaction %D \dosetupstopaction %D \stoptyping %D %D These two setup the actions to be executed when the document %D is opened and closed. %D %D The next commands sets up the page and screen. They are %D kind of related. %D %D \starttyping %D \dosetuppage {hoffset} {voffset} {width} {height} {options} %D \dosetupscreen {hoffset} {voffset} {width} {height} {options} %D \stoptyping %D %D The first four arguments are in points. Option~1 results in a %D full screen launch. %D %D \starttyping %D \dosetuppageview {keyword} %D \stoptyping %D %D For the moment we only support \type{fit}. \installspecial [\dosetupinteraction] [and] [0] \installspecial [\dosetupopenaction] [and] [0] \installspecial [\dosetupscreen] [and] [5] \installspecial [\dosetuppageview] [and] [1] \installspecial [\dosetupcloseaction] [and] [0] \installspecial [\dosetupopenpageaction] [and] [0] \installspecial [\dosetupclosepageaction] [and] [0] \installspecial [\dosetuprenderingopenpageaction] [and] [0] \installspecial [\dosetuprenderingclosepageaction] [and] [0] % new, yet undocumented, replaces \dosetupscreen \installspecial [\dosetupcropbox] [and] [4] \installspecial [\dosetuptrimbox] [and] [4] \installspecial [\dosetupartbox] [and] [4] \installspecial [\dosetupbleedbox] [and] [4] %D \macros %D {dostarthide, %D dostophide} %D %D Not every part of the screen is suitable for paper. Menus %D for instance have no meaning on an non||interactive medium. %D These elements are hidden by means of: %D %D \starttyping %D \dostarthide %D \dostophide %D \stoptyping \installspecial [\dostarthide] [or] [0] \installspecial [\dostophide] [or] [0] %D \macros %D {dostartgotolocation, dostopgotolocation, %D dostartgotorealpage, dostopgotorealpage} %D %D When we want to support hypertext buttons, again we have %D to deal with two concepts. %D %D \startitemize[packed,n] %D \item let \TEX\ highlight the text %D \item let the driver show us where to click %D \stopitemize %D %D The first approach is the most secure one. It gives us %D complete control over the visual appearance of hyper %D buttons. The second alternative lets the driver guess what %D part of the text needs highlighting. As long as we deal with %D not too complicated textual buttons, this is no problem. %D It's even a bit more efficient when we take long mid %D paragraph active regions into account. When we let \TEX\ %D handle active sentences {\em for instance marked like this %D one}, we have to take care of line- and pagebreaks ourselve. %D However, it's no trivial matter to let a driver find out %D where things begin and end. Because most hyperlinks can be %D found in tables of contents and registers, the saving in %D terms of bytes can be neglected and the first approach is a %D clear winner. %D %D The most convenient way of cross||referencing is using named %D destinations. A more simple scheme is using page numbers as %D destinations. Because the latter alternative can often be %D implemented more efficient, and because we cannot be sure %D what scheme a driver supports, we always have to supply a %D pagenumber, even when we use named destinations. %D %D To enable a driver to find out what to make active, we have %D to provide begin and endpoints, so like with color, we use %D pairs of specials. The first scheme can be satisfied with %D proper dimensions of the areas to be made active. %D %D The interactive real work is done by the following four %D specials. The reason for providing the first one with both %D a label and a number, is a result of the quite poor %D implementation of \type{pdfmarks} in version 1.0 of %D Acrobat. Because only pagenumbers were supported as %D destination, we had to provide both labels (\DVIWINDO) and %D pagenumbers (\PDF). Some drivers use start stop pairs. %D %D \starttyping %D \dostartgotolocation {w} {h} {url} {file} {label} {page} %D \dostartgotorealpage {w} {h} {url} {file} {page} %D \stoptyping %D %D Their counterparts are: %D %D \starttyping %D \dostopgotolocation %D \dostopgotorealpage %D \stoptyping %D %D The internal alternative is used for system||generated %D links, the external one for user||generated links. The %D Uniform Resource Locator can be used to let the reader %D surf the net. \installspecial [\dostartgotolocation] [and] [6] \installspecial [\dostopgotolocation] [and] [0] \installspecial [\dostartgotorealpage] [and] [5] \installspecial [\dostopgotorealpage] [and] [0] %D One may wonder why jumps to page and location are not %D combined. By splitting them, we enable macro||packages to %D force the prefered alternative, while on the other hand %D drivers can pick up the alternative desired most. %D \macros %D {dostartgotoJS, doflushJSpreamble} %D %D Rather special is the option to include and execute %D JavaScript code. This is a typical \PDF\ option. %D %D \starttyping %D \dostartgotoJS {w} {h} {script} %D \stoptyping %D %D This not so standard \TEX\ feature should be used with %D care. Preamble scripts are flushed by %D %D \doflushJSpreamble {script} \installspecial [\dostartgotoJS] [and] [3] \installspecial [\dostopgotoJS] [and] [0] \installspecial [\doflushJSpreamble][and] [1] %D \macros %D {dostartthisislocation, dostopthisislocation, %D dostartthisisrealpage, dostopthisisrealpage} %D %D Before we can goto some location or page, we have to tell %D the system where it can be found. Because some drivers %D follow the \SGML\ approach of begin||end tags, we have to %D support pairs. A possible extension to this scheme is %D supplying coordinates for viewing the text. %D %D The opposite commands of \type{\dogotosomething} have only %D one argument: %D %D \starttyping %D \dostartthisislocation {label} %D \dostartthisisrealpage {page} %D \stoptyping %D %D These commands are accompanied by: %D %D \starttyping %D \dostopthisislocation %D \dostopthisisrealpage %D \stoptyping %D %D As with all interactive commands's they are installed as %D \type{and} category specials. \installspecial [\dostartthisislocation] [and] [1] \installspecial [\dostopthisislocation] [and] [0] \installspecial [\dostartthisisrealpage] [and] [1] \installspecial [\dostopthisisrealpage] [and] [0] %D In \CONTEXT\ we don't use the \type{\stopsomething} %D macros because we let \TEX\ take care of typographic %D issues. %D \macros %D {doresetgotowhereever} %D %D These and others need: \installspecial [\doresetgotowhereever] [and] [0] %D \macros %D {dostartexecutecommand, dostopexecutecommand} %D %D The actual behavior of the next pair of commands depends %D much on the viewing engine. Therefore one cannot depend %D too much on their support. %D %D \starttyping %D \dostartexecutecommand {w} {h} {command} {options} %D \stoptyping %D %D At least the next commands are supported (more examples %D can be found in \type {spec-fdf.tex}: %D %D \startlinecorrection\setupalign[middle]\leavevmode %D \starttable[|l|l|] %D \HL %D \NC \bf command \NC \bf action \NC\SR %D \HL %D \NC first \NC go to the first page \NC\FR %D \NC previous \NC go to the previous page \NC\MR %D \NC next \NC go to the next page \NC\MR %D \NC last \NC go to the last page \NC\MR %D \NC backward \NC go back to the link list \NC\MR %D \NC forward \NC go forward in the link list \NC\MR %D \NC print \NC enter print mode \NC\MR %D \NC exit \NC exit viewer \NC\MR %D \NC close \NC close document \NC\MR %D \NC enter \NC enter viewer \NC\MR %D \NC help \NC show help on the viewer \NC\LR %D \HL %D \stoptable %D \stoplinecorrection %D %D Options are to be passed as a comma separated list of %D assignments. \installspecial [\dostartexecutecommand] [and] [4] \installspecial [\dostopexecutecommand] [and] [0] %D \macros %D {dostartobject, %D dostopobject, %D doresetobjects, %D doinsertobject} %D %D Reuse of object can reduce the output filesize %D considerably. Reusable objects are implemented with: %D %D \starttyping %D \dostartobject{class}{name}{width}{height}{depth} %D some typeset material %D \dostopobject %D \stoptyping %D %D \starttyping %D \doinsertobject{class}{name} %D \stoptyping %D %D The savings can be huge in interactive texts. The next macro needs %D to be called after a graphic is inserted (in order to clean up %D global references). %D %D \starttyping %D \doresetobjects %D \stoptyping \installspecial [\dostartobject] [or] [5] \installspecial [\dostopobject] [or] [0] \installspecial [\doinsertobject] [or] [2] \installspecial [\doresetobjects] [or] [0] %D \macros %D {doregisterfigure, doregisterfigurecolor} %D %D Images can be objects as well and it's up to the driver to %D handle this. Alternative images are also up to the driver, %D and the next macro tells the driver that the previous image %D is somehow followed by another and that both have to be %D handled together. This is a rather fuzzy model, but for the %D moment it suits its purpose: low res screen versions combined %D with high res printable ones. \installspecial [\doregisterfigure] [or] [2] \installspecial [\doregisterfigurecolor][or] [1] % %D \macros % %D {dogetobjectreference} % %D % %D For very special purposes, one can ask for the internal % %D reference to the object. Beware! % % \installspecial [\dogetobjectreference] [or] [3] % % %D The first argument is the name, the second a macro that % %D gets the associated value. %D \macros %D {dostartrunprogram, dostoprunprogram, %D dostartgotoprofile, dostopgotoprofile, %D dobeginofprofile, %D doendofprofile} %D %D These specials are still experimental. They are not yet %D supported by the programs the way they should be. %D %D {\em --- still undocumented ---} \installspecial [\dostartrunprogram] [and] [4] \installspecial [\dostoprunprogram] [and] [0] \installspecial [\dostartgotoprofile] [and] [3] \installspecial [\dostopgotoprofile] [and] [0] \installspecial [\dobeginofprofile] [and] [4] \installspecial [\doendofprofile] [and] [0] %D \macros %D {doinsertbookmark} %D %D Bookmarks, that is viewer generated tables of contents, are %D a strange phenomena, mainly because \TEX\ can provide %D whatever kind of table in much better quality. \installspecial [\doinsertbookmark] [and] [5] %D This special is called as: %D %D \starttyping %D \doinstallbookmark {level} {nofsubentries} {text} {page} {open} %D \stoptyping %D %D This definition is very \PDF\ oriented, so for more %D information we kindly refer to the \PDF\ manuals. %D \macros %D {dosetpagetransition} %D %D In presentations, fancy page transitions can, at least for a %D short moment, let the audience focus at the screen. Like the %D previous one, this special is very \PDF. %D %D \starttyping %D \dosetpagetransition{dissolve}{0} %D \stoptyping %D %D Transitions have symbolic names, like dissolve, box, split, %D blinds, wipe and glitter. The second argument determines %D the wait time (unless zero). \installspecial [\dosetpagetransition] [or] [2] %D \macros %D {dopresettextfield,dopresetlinefield, %D dopresetchoicefield,dopresetpopupfield,dopresetcombofield, %D dopresetbuttonfield,dopresetcheckfield, %D dopresetradiofield,dopresetradiorecord} %D %D The special drivers are programmed independant from their %D calling macros are thereby use the standard \TEX\ way of %D passing parameters. Unfortunately fields often have more %D than nine characteristics, so we pack some arguments in one. %D %D \starttyping %D \dopresettextfield / \dopresetlinefield %D {name} {width} {height} {default} {length} %D {style,color} {options} {alignment} {actions} %D %D \dopresetchoicefield / \dopresetpopupfield / \dopresetcombofield %D {name} {width} {height} {default} %D {style,color} {options} {values} {actions} %D %D \dopresetpushfield %D {name} {width} {height} {default} %D {options} {values} {actions} %D %D \dopresetcheckfield %D {name} {width} {height} {default} %D {options} {values} {actions} %D %D \dopresetradiofield %D {name} {width} {height} {default} %D {options} {parent} {values} {actions} %D %D \dopresetradiorecord %D {name} {top} {options} {kids} {actions} %D \stoptyping \installspecial [\dopresetlinefield] [or] [9] \installspecial [\dopresettextfield] [or] [9] \installspecial [\dopresetchoicefield] [or] [8] \installspecial [\dopresetpopupfield] [or] [8] \installspecial [\dopresetcombofield] [or] [8] \installspecial [\dopresetpushfield] [or] [7] \installspecial [\dopresetcheckfield] [or] [7] \installspecial [\dopresetradiofield] [or] [8] \installspecial [\dopresetradiorecord] [or] [5] %D \macros %D {dodefinefieldset,dogetfieldset,doiffieldset} %D %D Field sets, used in resetting and submitting, are handled %D by: \installspecial [\dodefinefieldset] [or] [2] \installspecial [\dogetfieldset] [or] [1] \installspecial [\doiffieldset] [or] [2] %D \macros %D {dosetfieldstatus} %D %D For practical reasons we set some field characteristics %D using: %D %D \starttyping %D \dosetfieldstatus {mode} {parent} {kids} {root} %D \stoptyping \installspecial [\dosetfieldstatus] [or] [4] %D with: \def\fieldlonermode {0} % no \chardef here \def\fieldparentmode{1} % no \chardef here \def\fieldchildmode {2} % no \chardef here \def\fieldcopymode {3} % no \chardef here %D \macros %D {doregistercalculationset} %D %D We can define a calculation order list with: %D %D \starttyping %D \doregistercalculationset {set identifier} %D \stoptyping \installspecial [\doregistercalculationset] [or] [1] %D \macros %D {doinsertcomment, doflushcomments} %D %D Not so much out of need, but to be complete, we also %D implement text annotations, so called comment: %D %D \starttyping %D \doinsertcomment %D {title} {width} {height} {color} {open} {symbol} {collect} {data} %D \stoptyping %D %D When enables, comments can be collected and flushed: %D %D \starttyping %D \doflushcomments %D \stoptyping \installspecial[\doinsertcomment] [and] [8] \installspecial[\doflushcomments] [and] [0] %D \macros %D {dosetposition, dosetpositionwhd, dosetpositionplus, %D dosetpositionpapersize} %D %D Not natural to \TEX, but available in \PDFTEX, and by %D means of postprocessed \DVI, we can save and call upon %D positions. %D %D \starttyping %D \dosetposition {identifier} %D \dosetpositionwhd {identifier} {width} {height} {depth} %D \dosetpositionplus {identifier} {width} {height} {depth} {list} %D \dosetpositionpapersize {width} {height} %D \stoptyping %D %D This is one of the few specials where when using \PDFTEX\ %D the driver directly deals with the utility file. %D Support is moved to spec-mis.tex. The whole idea originates %D and was implemented first in \PDFTEX. Later \DVIPDFMX\ %D supported the \CONTEXT\ specific specials and nowadays %D \PDFTEX\ supports this feature in \DVI\ mode and \XETEX\ %D implements it as well. This means that only \ALEPH\ is %D still dependent on specials, but that variant of \TEX\ has %D become obsolete anyway. % \installspecial [\dosetposition] [or] [1] % \installspecial [\dosetpositionwhd] [or] [4] % \installspecial [\dosetpositionplus] [or] [5] % \installspecial [\dosetpositionpapersize] [or] [2] %D \macros %D {dostarttransparency,dostoptransparency} %D %D \starttyping %D \dostarttransparency{fraction}{type} %D \dostoptransparency %D \stoptyping %D %D Although in \CONTEXT\ transparency is closely integrated %D in the color drivers, in the end it is an independent %D feature. \installspecial [\dostarttransparency] [or] [2] \installspecial [\dostoptransparency] [or] [0] %D \macros %D {doattachfile} %D %D \starttyping %D \doattachfile{title}{width}{height}{depth}{color}{symbol}{filename}{source} %D \stoptyping \installspecial [\doattachfile] [or] [8] %D Experimental (properties): \installspecial[\dostartviewerlayer] [or] [1] \installspecial[\dostopviewerlayer] [or] [0] \installspecial[\dodefineviewerlayer] [or] [5] %installspecial[\doflushviewertextlayers] [or] [0] %installspecial[\doflushviewerpagelayers] [or] [0] \installspecial[\domakeviewerlayerlist] [or] [1] \installspecial[\doinsertrenderingwindow] [or] [4] \installspecial[\doinsertrendering] [or] [4] \installspecial[\doinsertrenderingobject] [or] [4] \installspecial[\doinsertrenderingobject] [or] [4] \installspecial[\dostartfonteffect] [or] [3] \installspecial[\dostopfonteffect] [or] [0] %D From now on, mapfile loading is also a special; we assume the %D more or less standard dvips syntax. \installspecial[\doresetmapfilelist] [and] [0] \installspecial[\doloadmapfile] [and] [2] % + - = | filename \installspecial[\doloadmapline] [and] [2] % + - = | fileline %D We define a couple of backends: \defineoutput [dvipsone] [dvi,ps,yy] \defineoutput [dviwindo] [dvi,ps,yy,win] \defineoutput [dvips] [dvi,ps,tr] \defineoutput [dviview] [dvi,ps,tr,dv] \defineoutput [pdftex] [tpd] \defineoutput [pdf] [tpd] \defineoutput [dvipdfm] [dpm] \defineoutput [dpm] [dpm] \defineoutput [dvipdfmx] [dpx] \defineoutput [dpx] [dpx] \defineoutput [acrobat] [pdf,ps,tr] \defineoutput [xetex] [dpx,xet] \defineoutput [xtx] [dpx,xet] \defineoutput [xdv] [dvi,xtx,xet] \defineoutput [xdv2pdf] [dvi,xtx,xet] %D We don't enable \ACROBAT, because pure \POSTSCRIPT\ is not %D that strong on objects and \PDFTEX\ does a better job. %D Some reasonable alternatives are: %D %D \starttyping %D \setupoutput [dvipsone,acrobat] %D \setupoutput [dviwindo,acrobat] %D \stoptyping %D %D Although, better is: %D %D \starttyping %D \setupoutput [pdftex] %D \stoptyping %D Please let me know if we need more. From now on we default %D to: \appendtoks \setupoutput[dvips]% \to \everydump \protect \endinput