diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/x-fo.mkii')
-rw-r--r-- | Master/texmf-dist/tex/context/base/x-fo.mkii | 4057 |
1 files changed, 0 insertions, 4057 deletions
diff --git a/Master/texmf-dist/tex/context/base/x-fo.mkii b/Master/texmf-dist/tex/context/base/x-fo.mkii deleted file mode 100644 index 3631f6d7e14..00000000000 --- a/Master/texmf-dist/tex/context/base/x-fo.mkii +++ /dev/null @@ -1,4057 +0,0 @@ -%D \module -%D [ file=x-fo, -%D version=2004.03.12, % based on earlier experiments -%D title=\FOXET, -%D subtitle=Formatting Objects, -%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. - -% \showframe - -% This is a first implementation, maybe I will write another one with mixed -% element indifferent vars and something 'when set, act upon it, and forget', -% for instance: in each element check if font set, if so, change font and -% reset font attributes. I'm not sure if this is wise. - -% todo: global assignment in order to limit restore -% todo: combine mp graphics (see end) saves 30% -% todo: using contants and variables (for internal use) - -% todo: language at more levels - -% beware: aftergroup vs egroup/endgroup - -\useXMLfilter[prs,run] - -\unprotect - -% syst-new.tex - -\long\def\unstringed#1% " ' space - {\csname\ifcsname @u@s@#1\endcsname @u@s@#1\else\s!empty\fi\endcsname#1} - -\long\setvalue{@u@s@"}#1#2"{#2} -\long\setvalue{@u@s@'}#1#2'{#2} -\long\setvalue{@u@s@ }#1#2 {#2} - -% xtag-ini - -\def\letXMLpar #1#2{\@EA \let\csname\@@XMLvariable:#1:#2\endcsname} -\def\setXMLpar #1#2{\@EA \def\csname\@@XMLvariable:#1:#2\endcsname} -\def\setXMLepar#1#2{\@EA\edef\csname\@@XMLvariable:#1:#2\endcsname} - -\protect - -%D Most time went into figuring out the specifications, especially -%D because there are no examples included. Samples that circulate on the -%D web are often border cases and torture test and don't have much to do -%D with real live. Another complication lays in the inheritance model: -%D some of the attributes are inherited. This also leaves some room for -%D interpretation, for instance do values that are used at a certain -%D point migrate downwards or not. -%D -%D The \CONTEXT\ \XML handler can deal with attributes in several ways -%D and for this purpose I have played with a few experimental mechanisms -%D just to end up with the existing begin/end mechanism combined with -%D a recursive attribute resolver which means that one has to implicitly -%D ask for an inherited attributes. This approach is probably one of the -%D most efficient ways of dealing with formatting objects in \CONTEXT, -%D unless of course I start adding rather specific support to the kernel. -%D -%D This module is rather experimental. More information about its usage -%D can be found in the \FOXET\ manual. - -%D Since we're not dealing with the fine points of typesetting here, we -%D can safely ignore \TEX's warnings about overful or underful boxes. - -\dontcomplain - -%D We will use fonts that have the characters in the normal (ascii) -%D slots. We will also use the stupid verbatim handler. - -\chardef\XMLtokensreduction = 2 -\chardef\XMLcdatamethod = 2 - -%D For the purpose of testing. - -\startmode[fo-verbose] - \def\writeFOstatus{\writestatus{XML-FO}} -\stopmode - -\startnotmode[fo-verbose] - \let\writeFOstatus\gobbleoneargument -\stopnotmode - -%D For the moment we stick to utf-8. - -\useXMLfilter[utf] - -%D This will be sorted out later (esp in relation to mathml). - -\setupbodyfont[pos,10pt] - -%D There are a couple of predefined colors. Don't ask me why, but -%D formatting objects are not a fresh start but a mix of existing -%D technologies. Color support is poluted by cascading stylesheets. -%D -%D Because hexadecimal color specifications are not enabled by -%D default, this feature has to be enables by loading the appropriate -%D color module. Here we define colors in \RGB\ values because we -%D don't want to loose accuracy. - -\setupcolors[state=start] \setupcolor[hex] - -\definecolor [black] [s=0] % [h=000000] -\definecolor [gray] [s=.5] % [h=808080] -\definecolor [silver] [s=.75] % [h=C0C0C0] -\definecolor [white] [s=1] % [h=FFFFFF] -\definecolor [maroon] [r=.5] % [h=800000] -\definecolor [red] [r=1] % [h=FF0000] -\definecolor [purple] [r=.5,b=.5] % [h=800080] -\definecolor [fuchsia] [r=1,b=1] % [h=FF00FF] -\definecolor [green] [g=.5] % [h=008000] -\definecolor [lime] [g=1] % [h=00FF00] -\definecolor [olive] [r=.5,g=.5] % [h=808000] -\definecolor [yellow] [r=1,g=1] % [h=FFFF00] -\definecolor [navy] [r=1,g=1] % [h=000080] -\definecolor [blue] [b=1] % [h=0000FF] -\definecolor [teal] [g=.5,b=.5] % [h=008080] -\definecolor [aqua] [g=1,b=1] % [h=00FFFF] - -%D The layout is rather basic. Of the 25 available areas we -%D only use the text area. Maybe some day I will plug in a -%D more dedicated page builder. - -\setuplayout - [backspace=0pt, - topspace=0pt, - header=0pt, - footer=0pt, - width=middle, - height=middle, - % marking=on, - location=middle] - -\setuppagenumbering - [alternative={doublesided,singlesided}, % sic - location=] - -\setuptolerance - [verytolerant,stretch] - -%D We will position the regions using layers. - -\definelayer[regions][width=\paperwidth,height=\paperheight] - -\definelayer[xsl-region-before] -\definelayer[xsl-region-after] -\definelayer[xsl-region-start] -\definelayer[xsl-region-end] -\definelayer[xsl-region-body] - -\setupbackgrounds[page][background=regions] - -%D We now enter the part of this module where the action takes -%D place. As usual we provide some tracing options. - -\newif\iftracingFO \readsysfile{page-run}\donothing\donothing - -%D We will organize the attribute definitions in a similar fashion as in -%D the specification. Unfortunately there are more sets defined in there -%D than are actually used, so the definitions later on will look a bit -%D messy. -%D -%D Quite some attributes can be inherited, which means that they can -%D end up in all elements and influence those way down the tree. - -\defineXMLattributeset - [fo:inherited] - -%D The properties: - -% \defineXMLattributeset -% [fe:tracing] -% [tracing=] - -\defineXMLattributeset - [fo:accessibility] - [source-document=none, - role=none] - -\defineXMLattributeset - [fo:absolute-position] - [absolute-position=auto, - top=auto, - right=auto, - bottom=auto, - left=auto] - -% \defineXMLattributeset -% [fo:aural] -% [azitmuth=, -% cue-after=, -% cue-before=, -% elevation=, -% pause-after=, -% pause-before=, -% pitch=, -% pitch-range=, -% play-during=, -% richness=, -% speak=, -% speak-header=, -% speak-numeral=, -% speak-punctuation=, -% speech-rate=, -% stress=, -% voice-family=, -% volume=] - -\defineXMLattributeset - [fo:border-padding-background] - [background-attachment=scroll, - background-color=transparent, - background-image=none, - background-repeat=repeat, - background-position-horizontal=left, - background-position-vertical=top, - border-color=transparent, - border-style=none, - border-width=medium, - background-position=, - border-top=, - border-bottom=, - border-left=, - border-right=, - border-before-color=\XMLop{border-color}, - border-before-style=\XMLop{border-style}, - border-before-width=\XMLop{border-width}, - border-after-color=\XMLop{border-color}, - border-after-style=\XMLop{border-style}, - border-after-width=\XMLop{border-width}, - border-start-color=\XMLop{border-color}, - border-start-style=\XMLop{border-style}, - border-start-width=\XMLop{border-width}, - border-end-color=\XMLop{border-color}, - border-end-style=\XMLop{border-style}, - border-end-width=\XMLop{border-width}, - border-top-color=\XMLop{border-before-color}, - border-top-style=\XMLop{border-before-style}, - border-top-width=\XMLop{border-before-width}, - border-bottom-color=\XMLop{border-after-color}, - border-bottom-style=\XMLop{border-after-style}, - border-bottom-width=\XMLop{border-after-width}, - border-left-color=\XMLop{border-start-color}, - border-left-style=\XMLop{border-start-style}, - border-left-width=\XMLop{border-start-width}, - border-right-color=\XMLop{border-end-color}, - border-right-style=\XMLop{border-end-style}, - border-right-width=\XMLop{border-end-width}, - padding=,% 0pt, - padding-before=0pt,%\XMLop{padding}, - padding-after=0pt,%\XMLop{padding}, - padding-start=0pt,%\XMLop{padding}, - padding-end=0pt,%\XMLop{padding}, - padding-top=\XMLop{padding-before}, - padding-bottom=\XMLop{padding-after}, - padding-left=\XMLop{padding-start}, - padding-right=\XMLop{padding-end}] - -\extendXMLattributeset - [fo:border-padding-background] - [fe:background-height=, - fe:background-width=] - -\defineXMLattributeset - [fo:font] - [] - -\extendXMLattributeset - [fo:inherited] - [font=, - font-family=,% Times, - font-selection-strategy=, - font-size=,% 12pt, - font-size-adjust=, % 1, - font-style=, % normal, - font-variant=, % normal, - font-weight=] % normal] - -\defineXMLattributeset - [fo:hyphenation] - [] - -\extendXMLattributeset - [fo:inherited] - [country=, - language=, - script=, - hyphenate=, - hyphenation-character=, - hyphenation-push-character-count=, - hyphenation-remain-character-count=] - -\defineXMLattributeset - [fo:margin-block] - [margin=, % 0pt, - margin-top=0pt,% \XMLop{margin}, - margin-bottom=0pt,% \XMLop{margin}, - margin-left=0pt,% \XMLop{margin}, - margin-right=0pt,% \XMLop{margin}, - space-before=0pt, - space-after=0pt, - space-before.precedence=, - space-before.conditionality=, - space-before.minimum=, - space-before.optimum=, - space-before.maximum=, - space-after.precedence=, - space-after.conditionality=, - space-after.minimum=, - space-after.optimum=, - space-after.maximum=] - -\extendXMLattributeset - [fo:inherited] - [start-indent=, - end-indent=] - -\defineXMLattributeset - [fo:margin-inline] - [space-start=, - space-end=] - -\defineXMLattributeset - [fo:relative-position] - [relative-position=, - top=auto, - right=auto, - bottom=auto, - left=auto] - -\defineXMLattributeset - [fo:area-alignment] - [alignment-adjust=, - alignment-baseline=, - baseline-shift=, - dominant-baseline=] - -\extendXMLattributeset - [fo:inherited] - [display-align=, - relative-align=] - -\defineXMLattributeset - [fo:area-dimension] - [block-progression-dimension=, - inline-progression-dimension=, - content-height=, - content-width=, - height=, - width=, - max-height=, - max-width=, - min-height=, - min-width=, - scaling=, - scaling-method=] - -\defineXMLattributeset - [fo:block-and-line] - [] - -\extendXMLattributeset - [fo:inherited] - [hyphenation-keep=, - hyphenation-ladder-count=, - last-line-end-indent=, - line-height=, - line-height-shift-adjustment=, - line-stacking-strategy=, - linefeed-treatment=, - white-space-treatment=, - text-align=, - text-align-last=, - text-indent=, - white-space-collapse=, - wrap-option=] - -\defineXMLattributeset - [fo:character] - [character=, - suppress-at-line-break=, - text-decoration=, - text-shadow=, - treat-as-word-space=] - -\extendXMLattributeset - [fo:inherited] - [letter-spacing=, - text-transform=, - word-spacing=] - -\defineXMLattributeset - [fo:color] - [color-profile-name=, - rendering-intent=] - -\extendXMLattributeset - [fo:inherited] - [color=] - -\defineXMLattributeset - [fo:float] - [clear=, - float=] - -\extendXMLattributeset - [fo:inherited] - [intrusion-displace=] - -\defineXMLattributeset - [fo:keeps-and-breaks] - [break-after=, - break-before=, - keep-with-next.within-line=, - keep-with-next.within-column=, - keep-with-next.within-page=, - keep-with-previous.within-line=, - keep-with-previous.within-column=, - keep-with-previous.within-page=] - -\extendXMLattributeset - [fo:inherited] - [keep-together.within-line=, - keep-together.within-column=, - keep-together.within-page=, - orphans=, - widows=] - -\defineXMLattributeset - [fo:layout] - [clip=, - overflow= - span=] - -\extendXMLattributeset - [fo:inherited] - [reference-orientation=] - -\defineXMLattributeset - [fo:leader-and-rule] - [] - -\extendXMLattributeset - [fo:inherited] - [leader-alignment=, - leader-pattern=, - leader-pattern-width=, - leader-pattern-width=, - leader-length=, - rule-style=, - rule-thickness=] - -\defineXMLattributeset - [fo:dynamic-effects] - [active-state=, - case-name=, - case-title=, - destination-placement-offset=, - external-destination=, - indicate-destination=, - internal-destination=, - show-destination=, - starting-state=, - switch-to=, - target-presentation-context=, - target-processing-context=, - target-stylesheet=] - -\extendXMLattributeset - [fo:inherited] - [auto-restore=] - -\defineXMLattributeset - [fo:markers] - [marker-class-name=, - retrieve-class-name=, - retrieve-position=, - retrieve-boundary=] - -\defineXMLattributeset - [fo:number-to-string] - [country=, - language=, - format=, - grouping-separator=, - grouping-size=, - letter-value=] - -% \defineXMLattributeset -% [fo:pagination-and-layout] -% [black-or-not-blank=, -% column-count=1, -% column-gap=12pt, -% extent=, -% flow-name=, -% force-page-count=, -% initial-page-number=, -% master-name=, -% master-reference=, -% maximum-repeats=, -% media-usage=, -% odd-or-even=, -% page-height=, -% page-position=, -% page-width=, -% precedence=, -% region-name=] - -\defineXMLattributeset - [fo:table] - [border-after-precedence=, - border-before-precedence=, - border-end-precedence=, - border-start-precedence=, - column-number=, - column-width=, - ends-row=, - number-columns-repeated=, - number-columns-spanned=, - number-rows-spanned=, - starts-row=, - table-layout=, - table-omit-footer-at-break=, - table-omit-header-at-break=] - -\extendXMLattributeset - [fo:inherited] - [border-collapse=, - border-separation=, - caption-side=, - empty-cells=] - -\defineXMLattributeset - [fo:writing-mode] - [%text-altitude=, - %text-depth=, - unicode-bidi=] - -\extendXMLattributeset % for practical reasons we inherit along the whole chain - [fo:inherited] % unless we implement relax skipping - [text-altitude=, - text-depth=] - -\extendXMLattributeset - [fo:inherited] - [direction=, - glyph-orientation-horizontal=, - glyph-orientation-vertical=, - writing-mode=] - -\defineXMLattributeset - [fo:list-block] - [] - -\extendXMLattributeset - [fo:inherited] - [provisional-label-separation=, - provisional-distance-between-starts=] - -% \starttext -% \setuplayout[topspace=1cm,height=middle,header=0pt,footer=0pt] -% \setupbodyfont[small,tt] -% \expanded{\processcommalist[\XMLattributeset{fo:inherited}]}\endgraf -% \stoptext - -% content-type -% id - -% ref-id -% score-spaces % inherited -% src -% visibility % inherited -% z-index - -% shorthands: -% -% background -% background-position -% border -% border-bottom -% border-left -% border-top -% border-right -% border-style -% border-color -% border-spacing % inherited -% border-width -% cue -% font % inherited -% margin -% padding -% page-break-after -% page-break-before -% page-break-inside % inherited -% pause -% position -% size -% vertical-align -% white-space % inherited - -%D We will speed up the process of setting up attributes by compiling the -%D definitions. Sometimes we need to access attributes explicitly by -%D element (for instance when handling regions). We also need to deal -%D with nested elements (for instance blocks) or a sequence of similar -%D ones, while we may not always want to use grouping. As a result, the -%D next series of definitions and macros are quite ugly. The begin|/|end -%D is needed in order to comfortably fetch attribute values from -%D ancestors. - -\startXMLcompiling[inherit] - -%D Element: fo:root - -%D todo: set defaults here - -\defineXMLenvironment - [fo:root] - [\XMLattributeset{fo:inherited}, -leader-pattern=spaces, -leader-pattern-width=12pt, - media-usage=] - {\directsetup{fo:root:start}} - {\directsetup{fo:root:stop}} - -\startsetups fo:root:start - \starttext \beginXMLelement \startXMLignore - \doifsomething{\XMLop{language}}{\mainlanguage[\XMLop{language}]}% todo, everywhere -\stopsetups - -\startsetups fo:root:stop - \stopXMLignore \endXMLelement \stoptext -\stopsetups - -%D Element: fo:declarations - -\defineXMLprocess - [fo:declarations] - -%D Element: fo:color-profile - -\defineXMLignore - [fo:color-profile] - [src=, - color-profile-name=, - rendering-intent=] - -%D Element: fo:page-sequence - -% master-name and master-reference are often mixed up in examples - -\defineXMLenvironment - [fo:page-sequence] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fe:tracing}, - \XMLattributeset{fo:number-to-string}, - initial-page-number=auto, - master-reference=any, - force-page-count=auto] - {\beginXMLelement\directsetup{fo:page-sequence:start}} - {\directsetup{fo:page-sequence:stop}\endXMLelement} - -\mapXMLvalue {fo:page-initial} {auto} {\relax} -\mapXMLvalue {fo:page-initial} {auto-odd} {\ifodd\pageno \expanded{\setuppagenumber[number=\the\dimexpr(\pageno+1)]}\fi} -\mapXMLvalue {fo:page-initial} {auto-even} {\ifodd\pageno\else\expanded{\setuppagenumber[number=\the\dimexpr(\pageno+1)]}\fi} - -% todo: blokkeer left/right/etc in geval van blank - -\mapXMLvalue {fo:page-start} {auto} {\page} -\mapXMLvalue {fo:page-start} {even} {\page\setuplayout[blank]\page[even]} -\mapXMLvalue {fo:page-start} {odd} {\page\setuplayout[blank]\page[odd]} -\mapXMLvalue {fo:page-end} {end-on-even} {\page\setuplayout[blank]\page[even]} -\mapXMLvalue {fo:page-end} {end-on-odd} {\page\setuplayout[blank]\page[odd]} -\mapXMLvalue {fo:page-start} {no-force} {\page} - -\startsetups fo:page-sequence:start - - % we're still in the previous page-sequence - - \XMLval{fo:page-start}{\XMLop{force-page-count}}{\page} \begingroup - - \directsetup{fe:setup} - - \iftracingFO \showframe[text] \fi - - \xdef\SavedPageNumber{\the\realpageno} - - % now we enter the new page-sequence - - % todo: check on number - - \doifXMLvalelse{fo:page-initial}{\XMLop{initial-page-number}} - {\XMLval{fo:page-initial}{\XMLop{initial-page-number}}{}} - {\doifnot{\XMLop{initial-page-number}}{auto} - {\expanded{\setuppagenumber[number=\XMLop{initial-page-number}]}}} - - \doifsomething{\XMLpar{fo:page-sequence}{master-reference}{}} - {\doifelseXMLelement{fo:page-sequence-master:\XMLpar{fo:page-sequence}{master-reference}{}} - {%[starting page sequence master: \XMLpar{fo:page-sequence}{master-reference}{}]\endgraf - \flushXMLelement{fo:page-sequence-master:\XMLpar{fo:page-sequence}{master-reference}{}}} - {%[starting simple page master: \XMLpar{fo:page-sequence}{master-reference}{any}]\endgraf - \flushXMLelement{fo:simple-page-master:\XMLpar{fo:page-sequence}{master-reference}{any}}}} - - \doif{\XMLpar{fo:simple-page-master-do}{fe:option}{}}{fit} - {\directsetup{fe:page:option:fit:start}} - - \doifnot{\XMLpar{fo:region-body}{column-count}{1}}{1} - {\directsetup{fo:columns:start}} - -\stopsetups - -\startsetups fo:page-sequence:stop - - \doifnot{\XMLpar{fo:region-body}{column-count}{1}}{1} - {\directsetup{fo:columns:stop}} - - \doif{\XMLpar{fo:simple-page-master-do}{fe:option}{}}{fit} - {\directsetup{fe:page:option:fit:stop}} - - % \XMLval{fo:page-end}{\XMLop{force-page-count}}{\page} \endgroup - - \ifnum\SavedPageNumber=\realpageno - - \ifdim\pagetotal<.5\textheight \null \vfill \fi % force a page with only containers - - \fi - - \XMLval{fo:page-end}{\XMLpar{fo:page-sequence}{force-page-count}{}}{\page} \endgroup - -\stopsetups - -\newdimen\FOcolumngap - -\startsetups fo:columns:start - - \FOcolumngap\textwidth - - \setpercentdimen\FOcolumngap{\XMLpar{fo:region-body}{column-gap}{12pt}} - - % we need to freeze the lineheight here - - \expanded{\definecolumnset - [fo:set] - [n=\XMLpar{fo:region-body}{column-count}{1}, - distance=\FOcolumngap]} - - \expanded{\definecolumnsetspan - [fo:set] - [n=\XMLpar{fo:region-body}{column-count}{1}]} - - \directsetup{fo:font:setup} % else problems - - \directsetup{fo:line-height:setup} - -% \parseXMLattributes{fo:flow}{line-height='normal'} - - \startcolumnset[fo:set] - - % \startcolumns[\XMLpar{fo:region-body}{column-count}{1}] - -\stopsetups - -\startsetups fo:columns:stop - - % \stopcolumns - - \stopcolumnset - -\stopsetups - -%D Element: fo:layout-master-set - -\defineXMLprocess - [fo:layout-master-set] - -%D Element: fo:page-sequence-master - -\defineXMLenvironmentsave - [fo:page-sequence-master] - [\XMLattributeset{fo:inherited}, - master-name=any] - {} - {%[saved page sequence master: \XMLop{master-name}]\endgraf - \gsaveXMLdatainelement - {fo:page-sequence-master:\XMLop{master-name}} - {fo:page-sequence-master-do} - {fo:page-sequence-master}} - -\defineXMLprocess - [fo:page-sequence-master-do] - [\XMLattributeset{fo:inherited}] - -%D Element: fo:single-page-master-reference - -% makeup - one page - -\defineXMLcommand - [fo:single-page-master-reference] - [master-reference=any] - {\flushXMLelement{fo:simple-page-master:\XMLop{master-reference}}} - -%D Element: fo:repeatable-page-master-reference - -\defineXMLcommand - [fo:repeatable-page-master-reference] - [master-reference=any, - maximum-repeats=] - {\flushXMLelement{fo:simple-page-master:\XMLop{master-reference}}} - -%D Element: fo:repeatable-page-master-alternatives - -\defineXMLprocess - [fo:repeatable-page-master-alternatives] - [maximum-repeats=] - -%D Element: fo:conditional-page-master-reference - -% page-position : first last rest any -% odd-or-even : odd even any -% blank-or-not-blank : blank not-blank - -% The page-position default is needed (else possible loops) - -\defineXMLcommand - [fo:conditional-page-master-reference] - [master-reference=any, - page-position=\XMLpar{fo:conditional-page-master-reference}{master-reference}{any}, - blank-or-not-blank=, - odd-or-even=] - {\flushXMLelement{fo:simple-page-master:\XMLpar{fo:conditional-page-master-reference}{master-reference}{}}} - -%D Element: fo:simple-page-master - -% first-page left-page right-page blank-page - -% default dimensions - -\defineXMLenvironmentsave - [fo:simple-page-master] - [master-name=any] - {} - {%[saved simple page master: \XMLop{master-name}]\endgraf - \gsaveXMLdatainelement - {fo:simple-page-master:\XMLop{master-name}} - {fo:simple-page-master-do} - {fo:simple-page-master}} - -% reference-orientation=0deg, -% writing-mode= - -\defineXMLenvironment - [fo:simple-page-master-do] - [\XMLattributeset{fo:inherited}, % added - \XMLattributeset{fo:margin-block}, - page-height=29.7cm, - page-width=21cm] - {\directsetup{fo:simple-page-master:start}} - {\directsetup{fo:simple-page-master:stop}} - -% not needed any more: - -\mapXMLvalue {fo:reference-orientation} {0deg} {0} -\mapXMLvalue {fo:reference-orientation} {90deg} {90} -\mapXMLvalue {fo:reference-orientation} {180deg} {180} -\mapXMLvalue {fo:reference-orientation} {270deg} {270} -\mapXMLvalue {fo:reference-orientation} {-90deg} {270} -\mapXMLvalue {fo:reference-orientation} {-180deg} {180} -\mapXMLvalue {fo:reference-orientation} {-270deg} {90} - -\startsetups fo:simple-page-master:start - - % nothing - -\stopsetups - -% can be low level tex - -\startsetups fo:simple-page-master:stop - - \writeFOstatus{defining papersize '\directsetup{fo:layout:kind}'} - - \expanded - {\definepapersize - [\directsetup{fo:layout:kind}] - [width=\XMLop{page-width}, - height=\XMLop{page-height}]} - - \checkFOpadding {fo:region-body} - \checkFOmargin {fo:region-body} - \checkFOmargin {fo:simple-page-master-do} - - \writeFOstatus{defining layout '\directsetup{fo:layout:kind}'} - - \FOscratchMT\paperheight \setpercentdimen\FOscratchMT{\XMLpar{fo:simple-page-master-do}{margin-top} \zeropoint} - \FOscratchMB\paperheight \setpercentdimen\FOscratchMB{\XMLpar{fo:simple-page-master-do}{margin-bottom}\zeropoint} - \FOscratchML\paperwidth \setpercentdimen\FOscratchML{\XMLpar{fo:simple-page-master-do}{margin-left} \zeropoint} - \FOscratchMR\paperwidth \setpercentdimen\FOscratchMR{\XMLpar{fo:simple-page-master-do}{margin-right} \zeropoint} - - \FOscratchRB\paperheight \setpercentdimen\FOscratchRB{\XMLpar{fo:region-body}{margin-top} \zeropoint} - \FOscratchRA\paperheight \setpercentdimen\FOscratchRA{\XMLpar{fo:region-body}{margin-bottom}\zeropoint} - \FOscratchRS\paperwidth \setpercentdimen\FOscratchRS{\XMLpar{fo:region-body}{margin-left} \zeropoint} - \FOscratchRE\paperwidth \setpercentdimen\FOscratchRE{\XMLpar{fo:region-body}{margin-right} \zeropoint} - - \FOscratchPB\paperheight \setpercentdimen\FOscratchPB{\XMLpar{fo:region-body}{padding-top} \zeropoint} - \FOscratchPA\paperheight \setpercentdimen\FOscratchPA{\XMLpar{fo:region-body}{padding-bottom}\zeropoint} - \FOscratchPS\paperwidth \setpercentdimen\FOscratchPS{\XMLpar{fo:region-body}{padding-left} \zeropoint} - \FOscratchPE\paperwidth \setpercentdimen\FOscratchPE{\XMLpar{fo:region-body}{padding-right} \zeropoint} - - \expanded - {\definelayout - [\directsetup{fo:layout:kind}] - [ page={\directsetup{fo:layout:kind},\XMLval{fo:reference-orientation}{\XMLop{reference-orientation}}{}}, - paper=\directsetup{fo:layout:kind}, - backspace=\the\dimexpr(\FOscratchML+\FOscratchPS+\FOscratchRS), - cutspace=\the\dimexpr(\FOscratchMR+\FOscratchPE+\FOscratchRE), - topspace=\the\dimexpr(\FOscratchMT+\FOscratchPB+\FOscratchRB), - bottomspace=\the\dimexpr(\FOscratchMB+\FOscratchPA+\FOscratchRA)]} - - \expanded{\setuplayout[\directsetup{fo:layout:kind}]} - - % this is a nasty bit of code: this local setup stores some data that - % needs to be used later - - \startexpanded - \noexpand \startlocalsetups[layout:\directsetup{fo:layout:kind}] - \noexpand \writeFOstatus{processing simple page master '\XMLpar{fo:simple-page-master-do}{master-name}{any}'} - \noexpand \resetsetups[fo:simple-page-master:start] - \noexpand \resetsetups[fo:simple-page-master:stop] - \noexpand \flushXMLelement{fo:simple-page-master:\XMLpar{fo:simple-page-master-do}{master-name}{any}} - \noexpand \stoplocalsetups - \stopexpanded - -\stopsetups - -% \defineXMLcommand[fo:simple-page-master-do-do] -% {\writeFOstatus{setting up master \XMLop{master-name} in page body}} - -%D Element: fo:region-body - -% display-align=, -% reference-orientation=, -% writing-mode=, - -\defineXMLcommand % or process - [fo:region-body] - [\XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:margin-block}, - fe:z-order=above, - clip=, - column-count=1, - column-gap=12pt, - overflow=, - region-name=] - {\directsetup{fo:region-body:process}} - -\startsetups fo:region-body:process - \writeFOstatus{refreshing region-body parameters} -\stopsetups - -% todo: naar realfolio handelen ipv folio - -\mapXMLvalue {fo:odd-or-even} {odd} {odd} -\mapXMLvalue {fo:odd-or-even} {even} {even} - -\mapXMLvalue {fo:page-position} {any} {rest} % todo -\mapXMLvalue {fo:page-position} {first} {current} -\mapXMLvalue {fo:page-position} {last} {last} % todo -\mapXMLvalue {fo:page-position} {rest} {rest} % todo - -%mapXMLvalue {fo:blank-or-not-blank} {any} {} % todo -%mapXMLvalue {fo:blank-or-not-blank} {not-blank} {} % todo -%mapXMLvalue {fo:blank-or-not-blank} {blank} {} % todo - -% check this one esp default value - -\startsetups fo:layout:kind - - \XMLpav - {fo:odd-or-even} - {fo:conditional-page-master-reference} - {odd-or-even} - {\XMLpav - {fo:page-position} - {fo:conditional-page-master-reference} - {page-position} - {\XMLpar{fo:page-sequence-master}{master-reference}{any}}} - -\stopsetups - -% common border things - -% clip -% display-align -% extent -% overflow -% precedence -% region-name -% reference-orientation -% writing-mode - -%D Element: fo:region-before fo:region-after fo:region-start fo:region-end - -% border-before-color : <color> | inherit -% border-before-style : <border style> | inherit -% border-before-width.length|conditional : <border width> | <length conditional> | inherit -% -% style: none hidden dotted dashed solid double groove ridge inset outset -% width: thin medium thick length - -\mapXMLvalue {fo:display-align} {auto} {before} % todo: related to relative-align -\mapXMLvalue {fo:display-align} {before} {high} -\mapXMLvalue {fo:display-align} {after} {low} -\mapXMLvalue {fo:display-align} {center} {lohi} - -% display-align=, -% reference-orientation=, -% writing-mode=, - -\defineXMLcommand % will become process when stable - [fo:region-before] - [\XMLattributeset{fo:border-padding-background}, - clip=, - extent=, - overflow=, - precedence=, - region-name=] - {\directsetup{fo:region-before:process}} - -\startsetups fo:region-before:process - \writeFOstatus{refreshing region-before parameters} -\stopsetups - -\defineXMLprocess - [fo:region-after] - [\XMLattributeset{fo:border-padding-background}, - clip=, - extent=, - overflow=, - precedence=, - region-name=] - -\defineXMLprocess - [fo:region-start] - [\XMLattributeset{fo:border-padding-background}, - clip=, - extent=, - overflow=, - region-name=] - -\defineXMLprocess - [fo:region-end] - [\XMLattributeset{fo:border-padding-background}, - clip=, - extent=, - overflow=, - region-name=] - -\mapXMLvalue {fo:border-style} {none} {0} -\mapXMLvalue {fo:border-style} {hidden} {1} -\mapXMLvalue {fo:border-style} {dotted} {2} -\mapXMLvalue {fo:border-style} {dashed} {3} -\mapXMLvalue {fo:border-style} {solid} {4} -\mapXMLvalue {fo:border-style} {double} {5} -\mapXMLvalue {fo:border-style} {groove} {6} -\mapXMLvalue {fo:border-style} {ridge} {7} -\mapXMLvalue {fo:border-style} {inset} {8} -\mapXMLvalue {fo:border-style} {outset} {9} - -\mapXMLvalue {fo:border-width} {thin} {.25pt} -\mapXMLvalue {fo:border-width} {medium} {.5pt} -\mapXMLvalue {fo:border-width} {thick} {1pt} - -\startsetups fo:regions:check - - \startprocesscommalist[body,before,after,start,end] - - \checkFOborder{fo:region-\currentcommalistitem}{bottom} - \checkFOborder{fo:region-\currentcommalistitem}{top} - \checkFOborder{fo:region-\currentcommalistitem}{left} - \checkFOborder{fo:region-\currentcommalistitem}{right} - - \checkhexcolor[\XMLpar{fo:region-\currentcommalistitem}{border-bottom-color}{}] - \checkhexcolor[\XMLpar{fo:region-\currentcommalistitem}{border-top-color}{}] - \checkhexcolor[\XMLpar{fo:region-\currentcommalistitem}{border-left-color}{}] - \checkhexcolor[\XMLpar{fo:region-\currentcommalistitem}{border-right-color}{}] - \checkhexcolor[\XMLpar{fo:region-\currentcommalistitem}{background-color}{}] - - \checkFOposition{fo:region-\currentcommalistitem}{background} - \checkFOpadding {fo:region-\currentcommalistitem} - \checkFOmargin {fo:region-\currentcommalistitem} - - \stopprocesscommalist - -\stopsetups - -%D Element: fo:flow - -\defineXMLenvironment - [fo:flow] - [\XMLattributeset{fo:inherited}, - flow-name=unknown] - {\beginXMLelement\directsetup{fo:flow:start}} - {\directsetup{fo:flow:stop}\endXMLelement} - -\startsetups fo:flow:start - \begingroup -\stopsetups - -\startsetups fo:flow:stop - \endgroup -\stopsetups - -%D Element: fo:static-content - -% \beginXMLelement \endXMLelement - maybe save with attributes - -\defineXMLenvironmentsave - [fo:static-content] - [flow-name=unknown] - {} - {\directsetup{fo:static-content:process}} - -\startsetups fo:static-content:process - - \gsaveXMLdata{fo:static-content:\XMLop{flow-name}}{fo:static-content} - -\stopsetups - -\newdimen\FOscratchML \newdimen\FOscratchMR \newdimen\FOscratchMT \newdimen\FOscratchMB -\newdimen\FOscratchPB \newdimen\FOscratchPA \newdimen\FOscratchPS \newdimen\FOscratchPE -\newdimen\FOscratchRB \newdimen\FOscratchRA \newdimen\FOscratchRS \newdimen\FOscratchRE - -\mapXMLvalue {fo:background-repeat} {no-repeat} {0} -\mapXMLvalue {fo:background-repeat} {repeat} {1} -\mapXMLvalue {fo:background-repeat} {repeat-x} {2} -\mapXMLvalue {fo:background-repeat} {repeat-y} {3} - -\expanded {\mapXMLvalue {fo:background-location} {left} {0\letterpercent}} -\expanded {\mapXMLvalue {fo:background-location} {right} {100\letterpercent}} -\expanded {\mapXMLvalue {fo:background-location} {top} {0\letterpercent}} -\expanded {\mapXMLvalue {fo:background-location} {bottom} {100\letterpercent}} -\expanded {\mapXMLvalue {fo:background-location} {center} {50\letterpercent}} - -\newdimen\FObgpositionH -\newdimen\FObgpositionV - -\def\FObackgroundimage#1#2#3% - {\doifnot{\XMLpar{fo:#1}{background-image}{none}}{none} - {\setFOimagename{\XMLpar{fo:#1}{background-image}{dummy}}% - \FObgpositionH#2% - \setpercentdimen\FObgpositionH{\XMLpav - {fo:background-location} - {fo:#1} - {background-position-horizontal} - {\XMLpar{fo:#1}{background-position-horizontal}{}}}% - \ifpercentdimendone - \skip0\zeropoint plus \FObgpositionH - \skip2\zeropoint plus \dimexpr(#2-\FObgpositionH)% - \else - \skip0\FObgpositionH - \skip2\zeropoint plus 1fill\relax - \fi - \FObgpositionV#3% - \setpercentdimen\FObgpositionV{\XMLpav - {fo:background-location}{fo:#1}{background-position-vertical} - {\XMLpar{fo:#1}{background-position-vertical}{}}}% - \ifpercentdimendone - \skip4\zeropoint plus \FObgpositionV - \skip6\zeropoint plus \dimexpr(#3-\FObgpositionV)% - \else - \skip4\FObgpositionV - \skip6\zeropoint plus 1fill\relax - \fi - \vbox to #3 \bgroup - \vskip\skip4\relax - \hbox to #2 \bgroup - \hskip\skip0\relax - \backgroundimage - {\XMLpav{fo:background-repeat}{fo:#1}{background-repeat}{}}{#2}{#3}% - {\externalfigure - [\FOimagename] - [width=\XMLpar{fo:#1}{fe:background-width}{}, - height=\XMLpar{fo:#1}{fe:background-height}{}]}% - \hskip\skip2\relax - \egroup - \vskip\skip6\relax - \egroup}} - -\def\checkFOclipping#1% - {\doifsomething{\XMLpar{#1}{clip}{}} - {\analyzefunction{\XMLpar{#1}{clip}{}}% - \doif\functionname{rect} - {\def\postprocessframebox##1% - {\edef\next{\dimen0=\the\wd##1\dimen2=\the\ht##1\dimen4=\the\dp##1}% - \setbox##1\hbox - {\clip % expanded? - [topoffset=-\functionA, - bottomoffset=-\functionC, - leftoffset=-\functionD, - rightoffset=-\functionB] - {\box##1}}% - \next}}}} - -\def\clipFOarea#1% - {\doifsomething{\XMLpar{#1}{clip}{}}% - {\analyzefunction{\XMLpar{#1}{clip}{}}% - \doif\functionname{rect} - {\setbox\scratchbox\hbox{\foregroundbox}% - \edef\next{\dimen0=\the\wd\scratchbox\dimen2=\the\ht\scratchbox\dimen4=\the\dp\scratchbox}% - \setbox\scratchbox\hbox - {\clip % expanded? - [topoffset=-\functionA, - bottomoffset=-\functionC, - leftoffset=-\functionD, - rightoffset=-\functionB] - {\box\scratchbox}}% - \next - \box\scratchbox}}} - -\defineoverlay - [text] - [\clipFOarea{fo:region-body}] - -\setupbackgrounds - [text] - [background=text] - -\def\FOregionbuilder#1#2#3#4#5#6% #1=location #2=preset #3=x #4=y #5=width #6=height - {\writeFOstatus{building region #1}% - \defineoverlay - [image] - [{\framed - [frame=off, - orientation=\XMLpav{fo:reference-orientation}{fo:#1}{reference-orientation}{0}, - offset=overlay, - height=\overlayheight, - width=\overlaywidth] - {\FObackgroundimage{#1}\hsize\vsize}}]% - \setlayerframed - [regions] - [preset=#2,x=\dimexpr(#3),y=\dimexpr(#4)] - [frame=off, - offset=overlay,background={#1-graphic,image,xsl-#1}, - width=\dimexpr(#5),height=\dimexpr(#6)] - {\lrtbbox - {\XMLpar{fo:#1}{padding-left}\zeropoint}% - {\XMLpar{fo:#1}{padding-right}\zeropoint}% - {\XMLpar{fo:#1}{padding-top}\zeropoint}% - {\XMLpar{fo:#1}{padding-bottom}\zeropoint}% - {\checkFOclipping{fo:#1}% - \framed - [frame=off, - offset=overlay, - orientation=\XMLpav{fo:reference-orientation}{fo:#1}{reference-orientation}{0}, - align={\XMLpav{fo:display-align}{fo:#1}{display-align}{high},\XMLpav{fo:align-key}{fo:#1}{text-align}{normal}}, - width=\hsize,height=\vsize] - {\doFObeforeskip{fo:#1}% - \flushXMLelement{fo:static-content:\XMLpar{fo:#1}{region-name}{xsl-#1}}}% - \doFOafterskip{fo:#1}}}} - -\startsetups fo:regions:process - - \directsetup{fo:regions:check} - - \checkFOmargin{fo:simple-page-master-do} - - \FOscratchMT\paperheight \setpercentdimen\FOscratchMT{\XMLpar{fo:simple-page-master-do}{margin-top} \zeropoint} - \FOscratchMB\paperheight \setpercentdimen\FOscratchMB{\XMLpar{fo:simple-page-master-do}{margin-bottom}\zeropoint} - \FOscratchML\paperwidth \setpercentdimen\FOscratchML{\XMLpar{fo:simple-page-master-do}{margin-left} \zeropoint} - \FOscratchMR\paperwidth \setpercentdimen\FOscratchMR{\XMLpar{fo:simple-page-master-do}{margin-right} \zeropoint} - - \doif{\XMLpar{fo:region-body}{fe:z-order}{above}}{below}{\directsetup{fo:regions:process:body}} - - \FOscratchRB\paperheight \setpercentdimen\FOscratchRB{\XMLpar{fo:region-before}{extent}\zeropoint} - \FOscratchRA\paperheight \setpercentdimen\FOscratchRA{\XMLpar{fo:region-after} {extent}\zeropoint} - \FOscratchRS\paperwidth \setpercentdimen\FOscratchRS{\XMLpar{fo:region-start} {extent}\zeropoint} - \FOscratchRE\paperwidth \setpercentdimen\FOscratchRE{\XMLpar{fo:region-end} {extent}\zeropoint} - - \doifelse{\XMLpar{fo:region-before}{precedence}{false}}{true} - {\doifelse{\XMLpar{fo:region-after}{precedence}{false}}{true} - {\directsetup{fo:regions:process:true:true}} - {\directsetup{fo:regions:process:true:false}}} - {\doifelse{\XMLpar{fo:region-after}{precedence}{false}}{true} - {\directsetup{fo:regions:process:false:true}} - {\directsetup{fo:regions:process:false:false}}} - - \doif{\XMLpar{fo:region-body}{fe:z-order}{above}}{above}{\directsetup{fo:regions:process:body}} - -\stopsetups - -\newdimen\FOscratchEB -\newdimen\FOscratchEA - -\chardef\FOregionmode\zerocount - -\startmode[fo-pt] - \chardef\FOregionmode\plusone % fotex mode -) -\stopmode - -\startsetups fo:regions:modes - - \ifcase\FOregionmode - \FOscratchEB\zeropoint - \FOscratchEA\zeropoint - \or - \FOscratchEB\paperheight \setpercentdimen\FOscratchEB{\XMLpar{fo:region-before}{extent}\zeropoint} - \FOscratchEA\paperheight \setpercentdimen\FOscratchEA{\XMLpar{fo:region-after} {extent}\zeropoint} - \else - \FOscratchEB\zeropoint - \FOscratchEA\zeropoint - \fi - -\stopsetups - -\startsetups fo:regions:process:body - - \bgroup - - \FOscratchRB\paperheight \setpercentdimen\FOscratchRB{\XMLpar{fo:region-body}{margin-top} \zeropoint} - \FOscratchRA\paperheight \setpercentdimen\FOscratchRA{\XMLpar{fo:region-body}{margin-bottom}\zeropoint} - \FOscratchRS\paperwidth \setpercentdimen\FOscratchRS{\XMLpar{fo:region-body}{margin-left} \zeropoint} - \FOscratchRE\paperwidth \setpercentdimen\FOscratchRE{\XMLpar{fo:region-body}{margin-right} \zeropoint} - - \FOregionbuilder - {region-body} - {lefttop} - {\FOscratchML+\FOscratchRS} - {\FOscratchMT+\FOscratchRA} - {\paperwidth -\FOscratchML-\FOscratchMR-\FOscratchRS-\FOscratchRE} - {\paperheight-\FOscratchMT-\FOscratchMB-\FOscratchRB-\FOscratchRA} - - \egroup - -\stopsetups - -\startsetups fo:regions:process:true:true - - \directsetup{fo:regions:modes} - - \ifdim\FOscratchRB>\zeropoint \FOregionbuilder - {region-before}{lefttop} - {\FOscratchML}{\FOscratchMT-\FOscratchEB} - {\paperwidth-\FOscratchML-\FOscratchMR}{\FOscratchRB} - \fi \ifdim\FOscratchRA>\zeropoint \FOregionbuilder - {region-after}{leftbottom} - {\FOscratchML}{\FOscratchMB-\FOscratchEA} - {\paperwidth-\FOscratchML-\FOscratchMR}{\FOscratchRA} - \fi \ifdim\FOscratchRS>\zeropoint \FOregionbuilder - {region-start}{lefttop} - {\FOscratchML}{\FOscratchMT+\FOscratchRB} - {\FOscratchRS}{\paperheight-\FOscratchMT-\FOscratchMB-\FOscratchRA-\FOscratchRB} - \fi \ifdim\FOscratchRE>\zeropoint \FOregionbuilder - {region-end}{righttop} - {\FOscratchMR}{\FOscratchMT+\FOscratchRA} - {\FOscratchRE}{\paperheight-\FOscratchMT-\FOscratchMB-\FOscratchRA-\FOscratchRB} - \fi - -\stopsetups - -\startsetups fo:regions:process:false:true - - \directsetup{fo:regions:modes} - - \ifdim\FOscratchRB>\zeropoint \FOregionbuilder - {region-before}{lefttop} - {\FOscratchML+\FOscratchRS}{\FOscratchMT-\FOscratchEB} - {\paperwidth-\FOscratchML-\FOscratchMR-\FOscratchRS-\FOscratchRE}{\FOscratchRB} - \fi \ifdim\FOscratchRA>\zeropoint \FOregionbuilder - {region-after}{leftbottom} - {\FOscratchML}{\FOscratchMB-\FOscratchEA} - {\paperwidth-\FOscratchML-\FOscratchMR}{\FOscratchRA} - \fi \ifdim\FOscratchRS>\zeropoint \FOregionbuilder - {region-start}{lefttop} - {\FOscratchML}{\FOscratchMT} - {\FOscratchRS}{\paperheight-\FOscratchMB-\FOscratchRA-\FOscratchRB} - \fi \ifdim\FOscratchRE>\zeropoint \FOregionbuilder - {region-end}{righttop} - {\FOscratchMR}{\FOscratchMT} - {\FOscratchRE}{\paperheight-\FOscratchMB-\FOscratchRA-\FOscratchRB} - \fi - -\stopsetups - -\startsetups fo:regions:process:true:false - - \directsetup{fo:regions:modes} - - \ifdim\FOscratchRB>\zeropoint \FOregionbuilder - {region-before}{lefttop} - {\FOscratchML}{\FOscratchMT-\FOscratchEB} - {\paperwidth-\FOscratchML-\FOscratchMR}{\FOscratchRB} - \fi \ifdim\FOscratchRA>\zeropoint \FOregionbuilder - {region-after}{leftbottom} - {\FOscratchML+\FOscratchRS}{\FOscratchMB-\FOscratchEA} - {\paperwidth-\FOscratchML-\FOscratchMR-\FOscratchRS-\FOscratchRE}{\FOscratchRA} - \fi \ifdim\FOscratchRS>\zeropoint \FOregionbuilder - {region-start}{lefttop} - {\FOscratchML}{\FOscratchMT+\FOscratchRB} - {\FOscratchRS}{\paperheight-\FOscratchMT-\FOscratchMB-\FOscratchRB} - \fi \ifdim\FOscratchRE>\zeropoint \FOregionbuilder - {region-end}{righttop} - {\FOscratchMR}{\FOscratchMT+\FOscratchRA} - {\FOscratchRE}{\paperheight-\FOscratchMT-\FOscratchMB-\FOscratchRB} - \fi - -\stopsetups - -\startsetups fo:regions:process:false:false - - \directsetup{fo:regions:modes} - - \ifdim\FOscratchRB>\zeropoint \FOregionbuilder - {region-before}{lefttop} - {\FOscratchML+\FOscratchRS}{\FOscratchMT-\FOscratchEB} - {\paperwidth-\FOscratchML-\FOscratchMR-\FOscratchRS-\FOscratchRE}{\FOscratchRB} - \fi \ifdim\FOscratchRA>\zeropoint \FOregionbuilder - {region-after}{leftbottom} - {\FOscratchML+\FOscratchRS}{\FOscratchMB-\FOscratchEA} - {\paperwidth-\FOscratchML-\FOscratchMR-\FOscratchRS-\FOscratchRE}{\FOscratchRA} - \fi \ifdim\FOscratchRS>\zeropoint \FOregionbuilder - {region-start}{lefttop} - {\FOscratchML}{\FOscratchMT} - {\FOscratchRS}{\paperheight-\FOscratchMT-\FOscratchMB} - \fi \ifdim\FOscratchRE>\zeropoint \FOregionbuilder - {region-end}{righttop} - {\FOscratchMR}{\FOscratchMT} - {\FOscratchRE}{\paperheight-\FOscratchMT-\FOscratchMB} - \fi - -\stopsetups - -\startsetups fo:before:each:page - - \writeFOstatus{setting up layout \currentlayout} - \directsetup{layout:\currentlayout} - \directsetup{fo:regions:process} - -\stopsetups - -\prependtoks - \directsetup{fo:before:each:page}% -\to \everybeforepagebody - -%D Element: fo:title - -% \XMLattributeset{fo:aural}, -% color=, -% line-height=, - -\defineXMLignore - [fo:title] - [\XMLattributeset{fo:inherited},\XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:font}, - \XMLattributeset{fo:margin-inline}, - visibility=] - -%D Element: fo:block - -\defineXMLenvironment - [fo:block] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fe:tracing}, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:font}, - \XMLattributeset{fo:hyphenation}, - \XMLattributeset{fo:margin-block}, - \XMLattributeset{fo:relative-position}, - \XMLattributeset{fo:keeps-and-breaks}, -% text-depth=, -% text-altitude=, - span=, - visibility=] - {\beginXMLelement\directsetup{fo:block:start}} - {\directsetup{fo:block:stop}\endXMLelement} - -\startsetups fo:block:start - - \endgraf - - \writeFOstatus{fo:block in line \the\inputlineno} - -\doif{\XMLpar{fo:block}{span}{}}{all}{\ifinsidecolumns \startcolumnsetspan[fo:set] \fi} - - \begingroup - - \directsetup{fe:setup} - - \directsetup{fo:break-and-space:before} - - \begingroup - - \setFOreference{fo:block} - - \increment\FOblocklevel - - \directsetup{fo:font:setup} - - % \setupinterlinespace % no, interferes with columnset and lineheight - - \directsetup{fo:line-height:setup} - - \directsetup{fo:indent:setup}% hier ? - - \doifsomething{\XMLop{background-color}} - {\checkhexcolor[\XMLop{background-color}] - \doifcolorelse{\XMLop{background-color}} - \donothing - {\setXMLpar{fo:block}{background-color}{}}} - - \doifsomething{\XMLop{color}} - {\checkhexcolor[\XMLop{color}] - \doifcolorelse{\XMLop{color}} - \donothing - {\setXMLpar{fo:block}{color}{}}} - - \doifsomething{\XMLop{background-color}} - {\expanded - {\definetextbackground - [FOattribute-\FOblocklevel] - [location=paragraph, - color=\XMLop{color}, - style=, - before=, - after=, - background=color, - backgroundcolor=\XMLop{background-color}]}} - - \endgraf - - \getvalue{startFOattribute-\FOblocklevel} - - \directsetup{fo:hyphenation:setup} - \directsetup{fo:align:setup} - \directsetup{fo:margin:setup} - - \doif{\XMLop{wrap-option}}{no-wrap} - {\obeylines} - - \doif{\XMLop{white-space-collapse}}{false} - {\obeyspaces} - - % todo : remember old one and do like fonts - - \directsetup{fo:textindent:setup} - -\stopsetups - -\startsetups fo:block:stop - - \endstrut \endgraf - - \getvalue{stopFOattribute-\FOblocklevel} - - \endgraf - - \endgroup - - \directsetup{fo:break-and-space:after} - - \endgroup - - \doif{\XMLpar{fo:block}{span}{}}{all}{\ifinsidecolumns \stopcolumnsetspan \fi} - -\stopsetups - -\startsetups fo:textindent:setup - - \edefXMLinh\xFOtextindent{text-indent} - - \doifsomething\xFOtextindent - {\scratchdimen\hsize - \setpercentdimen\scratchdimen\xFOtextindent - \expanded{\setupindenting[\the\scratchdimen]}} - -\stopsetups - -\indenting[always] % can be zero points - -% todo: map - -\mapXMLvalue {fo:break} {column} {\column} -\mapXMLvalue {fo:break} {page} {\page} -\mapXMLvalue {fo:break} {even-page} {\page[even]} -\mapXMLvalue {fo:break} {odd-page} {\page[odd]} - -% keep-together : either vbox or something \interlinepenalty\maxdimen ? -% -% nasty interference with accumulated skips - -\mapXMLvalue {fo:keep-next} {auto} {} -\mapXMLvalue {fo:keep-next} {always} {\nobreak} - -\mapXMLvalue {fo:keep-prev} {auto} {} -\mapXMLvalue {fo:keep-prev} {always} {\nobreak} - -\mapXMLvalue {fo:keep-start} {auto} {} -\mapXMLvalue {fo:keep-start} {always} {\interlinepenalty\maxdimen} - -\mapXMLvalue {fo:keep-stop} {auto} {} -\mapXMLvalue {fo:keep-stop} {always} {} - -\newskip\FOsavedlastskip - -\startsetups fo:break-and-space:before - - \XMLval{fo:break}{\XMLop{break-before}}{} - - \FOsavedlastskip \lastskip \ifdim\FOsavedlastskip>\zeropoint \vskip-\FOsavedlastskip \fi - - \XMLval{fo:keep-start}{\XMLop{keep-together}}\empty - \XMLval{fo:keep-start}{\XMLop{keep-together.within-column}}\empty - \XMLval{fo:keep-start}{\XMLop{keep-together.within-page}}\empty - - \XMLval{fo:keep-prev} {\XMLop{keep-with-previous}}\empty - \XMLval{fo:keep-prev} {\XMLop{keep-with-previous.within-column}}\empty - \XMLval{fo:keep-prev} {\XMLop{keep-with-previous.within-page}}\empty - - \ifdim\FOsavedlastskip>\zeropoint \vskip\FOsavedlastskip \fi - - \doFObeforeskip\currentXMLelement - -\stopsetups - -\startsetups fo:break-and-space:after - -% \doFOafterskip\currentXMLelement - - \FOsavedlastskip \lastskip \ifdim\FOsavedlastskip>\zeropoint \vskip-\FOsavedlastskip \fi - - \XMLval{fo:keep-stop}{\XMLop{keep-together}}\empty - \XMLval{fo:keep-stop}{\XMLop{keep-together.within-column}}\empty - \XMLval{fo:keep-stop}{\XMLop{keep-together.within-page}}\empty - - \XMLval{fo:keep-next}{\XMLop{keep-with-next}}\empty - \XMLval{fo:keep-next}{\XMLop{keep-with-next.within-column}}\empty - \XMLval{fo:keep-next}{\XMLop{keep-with-next.within-page}}\empty - - \ifdim\FOsavedlastskip>\zeropoint \vskip\FOsavedlastskip \fi - - \doFOafterskip\currentXMLelement - - \XMLval{fo:break}{\XMLop{break-after}}{} - -\stopsetups - -\startsetups fo:space:start - \doFOstartspace\currentXMLelement -\stopsetups - -\startsetups fo:space:end - \doFOendspace\currentXMLelement -\stopsetups - -\startsetups fo:indent:setup - - \doifsomething{\XMLop{start-indent}}{\advance\leftskip \XMLop{start-indent}\relax} - \doifsomething{\XMLop{end-indent}} {\advance\rightskip\XMLop{end-indent} \relax} - -% \FOattributeT -% \FOattributeR -% \FOattributeB -% \FOattributeL - - -\stopsetups - -\mapXMLvalue {fo:align} {center} {\raggedcenter} -\mapXMLvalue {fo:align} {left} {\raggedright} -\mapXMLvalue {fo:align} {right} {\raggedleft} -\mapXMLvalue {fo:align} {begin} {\raggedright} -\mapXMLvalue {fo:align} {start} {\raggedright} -\mapXMLvalue {fo:align} {end} {\raggedleft} - -\mapXMLvalue {fo:align-key} {center} {middle} -\mapXMLvalue {fo:align-key} {left} {flushleft} -\mapXMLvalue {fo:align-key} {right} {flushright} -\mapXMLvalue {fo:align-key} {begin} {flushleft} -\mapXMLvalue {fo:align-key} {start} {flushleft} -\mapXMLvalue {fo:align-key} {end} {flushright} - -\startsetups fo:align:setup - - \XMLval{fo:align}{\XMLop{text-align}}{} - -\stopsetups - -\startsetups fo:margin:setup - - \checkFOmargin{fo:block} - - \FOscratchML \XMLpar{fo:block}{margin-left} \zeropoint - \FOscratchMR \XMLpar{fo:block}{margin-right} \zeropoint - \FOscratchMT \XMLpar{fo:block}{margin-top} \zeropoint - \FOscratchMB \XMLpar{fo:block}{margin-bottom}\zeropoint - - \advance\leftskip \FOscratchML - \advance\rightskip\FOscratchMR - -\stopsetups - -% todo: font-stretch -% -% ultra-condensed -% extra-condensed -% condensed -% semi-condensed -% expanded -% extra-expanded -% ultra-expanded -% -% wider narrower - -\mapXMLvalue {fo:font-size} {xx-small} {\dFOfontsize0.58\dFOfontsize} -\mapXMLvalue {fo:font-size} {x-small} {\dFOfontsize0.69\dFOfontsize} -\mapXMLvalue {fo:font-size} {small} {\dFOfontsize0.83\dFOfontsize} -\mapXMLvalue {fo:font-size} {medium} {\relax} -\mapXMLvalue {fo:font-size} {large} {\dFOfontsize1.20\dFOfontsize} -\mapXMLvalue {fo:font-size} {x-large} {\dFOfontsize1.44\dFOfontsize} -\mapXMLvalue {fo:font-size} {xx-large} {\dFOfontsize1.73\dFOfontsize} - -\mapXMLvalue {fo:font-size} {smaller} {\dFOfontsize0.83\dFOfontsize} -\mapXMLvalue {fo:font-size} {larger} {\dFOfontsize1.20\dFOfontsize} - -\newdimen\dFOfontsize - -% evt class Times Helvetica - -\definefontsynonym [FO:Times] [Times-Roman] -\definefontsynonym [FO:Times:bold] [Times-Bold] -\definefontsynonym [FO:Times:italic] [Times-Italic] -\definefontsynonym [FO:Times:bold:italic] [Times-BoldItalic] - -\definefontsynonym [FO:Times:small-caps] [Times-Roman] -\definefontsynonym [FO:Times:bold:small-caps] [Times-Bold] -\definefontsynonym [FO:Times:italic:small-caps] [Times-Italic] -\definefontsynonym [FO:Times:bold:italic:small-caps] [Times-BoldItalic] - -\definefontsynonym [FO:Helvetica] [Helvetica] -\definefontsynonym [FO:Helvetica:bold] [Helvetica-Bold] -\definefontsynonym [FO:Helvetica:italic] [Helvetica-Italic] -\definefontsynonym [FO:Helvetica:bold:italic] [Helvetica-BoldItalic] - -\definefontsynonym [FO:Helvetica:small-caps] [Helvetica] -\definefontsynonym [FO:Helvetica:bold:small-caps] [Helvetica-Bold] -\definefontsynonym [FO:Helvetica:italic:small-caps] [Helvetica-Italic] -\definefontsynonym [FO:Helvetica:bold:italic:small-caps] [Helvetica-BoldItalic] - -\definefontsynonym [FO:Courier] [Courier] -\definefontsynonym [FO:Courier:bold] [Courier-Bold] -\definefontsynonym [FO:Courier:italic] [Courier-Oblique] -\definefontsynonym [FO:Courier:bold:italic] [Courier-BoldOblique] - -\definefontsynonym [FO:Courier:small-caps] [Courier] -\definefontsynonym [FO:Courier:bold:small-caps] [Courier-Bold] -\definefontsynonym [FO:Courier:italic:small-caps] [Courier-Oblique] -\definefontsynonym [FO:Courier:bold:italic:small-caps] [Courier-BoldOblique] - -\definefontsynonym [FO:Symbol] [ZapfDingbats] - -\definefontsynonym [FO:Computer-Modern-Typewriter] [ComputerModernMono] -\definefontsynonym [FO:Computer-Modern-Typewriter:italic] [ComputerModernMono-Slanted] - -\definefontsynonym [*Times Roman*] [Times] - -% nasty: no FO prefix - -\definefontsynonym [*serif*] [Times] -\definefontsynonym [*sans-serif*] [Helvetica] -\definefontsynonym [*monospace*] [Courier] - -\definefontsynonym [*cursive*] [Times] -\definefontsynonym [*fantasy*] [Helvetica] - -\definefontsynonym [*Arial*] [Helvetica] -\definefontsynonym [*Times Roman*] [Times] -\definefontsynonym [*Wingdings*] [ZapfDingbats] - -% \definefontsynonym [Computer-Modern-Typewriter] [ComputerModernMono] -% \definefontsynonym [monospace] [ComputerModernMono] - -\startsetups fo:fonts:reset - - \dFOfontsize=\bodyfontsize - - \def\FOfontsize {10pt}% {12pt} - \def\FOfontfamily {Times} - \def\FOfontweight {normal} - \def\FOfontstyle {normal} - \def\FOfontvariant {normal} - \def\FOfontsizeadjust{1} - - \def\FOtextdepth {} - \def\FOtextaltitude {} - \def\FOlineheight {} - - \def\FOfontdefinition{} - \def\FOfontname {} - -\stopsetups - -\def\FOfontdefinition{} -\def\FOfontname {} - -\directsetup{fo:fonts:reset} - -% test for \FOfontvariant: normal or else - -\def\setFOfontname - {\edef\xFOfontname{FO:\FOfontfamily:\FOfontweight:\FOfontstyle:\FOfontvariant}% - %\begingroup\infofont\xFOfontname]\endgroup - \doifelsefontsynonym\xFOfontname - {\let\FOfontname\xFOfontname} - {\edef\xFOfontname{FO:\FOfontfamily:\FOfontweight:\FOfontstyle}% - \doifelsefontsynonym\xFOfontname - {\let\FOfontname\xFOfontname} - {\edef\xFOfontname{FO:\FOfontfamily:\FOfontstyle}% - \doifelsefontsynonym\xFOfontname - {\let\FOfontname\xFOfontname} - {\edef\xFOfontname{FO:\FOfontfamily:\FOfontweight}% - \doifelsefontsynonym\xFOfontname - {\let\FOfontname\xFOfontname} - {\edef\xFOfontname{FO:\FOfontfamily}% - \doifelsefontsynonym\xFOfontname - {\let\FOfontname\xFOfontname} - {}}}}}} - -% \unprotected \def\doifelseFOfontsynonym#1#2#3#4#5% family weight style variant default -% {\edef\FOfontname -% {\ifcsname \??ff\fontclass FO:#1:#2:#3:#4\endcsname FO:#1:#2:#3:#4% -% \else\ifcsname\??ff\fontclass FO:#1:#2:#3\endcsname FO:#1:#2:#3% -% \else\ifcsname\??ff\fontclass FO:#1:#3\endcsname FO:#1:#3% -% \else\ifcsname\??ff\fontclass FO:#1:#2\endcsname FO:#1:#2% -% \else\ifcsname\??ff\fontclass FO:#1\endcsname FO:#1% -% \else #5% -% \fi\fi\fi\fi\fi}} - -\startsetups fo:font:family:check - - \doifelsefontsynonym{*\FOfontfamily*} - {\expandfontsynonym\FOfontfamily{*\FOfontfamily*}} - {} - -\stopsetups - -\let\FOfont\empty - -\startsetups fo:font:setup - - % todo: optimize, define fonts first time and do that global - - \edefXMLinh\xFOfont {font} - \edefXMLinh\xFOfontsize {font-size} - \edefXMLinh\xFOfontsizeadjust{font-size-adjust} - \edefXMLinh\xFOfontfamily {font-family} - \edefXMLinh\xFOfontweight {font-weight} - \edefXMLinh\xFOfontstyle {font-style} - \edefXMLinh\xFOfontvariant {font-variant} - -% \edef\xFOfont {\XMLpar{fo}{font}{}} -% \edef\xFOfontsize {\XMLpar{fo}{font-size}{}} -% \edef\xFOfontsizeadjust{\XMLpar{fo}{font-size-adjust}{}} -% \edef\xFOfontfamily {\XMLpar{fo}{font-family}{}} -% \edef\xFOfontweight {\XMLpar{fo}{font-weight}{}} -% \edef\xFOfontstyle {\XMLpar{fo}{font-style}{}} -% \edef\xFOfontvariant {\XMLpar{fo}{font-variant}{}} - - \donefalse - - \ifx\xFOfont\empty \else \ifx\xFOfont\relax \else - \let\FOfont\xFOfont - \checkFOfont\FOfont - \fi \fi - - \ifx\xFOfontsize\empty \else \ifx\xFOfontsize\FOfontsize \else - \let\FOfontsize\xFOfontsize - \doifXMLvalelse{fo:font-size}\FOfontsize - {\XMLval{fo:font-size}\FOfontsize\empty} - {\setpercentdimen\dFOfontsize\FOfontsize} - \fi \fi - - \ifx\xFOfontsizeadjust\empty \else - \doifelse\xFOfontsizeadjust{none} - {\def\FOfontsizeadjust{1}} - {\let\FOfontsizeadjust\xFOfontsizeadjust} - \fi - - \ifx\xFOfontfamily\empty \else \ifx\xFOfontfamily\FOfontfamily \else - \donetrue \let\FOfontfamily\xFOfontfamily \directsetup{fo:font:family:check} - \fi \fi - \ifx\xFOfontweight\empty \else \ifx\xFOfontweight\FOfontweight \else - \donetrue \let\FOfontweight\xFOfontweight - \fi \fi - \ifx\xFOfontstyle\empty \else \ifx\xFOfontstyle\FOfontstyle \else - \donetrue \let\FOfontstyle\xFOfontstyle - \fi \fi - \ifx\xFOfontvariant\empty \else \ifx\xFOfontvariant\FOfontvariant \else - \donetrue \let\FOfontvariant\xFOfontvariant - \fi \fi - - \ifdone - \setFOfontname - \ifx\FOfontname\empty % klopt dit - \edef\xFOfontdefinition{\purefontname{\font} at \the\dimexpr(\FOfontsizeadjust\dFOfontsize)} -% \let\xFOfontdefinition\empty - \else - \edef\xFOfontdefinition{\FOfontname\space at \the\dimexpr(\FOfontsizeadjust\dFOfontsize)} - \fi - \else - \edef\xFOfontdefinition{\purefontname{\font} at \the\dimexpr(\FOfontsizeadjust\dFOfontsize)} - \fi - - \ifx\xFOfontdefinition\empty \else - \ifx\FOfontdefinition\xFOfontdefinition - \else - \let\FOfontdefinition\xFOfontdefinition - \expanded{\definedfont[\FOfontdefinition]} - \fi - \fi - -\stopsetups - -\newdimen\dFOlineheight -\newdimen\dFOdepth -\newdimen\dFOaltitude - -\let\FOlineheight \empty -\let\FOtextdepth \empty -\let\FOtextaltitude\empty - -\startsetups fo:line-height:setup - - \edefXMLinh\xFOtextdepth {text-depth} - \edefXMLinh\xFOtextaltitude{text-altitude} - \edefXMLinh\xFOlineheight {line-height} - -% \edef\xFOtextdepth {\XMLpar{fo}{text-depth}{}} -% \edef\xFOtextaltitude{\XMLpar{fo}{text-altitude}{}} -% \edef\xFOlineheight {\XMLpar{fo}{line-height}{}} - - \ifx\xFOtextdepth\empty \else \ifx\xFOtextdepth\FOtextdepth \else - \let\FOtextdepth\xFOtextdepth - \doifnot\FOtextdepth{use-font-metrics} - {\setstrut \dFOdepth\strutdepth - \setpercentdimen\dFOdepth\FOtextdepth - \setupinterlinespace[mindepth=\dFOdepth]} - \fi \fi - - \ifx\xFOtextaltitude\empty \else \ifx\xFOtextaltitude\FOtextaltitude \else - \let\FOtextaltitude\xFOtextaltitude - \doifnot\FOtextaltitude{use-font-metrics} - {\setstrut \dFOaltitude\strutheight \advance\dFOaltitude\strutdepth - \setpercentdimen\dFOaltitude\FOtextaltitude - \setupinterlinespace[minheight=\dFOaltitude]} - \fi \fi - -\ifinsidecolumns \else - - \ifx\xFOlineheight\empty \else \ifx\xFOlineheight\FOlineheight \else - \let\FOlineheight\xFOlineheight - \doifelse\FOlineheight{normal} - {\dFOlineheight2.8ex - \setupinterlinespace[line=\dFOlineheight]} - {\doifnot\FOlineheight{use-font-metrics} - {\setstrut \dFOlineheight\strutheight \advance\dFOlineheight\strutdepth - \setpercentdimen\dFOlineheight\FOlineheight - \setupinterlinespace[line=\dFOlineheight]}} - \fi \fi - -\fi - -\stopsetups - -\let\orphanpenalty \clubpenalty -\let\orphanpenalties\clubpenalties - -\newcount\FOwidows \FOwidows =2 -\newcount\FOorphans \FOorphans=2 - -\mapXMLvalue {fo:hyphens} {false} {\nohyphens} -\mapXMLvalue {fo:hyphens} {true} {\dohyphens} - -\startsetups fo:hyphenation:setup - - \edefXMLinh\xFOhyphenate {hyphenate} - \edefXMLinh\xFOwidows {widows} - \edefXMLinh\xFOorphans {orphans} - -% \edef\xFOhyphenate {\XMLpar{fo}{hyphenate}{}} -% \edef\xFOwidows {\XMLpar{fo}{widows}{}} -% \edef\xFOorphans {\XMLpar{fo}{orphans}{}} - - \ifx\xFOhyphenate\empty \else - \XMLval{fo:hyphens}{\xFOhyphenate}\empty - \fi - \ifx\xFOwidows\empty \else \ifnum\xFOwidows=\FOwidows \else - \FOwidows\xFOwidows \setpenalties\widowpenalties\FOwidows\maxdimen - \fi \fi - \ifx\xFOorphans\empty \else \ifnum\xFOorphans=\FOorphans \else - \FOorphans\xFOorphans \setpenalties\clubpenalties\FOorphans\maxdimen - \fi \fi - - % hyphenation-character - -\stopsetups - -%D fo:block-container - -% todo: potential optimization: set fonts and spacing at container level - -% display-align=, -% intrusion-displace=, -% reference-orientation=, -% writing-mode=, - -\defineXMLenvironment - [fo:block-container] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fe:tracing}, - \XMLattributeset{fo:absolute-positioning}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:margin-block}, - \XMLattributeset{fo:keeps-and-breaks}, - block-progression-dimension=, - inline-progression-dimension=, - clip=, - height=, - overflow=, - span=, - width=, - z-index=] - {\beginXMLelement\directsetup{fo:block-container:start}} - {\directsetup{fo:block-container:stop}\endXMLelement} - -\mapXMLvalue {fo:block-container:start} {absolute} {\directsetup{fo:block-container:start:pos}} -\mapXMLvalue {fo:block-container:start} {fixed} {\directsetup{fo:block-container:start:pos}} - -\mapXMLvalue {fo:block-container:stop} {absolute} {\directsetup{fo:block-container:stop:pos}} -\mapXMLvalue {fo:block-container:stop} {fixed} {\directsetup{fo:block-container:stop:pos}} - -\startsetups fo:block-container:start - - \XMLval{fo:block-container:start}{\XMLpar{fo:block-container}{absolute-position}{}}{} - - \setFOreference{fo:block-container} - -\stopsetups - -\startsetups fo:block-container:stop - - \XMLval{fo:block-container:stop}{\XMLpar{fo:block-container}{absolute-position}{}}{} - -\stopsetups - -% i need to figure out the details (specs are a bit fuzzy) - -% replaced, see position - -\newdimen\FOcontainerW \newdimen\FOcontainerX \newdimen\FOcontainerL \newdimen\FOcontainerR \newdimen\FOcontainerWW -\newdimen\FOcontainerH \newdimen\FOcontainerY \newdimen\FOcontainerT \newdimen\FOcontainerB \newdimen\FOcontainerHH - -\startsetups fo:block-container:start:pos - - % todo: textwidth -> region dimensions - - \begingroup % \forgetall - - \FOcontainerWW\textwidth - \FOcontainerHH\textheight - \def\FOlayername{\XMLpar{fo:flow}{flow-name}{xsl-region-body}} - - \iftracingFO \tracelayerstrue \fi - - \directsetup{fo:preset:layer} - - \setlayerframed - [\XMLpar{fo:flow}{flow-name}{xsl-region-body}] - [frame=off, - width=\FOcontainerW, - height=\FOcontainerH] - - \bgroup - -\stopsetups - -\startsetups fo:block-container:stop:pos - - \egroup - - \endgroup - -\stopsetups - -%D fo:bidi-override - -% \XMLattributeset{aural}, -% color=, -% direction=, -% letter-spacing=, -% line-height=, -% word-spacing=, - -\defineXMLenvironment - [fo:bidi-override] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:font}, - \XMLattributeset{fo:relative-position}, - score-spaces=, - unicode-bidi=] - {\beginXMLelement} - {\endXMLelement} - -% todo - -%D fo:character - -% \XMLattributeset{fo:aural}, -% color=, -% glyph-orientation-horizontal=, -% glyph-orientation-vertical=, -% line-height=, - -\defineXMLsingular - [fo:character] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fe:tracing}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:font}, - \XMLattributeset{fo:hyphenation}, - \XMLattributeset{fo:margin-inline}, - \XMLattributeset{fo:relative-position}, - \XMLattributeset{fo:character}, - alignment-adjust=, - baseline-shift=, - dominant-baseline=, -% text-depth=, -% text-altitude=, - keep-with-next=, - keep-with-previous=, - score-spaces=, - visibility=] - {\directsetup{fo:character:process}} - -\mapXMLvalue {fo:vertical-align} {baseline} {\hbox} -\mapXMLvalue {fo:vertical-align} {sub} {\low} -\mapXMLvalue {fo:vertical-align} {super} {\high} -\mapXMLvalue {fo:vertical-align} {inherit} {\firstofoneargument} - -\startsetups fo:character:process - - % border - % font - % margin - % positioning - % baseline - % color - % depth and altitude - % keep-with - % lineheight - - \dontleavehmode \begingroup - - \directsetup{fe:setup} - \directsetup{fo:font:setup} - - \iftracingFO \ruledhbox \else \hbox \fi \bgroup - - \doifsomethingXMLop{vertical-align} - {\doifXMLvalelse{fo:vertical-align}{\XMLop{vertical-align}} - {\XMLval{fo:vertical-align}{\XMLop{vertical-align}}{}} - {\wordshiftamount\lineheight - \setpercentdimen\wordshiftamount{\XMLop{vertical-align}} - \shiftedword}} - - {\directsetup{fo:character:orient}} - - \egroup \endgroup - -\stopsetups - -\startsetups fo:character:orient - -% \rotate[rotation=-\XMLop{glyph-orientation-horizontal}] - - \doifsomethingXMLop{glyph-orientation-horizontal} - {\rotate[rotation=\XMLval{fo:reference-orientation}{\XMLop{glyph-orientation-horizontal}}{0}]} - {\XMLop{character}} - -\stopsetups - -%D fo:initial-property-set - -% \XMLattributeset{fo:aural}, -% color=, -% letter-spacing=, -% line-height=, -% text-transform=, -% word-spacing=, - -\defineXMLprocess - [fo:initial-property-set] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:font}, - \XMLattributeset{fo:relative-position}, - score-spaces=, - text-decoration=, - text-shadow=] - -%D fo:external-graphic - -\useMPlibrary[dum] - -% \XMLattributeset{fo:aural}, -% display-align=, -% height=, -% text-align=, - -\defineXMLenvironmentsave - [fo:external-graphic] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:margin-inline}, - \XMLattributeset{fo:relative-position}, - alignment-adjust=, - alignment-baseline=, - baseline-shift=, - block-progression-dimension=, - clip=, - content-height=, - content-type=, - content-width=, - dominant-baseline=, - height=, - inline-progression-dimension=, - keep-with-next=, - keep-with-previous=, - overflow=, - scaling=, - scaling-method=, - src=dummy, - width=] - {} - {\directsetup{fo:external-graphic:process}} - -\newdimen\FOgraphicwidth -\newdimen\FOgraphicheight - -\mapXMLvalue {external-graphic:align} {top} {\tbox} -\mapXMLvalue {external-graphic:align} {bottom} {\bbox} -\mapXMLvalue {external-graphic:align} {center} {\cbox} - -\startsetups fo:external-graphic:process - - \doifelsenothing{\XMLop{content-height}} - {\FOgraphicheight\zeropoint} - {\doifelse{\XMLop{content-height}}{scale-to-fit}% is this official ? - {\FOgraphicwidth\zeropoint} - {\doifelse{\XMLop{content-height}}{auto} - {\FOgraphicheight\zeropoint} - {\FOgraphicheight\lineheight - \setpercentdimen\FOgraphicheight{\XMLop{content-height}}}}} - - \doifelsenothing{\XMLop{content-width}} - {\FOgraphicwidth\zeropoint} - {\doifelse{\XMLop{content-width}}{scale-to-fit}% is this official ? - {\FOgraphicwidth\zeropoint} - {\doifelse{\XMLop{content-width}}{auto} - {\FOgraphicwidth\zeropoint} - {\FOgraphicwidth1em - \setpercentdimen\FOgraphicwidth {\XMLop{content-width}}}}} - - % leeg maken vars gaat ook goed, dan een \externalfigure - - % todo : height/width scale-to-fit: factor=... - - \setbox\scratchbox\hbox - {\setFOimagename{\XMLpar{fo:external-graphic}{src}{dummy}} - \ifdim\FOgraphicheight>\zeropoint - \ifdim\FOgraphicwidth>\zeropoint - \externalfigure[\FOimagename][height=\FOgraphicheight,width=\FOgraphicwidth] - \else - \externalfigure[\FOimagename][height=\FOgraphicheight] - \fi - \else - \ifdim\FOgraphicwidth>\zeropoint - \externalfigure[\FOimagename][width=\FOgraphicwidth] - \else - \externalfigure[\FOimagename] - \fi - \fi} - - \dontleavehmode \XMLval{external-graphic:align}{\XMLop{vertical-align}}{}{\box\scratchbox} - -\stopsetups - -%D fo:instream-foreign-object - -% like external-graphic, only no src - -% \XMLattributeset{fo:aural}, -% display-align=, -% line-height=, -% text-align=, - -\defineXMLprocess - [fo:instream-foreign-object] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:margin-inline}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:relative-position}, - alignment-adjust=, - alignment-baseline=, - baseline-shift=, - block-progression-dimension=, - clip=, - content-height=, - content-type=, - content-width=, - dominant-baseline=, - height=, - inline-progression-dimension=, - keep-with-next=, - keep-with-previous=, - overflow=, - scaling=, - scaling-method=, - width=] - -%D Element: fo:inline - -% \XMLattributeset{fo:aural}, -% line-height=, -% wrap-option=, -% color=, -% keep-together=, - -\defineXMLnestedenvironmentsave - [fo:inline] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:font}, - \XMLattributeset{fo:margin-inline}, - \XMLattributeset{fo:relative-position}, - alignment-adjust=, - alignment-baseline=, - baseline-shift=, - block-progression-dimension=, - dominant-baseline=, - height=, - inline-progression-dimension=, - keep-with-next=, - keep-with-previous=, - text-decoration=, - visibility=, - width=] - {\beginXMLelement} - {\directsetup{fo:inline:process}\endXMLelement} - -\defineXMLsingular - [fo:inline] - {} - -% baseline-shift: baseline sub super % dimen inherit - -\chardef\isolatedwordsmode=1 - -\newdimen\wordshiftamount - -\def\shiftedword{\raise\wordshiftamount\hbox} - -\long\def\shiftedwords#1{\processisolatedwords{#1}\shiftedword} -\long\def\normalwords #1{\processisolatedwords{#1}\hbox} -\long\def\highwords #1{\processisolatedwords{#1}\high} -\long\def\lowwords #1{\processisolatedwords{#1}\low} - -\mapXMLvalue {fo:baseline-shift} {baseline} {\normalwords} -\mapXMLvalue {fo:baseline-shift} {sub} {\lowwords} -\mapXMLvalue {fo:baseline-shift} {super} {\highwords} -\mapXMLvalue {fo:baseline-shift} {inherit} {\firstofoneargument} - -\startsetups fo:inline:process - - \directsetup{fo:position:start} - - \dontleavehmode - - \doFOreference{fo:inline} - - \begingroup - - \directsetup{fe:setup} - \directsetup{fo:space:start} - - \begingroup - - \directsetup{fo:hyphenation:setup} - \directsetup{fo:font:setup} - - \doifelsenothing{\XMLop{baseline-shift}} - {\XMLflushself} - {\doifXMLvalelse{fo:baseline-shift}{\XMLop{baseline-shift}} - {\XMLval{fo:baseline-shift}{\XMLop{baseline-shift}}{}{\XMLflushself}} - {\wordshiftamount\lineheight - \setpercentdimen\wordshiftamount{\XMLop{baseline-shift}} - \shiftedwords{\XMLflushself}}} - - \endgroup - - \directsetup{fo:space:end} - - \endgroup - - \directsetup{fo:position:stop} - -\stopsetups - -\startsetups fo:position:start - \begingroup - \directsetup{fo:position:\XMLop{position}:start} - \begingroup -\stopsetups - -\startsetups fo:position:stop - \endgroup - \directsetup{fo:position:\XMLop{position}:stop} - \endgroup -\stopsetups - -\startsetups fo:position:static:start -\stopsetups - -\startsetups fo:position:static:stop -\stopsetups - -\startsetups fo:position:fixed:start - \FOcontainerWW\paperwidth - \FOcontainerHH\paperheight - \def\FOlayername{regions} - \directsetup{fo:preset:layer} - \setlayer[regions]{\vbox \bgroup \setlocalhsize} -\stopsetups - -\startsetups fo:position:fixed:stop - \egroup -\stopsetups - -\enableparpositions % slows down but who uses fo anyway ... - -\startsetups fo:position:absolute:start - \setbox\FOpositionbox\hbox\bgroup -\stopsetups - -\startsetups fo:position:absolute:stop - \egroup - % evt uitstellen tot otr, zodat text/realfolio is solved - \edef\FOpartag{p:\number\parposcounter} - \edef\FOtxttag{text:\realfolio} - \FOcontainerWW\MPplus\FOpartag{1}{0pt} - \FOcontainerHH\zeropoint % todo: add anchors to each 'object' - \directsetup{fo:preset:position} - \setlayer - [xsl-region-body] - [preset=lefttop, - hoffset=\dimexpr(\MPx\FOtxttag-\MPx\FOpartag), - voffset=\dimexpr(\MPy\FOtxttag+\MPh\FOtxttag-\MPy\FOpartag-\MPh\FOpartag)] - {\iftracingFO \ruledhbox \bgroup \fi - \offset - [method=fixed, - leftoffset=\FOcontainerL, - rightoffset=\FOcontainerR, - topoffset=\FOcontainerT, - bottomoffset=\FOcontainerB] - {\box\FOpositionbox} - \iftracingFO \egroup \fi} -\stopsetups - -\newbox\FOpositionbox - -\startsetups fo:position:relative:start - \setbox\FOpositionbox\hbox\bgroup -\stopsetups - -\startsetups fo:position:relative:stop - \egroup - \FOcontainerWW\wd\FOpositionbox - \FOcontainerHH\dimexpr(\ht\FOpositionbox+\dp\FOpositionbox) - \directsetup{fo:preset:position} - \iftracingFO \ruledhbox \bgroup \fi - \offset - [method=fixed, - leftoffset=\FOcontainerL, - rightoffset=\FOcontainerR, - topoffset=\FOcontainerT, - bottomoffset=\FOcontainerB] - {\box\FOpositionbox} - \iftracingFO \egroup \fi -\stopsetups - -% - -\startsetups fo:preset:position - - \FOcontainerW\zeropoint \FOcontainerL\zeropoint \FOcontainerR\zeropoint - \FOcontainerH\zeropoint \FOcontainerT\zeropoint \FOcontainerB\zeropoint - - \doifnot{\XMLop{left}} {auto}{\FOcontainerL\FOcontainerWW\setpercentdimen\FOcontainerL{\XMLop{left}}} - \doifnot{\XMLop{right}} {auto}{\FOcontainerR\FOcontainerWW\setpercentdimen\FOcontainerR{\XMLop{right}}} - \doifnot{\XMLop{top}} {auto}{\FOcontainerT\FOcontainerHH\setpercentdimen\FOcontainerT{\XMLop{top}}} - \doifnot{\XMLop{bottom}}{auto}{\FOcontainerB\FOcontainerHH\setpercentdimen\FOcontainerB{\XMLop{bottom}}} - - \doifnot{\XMLop{width}} {auto}{\FOcontainerW\FOcontainerWW\setpercentdimen\FOcontainerW{\XMLop{width}}} - \doifnot{\XMLop{height}}{auto}{\FOcontainerH\FOcontainerHH\setpercentdimen\FOcontainerH{\XMLop{height}}} - -\stopsetups - -\startsetups fo:preset:layer - - \directsetup{fo:preset:position} - - \setuplayer - [\FOlayername] - [width=\FOcontainerWW, - height=\FOcontainerHH] - - \ifzeropt\FOcontainerW - \FOcontainerW\dimexpr(\FOcontainerWW-\FOcontainerL-\FOcontainerR) - \fi - \ifzeropt\FOcontainerH - \FOcontainerH\dimexpr(\FOcontainerHH-\FOcontainerT-\FOcontainerB) - \fi - - \ifzeropt\FOcontainerB - \ifzeropt\FOcontainerL - \setuplayer[\FOlayername][preset=righttop, x=\FOcontainerR,y=\FOcontainerT] - \else - \setuplayer[\FOlayername][preset=lefttop, x=\FOcontainerL,y=\FOcontainerT] - \fi - \else - \ifzeropt\FOcontainerL - \setuplayer[\FOlayername][preset=rightbottom,x=\FOcontainerR,y=\FOcontainerB] - \else - \setuplayer[\FOlayername][preset=leftbottom, x=\FOcontainerL,y=\FOcontainerB] - \fi - \fi - -\stopsetups - -%D Element: fo:inline-container - -% display-align=, -% line-height=, -% reference-orientation=, -% writing-mode=, -% keep-together=, - -\defineXMLenvironment - [fo:inline-container] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:margin-inline}, - \XMLattributeset{fo:relative-position}, - alignment-adjust=, - alignment-baseline=, - baseline-shift=, - block-progression-dimension=, - clip=, - dominant-baseline=, - height=, - inline-progression-dimension=, - keep-with-next=, - keep-with-previous=, - overflow=, - width=] - {\beginXMLelement\begingroup} - {\endgroup\endXMLelement} - -%D Element: fo:leader - -% also a kind of fake fill - -% \XMLattributeset{fo:aural}, -% color=, -% line-height=, -% word-spacing=, - -\defineXMLenvironmentsave - [fo:leader] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:font}, - \XMLattributeset{fo:margin-inline}, - \XMLattributeset{fo:relative-position}, - \XMLattributeset{fo:leader-and-rule}, - alignment-adjust=, - alignment-baseline=, - baseline-shift=, - dominant-baseline=, - % text-depth=, - % text-altitude=, - keep-with-next=, - keep-with-previous=, - letter-spacing=, - text-shadow=, - visibility=] - {\beginXMLelement} - {\directsetup{fo:leader:process}\endXMLelement} - -\mapXMLvalue {fo:leader-pattern} {space} {\hfill} -\mapXMLvalue {fo:leader-pattern} {dots} {.} -\mapXMLvalue {fo:leader-pattern} {rule} {\hrulefill} -\mapXMLvalue {fo:leader-pattern} {use-content} {\XMLflushself} - -% todo: speed up - -\startsetups fo:leader:process - - %tracebackXMLattribute{leader-pattern-width} - - \strut \leaders - %edefXMLinh \FOlepatwd {leader-pattern-width} - \hbox to \XMLinh{leader-pattern-width} - {\hss\XMLval{fo:leader-pattern}{\XMLinh{leader-pattern}}{\hfill}\hss} - \hfill \strut - -\stopsetups - -%D Element: fo:pagenumber - -% \XMLattributeset{fo:aural}, -% line-height=, -% wrap-option=, -% letter-spacing=, -% text-transform=, -% word-spacing=, - -\defineXMLsingular - [fo:page-number] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:font}, - \XMLattributeset{fo:margin-inline}, - \XMLattributeset{fo:relative-position}, - alignment-adjust=, - alignment-baseline=, - baseline-shift=, - dominant-baseline=, - keep-with-next=, - keep-with-previous=, - score-spaces=, -% text-altitude=, - text-decoration=, -% text-depth=, - text-shadow=, - visibility=] - {\directsetup{fo:page-number:process}} - -\newcount\FOpnrefcounter - -\startsetups fo:page-number:process - - \doifelsenothing{\XMLpar{fo:page-sequence}{format}{}} - {\pagenumber} - {\ifinotr - \globallet\FOpnrefnumber\folio - \else - \global\advance\FOpnrefcounter\plusone - \pagereference[pnref:\the\FOpnrefcounter] - \doifreferencefoundelse{pnref:\the\FOpnrefcounter} - {\globallet\FOpnrefnumber\currentfolioreference} - {\globallet\FOpnrefnumber\folio} - \fi - \expanded{\handletokens\XMLpar{fo:page-sequence}{format}{}}\with{\handleFOformat{\FOpnrefnumber}}} - -\stopsetups - -\defineconversion[1][\numbers] - -\long\def\handleFOformat#1#2% - {\defconvertedargument\ascii{#2}% - \doifconversiondefinedelse\ascii{\convertnumber\ascii{#1}}{#2}} - -%D Element: fo:pagenumber-citation - -% same as page-number - -% \XMLattributeset{fo:aural}, -% line-height=, -% wrap-option=, -% letter-spacing=, -% text-transform=, -% word-spacing=, - -\defineXMLsingular - [fo:page-number-citation] - [\XMLattributeset{fo:inherited}, - id=, - ref-id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:font}, - \XMLattributeset{fo:margin-inline}, - \XMLattributeset{fo:relative-position}, - alignment-adjust=, - alignment-baseline=, - baseline-shift=, - dominant-baseline=, - keep-with-next=, - keep-with-previous=, - score-spaces=, -% text-altitude=, - text-decoration=, -% text-depth=, - text-shadow=, - visibility=] - {\directsetup{fo:page-number-citation:process}} - -\startsetups fo:page-number-citation:process - - \doifreferencefoundelse{\XMLop{ref-id}} - {\globallet\FOpnrefnumber\currentfolioreference - \globallet\FOpnrefformat\currenttextreference} - {\gdef\FOpnrefnumber{?} - \gdef\FOpnrefformat{}} - - \doifelsenothing{\FOpnrefformat} - {\FOpnrefnumber} - {\expanded{\handletokens\FOpnrefformat}\with{\handleFOformat{\FOpnrefnumber}}} - -\stopsetups - -%D Element: fo:table-and-caption - -% \XMLattributeset{fo:aural}, -% text-align=, -% caption-side=, -% intrusion-displace=, -% keep-together=, - -\defineXMLenvironment - [fo:table-and-caption] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:margin-block}, - \XMLattributeset{fo:relative-position}, - break-after=, - break-before=, - keep-with-next=, - keep-with-previous=] - {\beginXMLelement} - {\endXMLelement} - -%D Element: fo:table fo:table-caption fo:table-header fo:table-footer -%D to:table-column fo:table-body fo:table-row fo:table-cell - -% \XMLattributeset{fo:aural}, -% border-collapse=, -% border-separation=, -% intrusion-displace=, -% keep-together=, -% writing-mode=, - -\defineXMLenvironment - [fo:table] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:margin-block}, - \XMLattributeset{fo:relative-position}, - block-progression-dimension=, - border-after-precedence=, - border-before-precedence=, - border-start-precedence=, - border-end-precedence=, - break-after=, - break-before=, - inline-progression-dimension=, - height=, - keep-with-next=, - keep-with-previous=, - table-layout=, - table-omit-footer-at-break=, - table-omit-header-at-break=, -% text-indent=0pt, % yes or no? - width=] - {\beginXMLelement - \bTABLE % [option=stretch] % - \newcounter\FOtablecolumn} - {\eTABLE - \endXMLelement} - -\newdimen\FOtableW -\newdimen\FOtableH - -\defineXMLsingular - [fo:table-column] - [\XMLattributeset{fo:inherited}, - \XMLattributeset{fo:border-padding-background}, % only background, not the rest, make subset - border-after-precedence=, - border-before-precedence=, - border-end-precedence=, - border-start-precedence=, - column-width=, - column-number=, - number-columns-repeated=, - number-columns-spanned=, - visibility=] - {\directsetup{fo:table-column:action}} - -% \XMLattributeset{fo:aural}, -% intrusion-displace=, -% keep-together=, - -\defineXMLprocess - [fo:table-caption] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:relative-position}, - block-progression-dimension=, - height=, - inline-progression-dimension=, - width=] - -% \XMLattributeset{fo:aural}, - -\defineXMLnested - [fo:table-header] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:relative-position}, - border-after-precedence=, - border-before-precedence=, - border-end-precedence=, - border-start-precedence=, - visibility=] - {\beginXMLelement\bTABLEhead} - {\eTABLEhead\endXMLelement} - -% \XMLattributeset{fo:aural}, - -\defineXMLnested - [fo:table-footer] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:relative-position}, - border-after-precedence=, - border-before-precedence=, - border-end-precedence=, - border-start-precedence=, - visibility=] - {\beginXMLelement\bTABLEfoot} - {\eTABLEfoot\endXMLelement} - -% \XMLattributeset{fo:aural}, - -\defineXMLnested - [fo:table-body] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:relative-position}, - border-after-precedence=, - border-before-precedence=, - border-end-precedence=, - border-start-precedence=, - visibility=] - {\beginXMLelement\bTABLEbody} - {\eTABLEbody\endXMLelement} - -% TODO: when stretch and when not - -% \XMLattributeset{fo:aural}, -% keep-together=, - -\defineXMLnested - [fo:table-row] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:relative-position}, - border-after-precedence=, - border-before-precedence=, - border-end-precedence=, - border-start-precedence=, - break-after=, - break-before=, - height=, - keep-with-next=, - keep-with-previous=, - visibility=] - {\beginXMLelement - \directsetup{fo:table-row:start}% - \expanded{\bTR[\the\scratchtoks]}% - \beginXMLelement} - {\endXMLelement - \eTR - \directsetup{fo:table-row:stop} - \endXMLelement} - -\startsetups fo:table-row:start - - \inTABLErowtrue - - \scratchtoks\emptytoks - - \doifsomething{\XMLop{height}} - {\FOtableH\textheight - \setpercentdimen\FOtableH{\XMLop{height}} - \appendetoks - height=\the\FOtableH - \to \scratchtoks} - - \appendetoks - ,extras={\rescanXMLattributes{fo:table-row}} - \to\scratchtoks - -\stopsetups - -\startsetups fo:table-row:stop - - \inTABLErowfalse - -\stopsetups - -% \XMLattributeset{fo:aural}, -% display-align=, -% relative-align=, -% empty-cells=, - -\newif\ifinTABLErow -\newdimen\FOtablecellwidth -\newdimen\FOtablecellheight - -\defineXMLnested - [fo:table-cell] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:relative-position}, - border-after-precedence=, - border-before-precedence=, - border-end-precedence=, - border-start-precedence=, - column-number=, - ends-row=, - height=, - inline-progression-dimension=, - number-columns-spanned=1, - number-rows-spanned=1, - starts-row=, - width=] - {\directsetup{fo:table-cell:start}% - \expanded{\bTD[\the\scratchtoks]}% - \beginXMLelement} - {\endXMLelement - \eTD - \directsetup{fo:table-cell:stop}} - -\startsetups fo:table-column:action - - \doifelsenothing{\XMLop{column-number}} - {\increment\FOtablecolumn} - {\edef\FOtablecolumn{\XMLop{column-number}} - \expanded{\setupTABLE[column][\FOtablecolumn][n=\FOtablecolumn]}} - - \doifsomething{\XMLop{column-width}} - {%\setlocalhsize - %\FOtableW\localhsize - \analyzefunction{\XMLop{column-width}}% - % hm, we need to set localhsize earlier - \doifelse\functionname{proportional-column-width} - {\FOtableW\functionA\textwidth} - {\FOtableW\textwidth - \setpercentdimen\FOtableW{\XMLop{column-width}}}% - \expanded{\setupTABLE[column][\FOtablecolumn][width=\the\FOtableW]}} - - \doif{\XMLop{border-style}}{none} - {\expanded{\setupTABLE[column][\FOtablecolumn][frame=off]}} - - \doifelsenothing{\XMLop{display-align}} - {\doifsomething{\XMLop{text-align}} - {\expanded{\setupTABLE[column][\FOtablecolumn] - [align=\XMLpav{fo:align-key}{fo:table-column}{text-align}{normal}]}}} - {\doifsomething{\XMLop{text-align}} - {\expanded{\setupTABLE[column][\FOtablecolumn] - [align={\XMLpav{fo:display-align}{fo:table-column}{display-align}{high},\XMLpav{fo:align-key}{fo:table-column}{text-align}{normal}}]}} - {\expanded{\setupTABLE[column][\FOtablecolumn] - [align=\XMLpav{fo:display-align}{fo:table-column}{display-align}{high}]}}} - -\expanded{\setupTABLE[column][\FOtablecolumn][extras={\rescanXMLattributes{fo:table-column}}]} - -\stopsetups - -\startsetups fo:table-cell:start - - \doif{\XMLop{starts-row}}{true}{\ifinTABLErow\eTR\inTABLErowfalse\fi} - - \ifinTABLErow\else\bTR\inTABLErowtrue\fi - - \doifelsenothing{\XMLop{background-color}} - {\let\FoTableBG\empty} - {\checkhexcolor[\XMLop{background-color}] - \doifcolorelse{\XMLop{background-color}} - {\def\FoTableBG{color}} - {\setXMLpar{fo:table-cell}{background-color}{} - \let\FoTableBG\empty}} - -% \doifelse{\XMLpar{fo:table-cell}{width}{}}{} -% {\def\pFOtablewidth{fit}} -% {\FOtablecellwidth\textwidth % probably must be localhsize or frozen at an outer level -% \setpercentdimen\FOtablecellwidth{\XMLpar{fo:table-cell}{width}{0pt}}% -% \edef\pFOtablewidth{\the\FOtablecellwidth}}% - -% \doifelse{\XMLpar{fo:table-cell}{height}{}}{} -% {\def\pFOtableheight{fit}} -% {\FOtablecellheight\textheight % probably must be localhsize or frozen at an outer level -% \setpercentdimen\FOtablecellheight{\XMLpar{fo:table-cell}{height}{0pt}}% -% \edef\pFOtableheight{\the\FOtablecellheight}}% - - \scratchtoks\emptytoks \appendetoks -% style=\noexpand\directsetup{fo:font:setup}, % else not expanded - nx=\XMLop{number-columns-spanned}, - ny=\XMLop{number-rows-spanned}, - n=\XMLop{column-number}, - background=\FoTableBG - \to \scratchtoks - - \doifnot{\XMLop{border-style}}{none} - {\appendetoks - ,frame=on - \to\scratchtoks} - - \doifsomething{\XMLop{background-color}} - {\appendetoks - ,backgroundcolor=\XMLop{background-color} - \to \scratchtoks} - - % todo : padding - - \doifsomething{\XMLop{padding}} - {\appendetoks - ,offset=\XMLop{padding} - \to \scratchtoks} - - % todo: interference with presets in column (outer level) -> \setupcolumn[column] ...; - % misschien meerdere align switches - - \doifelsenothing{\XMLop{display-align}} - {\doifsomething{\XMLop{text-align}} - {\appendetoks - ,align=\XMLpav{fo:align-key}{fo:table-cell}{text-align}{normal} - \to \scratchtoks}} - {\doifsomething{\XMLop{text-align}} - {\appendetoks - ,align={\XMLpav{fo:display-align}{fo:table-cell}{display-align}{high},\XMLpav{fo:align-key}{fo:table-cell}{text-align}{normal}}, - \to \scratchtoks} - {\appendetoks - ,align=\XMLpav{fo:display-align}{fo:table-cell}{display-align}{high} - \to \scratchtoks}} - - \appendetoks - ,extras={\rescanXMLattributes{fo:table-cell}} - \to\scratchtoks - -\stopsetups - -% \startsetups fo:table-cell:setup - -% [\XMLpar{fo:table-cell}{text-indent}{}] - -% \edefXMLinhpar\xFOtextindent{fo:table-cell}{text-indent} - -% \doifsomething\xFOtextindent -% {\scratchdimen\hsize -% \setpercentdimen\scratchdimen\xFOtextindent -% \expanded{\setupindenting[\the\scratchdimen]}} - -% \stopsetups - -\startsetups fo:table-cell:stop - - \doif{\XMLop{ends-row}}{true}{\eTR\inTABLErowfalse} - -\stopsetups - -%D Element: fo:list-block fo:list-item fo:list-body fo:list-item-label - -% \XMLattributeset{fo:aural}, -% intrusion-displace=, -% keep-together=, -% provisional-distance-between-starts=24pt, -% provisional-label-separation=6pt, - -\defineXMLenvironment - [fo:list-block] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fe:tracing}, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:margin-block}, - \XMLattributeset{fo:relative-position}, - break-after=, - break-before=, - keep-with-next=, -% space-between-list-rows=, % ? mentioned in bradley -text-indent=0pt, % yes - keep-with-previous=] - {\beginXMLelement\directsetup{fo:list:start}} - {\directsetup{fo:list:stop}\endXMLelement} - -\startsetups fo:list:start - \endgraf - \begingroup - \directsetup{fe:setup} - \disablemode[fo:in-list] - % \forgetall, no! -% \directsetup{fo:break-and-space:before} - \directsetup{fo:indent:setup} - \begingroup -\stopsetups - -\startsetups fo:list:stop - \endgraf - \endgroup -% \directsetup{fo:break-and-space:after} - \endgroup -\stopsetups - -% \XMLattributeset{fo:aural}, -% relative-align=, -% intrusion-displace=, -% keep-together=, - -% The list model is plain stupid. Instead of just defining a few mechanism -% or using some kind of type attribute, a strange mechanism of functions is -% used. Why on the one hand introduce redundant attributes and on the other -% hand safe a few elements. A proper segmentation of the problem would have -% brought better solutions. - -\defineXMLenvironment - [fo:list-item] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fe:tracing}, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:margin-block}, - \XMLattributeset{fo:relative-position}, - break-after=, - break-before=, - keep-with-next=, - keep-with-previous=] - {\beginXMLelement\directsetup{fo:list-item:start}} - {\directsetup{fo:list-item:stop}\endXMLelement} - -% check what is needed - -\newdimen\FOlistitemlabelhsize \newdimen\FOlistitembodyhsize \newdimen\FOlistitemdistance -\newdimen\FOlistitemlabelleftskip \newdimen\FOlistitembodyleftskip -\newdimen\FOlistitemlabelrightskip \newdimen\FOlistitembodyrightskip - -\defineXMLnestedsave - [fo:list-item-body] - [\XMLattributeset{fo:inherited}, - id=, % keep-together=, - \XMLattributeset{fo:accessibility}] - -\defineXMLnestedsave - [fo:list-item-label] - [\XMLattributeset{fo:inherited}, - id=, % keep-together=, - \XMLattributeset{fo:accessibility}] - -\startsetups fo:list-item:start - - \bgroup - -% \startmode[fo:in-list] -% \doifsomething{\XMLpar{fo:list-block}{space-between-list-rows}{}} -% {\vskip\XMLpar{fo:list-block}{space-between-list-rows}{}} % todo ! ! ! ! -% \stopmode - - \enablemode[fo:in-list] - -\stopsetups - -% todo : relative-align in list item - -\newif\ifFOlabelend -\newif\ifFObodystart - -\startsetups fo:list-item:stop - - % 24pt en 6pt in fo:root instellen - - % \tracebackXMLattribute{provisional-distance-between-starts} - - \edefXMLinh \FOprodis {provisional-distance-between-starts} - \edefXMLinh \FOprolab {provisional-label-separation} - -% \edef\FOprodis{\XMLpar{fo}{provisional-distance-between-starts}{}} -% \edef\FOprolab{\XMLpar{fo}{provisional-label-separation}{}} - - \edef\FOprodis{\ifx\FOprodis\empty24pt\else\FOprodis\fi} - \edef\FOprolab{\ifx\FOprolab\empty 6pt\else\FOprolab\fi} - - \setlocalhsize - - \FOlistitemlabelleftskip \zeropoint - \FOlistitemlabelrightskip\zeropoint - \FOlistitembodyleftskip \zeropoint - \FOlistitembodyrightskip \zeropoint - - \doifelse{\XMLpar{fo:list-item-label}{end-indent} {}}{label-end()} \FOlabelendtrue \FOlabelendfalse - \doifelse{\XMLpar{fo:list-item-body} {start-indent}{}}{body-start()}\FObodystarttrue\FObodystartfalse - - \setpercentdimen\FOlistitemlabelleftskip {\XMLpar{fo:list-item-label}{start-indent}{0pt}} - \setpercentdimen\FOlistitembodyrightskip {\XMLpar{fo:list-item-body} {end-indent} {0pt}} - - % maybe i need to implement something configurable - - \ifFObodystart - \ifFOlabelend - \FOlistitemlabelrightskip\dimexpr(\localhsize-\FOlistitemlabelleftskip-\FOprodis+\FOprolab) - \FOlistitembodyleftskip\dimexpr(\FOlistitemlabelleftskip+\FOprodis) - \FOlistitemlabelhsize\dimexpr(\FOprodis-\FOprolab) - \else - \setpercentdimen\FOlistitemlabelrightskip{\XMLpar{fo:list-item-label}{end-indent}{0pt}} - \FOlistitemlabelhsize\dimexpr(\localhsize-\FOlistitemlabelleftskip-\FOlistitemlabelrightskip) - \FOlistitembodyleftskip\dimexpr(\FOlistitemlabelleftskip+\FOlistitemlabelhsize+\FOprolab) - \fi - \FOlistitemdistance \dimexpr(\FOprolab) - \else - \setpercentdimen\FOlistitembodyleftskip{\XMLpar{fo:list-item-body}{start-indent}{0pt}} - \ifFOlabelend - \FOlistitemlabelrightskip\dimexpr(\localhsize-\FOlistitembodyleftskip+\FOprolab) - \FOlistitemlabelhsize\dimexpr(\localhsize-\FOlistitemlabelleftskip-\FOlistitemlabelrightskip) - \FOlistitemdistance \dimexpr(\FOprolab) - \else - \setpercentdimen\FOlistitemlabelrightskip{\XMLpar{fo:list-item-label}{end-indent}{0pt}} - \FOlistitemlabelhsize\dimexpr(\localhsize-\FOlistitemlabelleftskip-\FOlistitemlabelrightskip) - \FOlistitemdistance \dimexpr(\FOlistitembodyleftskip-\FOlistitemlabelleftskip-\FOlistitemlabelhsize) - \fi - \fi - - % is this fall back permitted ? - - \ifzeropt\FOlistitemlabelleftskip \ifzeropt\FOlistitemlabelrightskip - \FOlistitembodyleftskip\FOprodis - \FOlistitemdistance\FOprolab - \FOlistitemlabelhsize\dimexpr(\FOlistitembodyleftskip-\FOlistitemdistance) - \fi \fi - - % - - \FOlistitembodyhsize\localhsize - - \advance\FOlistitembodyhsize-\FOlistitembodyleftskip - \advance\FOlistitembodyhsize-\FOlistitembodyrightskip - - \doifelse{\XMLpar{fo:list-item}{display-align}{}}{center} - {\directsetup{fo:list-item:display}} - {\directsetup{fo:list-item:text}} - - \egroup - -\stopsetups - -% todo: textindent - -\startsetups fo:list-item:display - - \endgraf - - \advance\leftskip \FOlistitemlabelleftskip - \advance\rightskip\FOlistitembodyrightskip - - \dontleavehmode \valign\bgroup\forgetall\vss##\vss\cr - \iftracingFO\ruledvtop\else\vbox\fi{\hsize\FOlistitemlabelhsize\directsetup{fo:list-item-label:setup}\XMLflush{fo:list-item-label}}\cr - \iftracingFO\ruledvtop\else\vbox\fi{\hsize\FOlistitembodyhsize \directsetup{fo:list-item-body:setup}\XMLflush{fo:list-item-body}}\cr - \egroup - -% \dontleavehmode \placesidebyside % or maybe paired boxes (legends) -% {\ruledvtop{\forgetall\hsize\FOlistitemlabelhsize\XMLflush{fo:list-item-label}}} -% {\ruledvtop{\forgetall\hsize\FOlistitembodyhsize \XMLflush{fo:list-item-body}}} - - \endgraf - -\stopsetups - -\newtoks\savedeverypar \savedeverypar\everypar - -\startsetups fo:list-item:text - - \everypar\savedeverypar % \appendtoksonce\insertparagraphintro\to\everypar % hack, binnen footnote ... - - \advance\leftskip \FOlistitembodyleftskip - \advance\rightskip\FOlistitembodyrightskip - - \setupparagraphintro[first][\directsetup{fo:list-item-label:process}] - \setupparagraphintro[next] [\begstrut\resetpenalties\clubpenalties] - \directsetup{fo:list-item-body:setup} - \XMLflush{fo:list-item-body}\endstrut - -\stopsetups - -\startsetups fo:list-item-label:setups - - \edefXMLinhpar\xFOtextindent{fo:item-label}{text-indent} - - \doifsomething\xFOtextindent - {\scratchdimen\hsize - \setpercentdimen\scratchdimen\xFOtextindent - \expanded{\setupindenting[\the\scratchdimen]}} - -\stopsetups - -\startsetups fo:list-item-body:setups - - \edefXMLinh\xFOtextindent{fo:item-body}{text-indent} - - \doifsomething\xFOtextindent - {\scratchdimen\hsize - \setpercentdimen\scratchdimen\xFOtextindent - \expanded{\setupindenting[\the\scratchdimen]}} - -\stopsetups - -\newbox\FOitembox - -\startsetups fo:list-item-label:process - - \setbox \FOitembox \iftracingFO \ruledvtop \else \vtop \fi \bgroup - \forgetall - \postponenotes - \hsize\FOlistitemlabelhsize - \directsetup{fo:list-item-label:setup} - \XMLflush{fo:list-item-label} - \egroup - \getnoflines{\dimexpr(\ht\FOitembox+\dp\FOitembox)} - \setpenalties\clubpenalties\noflines\maxdimen - \strut\llap{\box\FOitembox\hskip\FOlistitemdistance} - -\stopsetups - -% \setlocalhsize \hsize\localhsize - -%D Element: fo:basic-link - -% \XMLattributeset{fo:aural}, -% keep-together=, -% line-height=, - -\defineXMLenvironmentsave - [fo:basic-link] - [\XMLattributeset{fo:inherited}, - id=, - \XMLattributeset{fo:accessibility}, - \XMLattributeset{fo:border-padding-background}, - \XMLattributeset{fo:margin-inline}, - \XMLattributeset{fo:relative-position}, - alignment-adjust=, - alignment-baseline=, - baseline-shift=, - destination-placement-offset=, - dominant-baseline=, - external-destination=, - indicate-destination=, - internal-destination=, - keep-with-next=, - keep-with-previous=, - show-destination=, - target-processing-context=, - target-presentation-context=, - target-stylesheet=] - {} - {\directsetup{fo:basic-link}} - -\startsetups fo:basic-link - - \goto{\XMLflushself}[unknown] - -\stopsetups - -%D Element: fo:multi-switch fo:multi-case fo:multi-toggle fo:multi-properties fo:multi-property-set - -\defineXMLprocess[fo:multi-switch] -\defineXMLprocess[fo:multi-case] -\defineXMLprocess[fo:multi-toggle] -\defineXMLprocess[fo:multi-properties] -\defineXMLprocess[fo:multi-property-set] - -%D Element: fo:float - -\defineXMLenvironmentsave - [fo:float] - [\XMLattributeset{fo:inherited}, - float=before, - clear=] - {} - {\directsetup{fo:float:process}} - -% clear: start end left right both none inherit -% float: before start end left right none - -\mapXMLvalue {fo:float-position} {before} {here} % todo -\mapXMLvalue {fo:float-position} {start} {here} % todo -\mapXMLvalue {fo:float-position} {end} {here} % todo -\mapXMLvalue {fo:float-position} {left} {left} -\mapXMLvalue {fo:float-position} {right} {right} -\mapXMLvalue {fo:float-position} {none} {here} % todo - -\startsetups fo:float:process - - \placefigure - [\XMLval{fo:float-position}{\XMLop{float}},none] - {} - {\XMLflushself} - -\stopsetups - -%D Element: fo:footnote fo:footnote-body - -% Let's assume that 'whatever' contains the number or footnote marker. -% -% <fo:footnote>whatever<fo:footnote-body>note</fo:footnote-body></fo:footnote> - -% todo xsl-footnote area - -\defineXMLprocess - [fo:footnote] - [\XMLattributeset{fo:accessibility}] - -\defineXMLargument - [fo:footnote-body] - [\XMLattributeset{fo:accessibility}] - {\footnote[-]} - -%D Element: fo:wrapper - -\defineXMLenvironment % todo: all inheritable - [fo:wrapper] - [\XMLattributeset{fo:inherited}, - \XMLattributeset{fe:tracing}, - \XMLattributeset{fo:fonts}, - \XMLattributeset{fo:hyphenation}] - {\beginXMLelement\begingroup\directsetup{fo:wrapper}} - {\endgroup\endXMLelement} - -\startsetups fo:wrapper - - \directsetup{fe:setup} - \directsetup{fo:hyphenation:setup} - \directsetup{fo:font:setup} - -\stopsetups - -%D Element: fo:marker fo:retrieve-marker - -% In order to support 'retrieve-boundary' (page, page-sequence, -% document) I need to extend the context mark handler. - -% This object will probably interfere with a too spacy layout since -% it is unaware if its surrounding. - -\defineXMLenvironmentsave - [fo:marker] - [marker-class-name=unknown] - {} - {\directsetup{fo:marker:process}} - -\startsetups fo:marker:process - - \doifelsemarking{fo:\XMLop{marker-class-name}} - {} {\definerawmarking[fo:\XMLop{marker-class-name}]} - - \expanded{\marking[fo:\XMLop{marker-class-name}]{\XMLflushself}} - -\stopsetups - -\defineXMLcommand - [fo:retrieve-marker] - [retrieve-class-name=unknown, - retrieve-position=first-starting-within-page, - retrieve-boundary=] - {\directsetup{fo:retrieve-marker:process}} - -\mapXMLvalue {fo:marker-position} {first-starting-within-page} {first} % first mark -\mapXMLvalue {fo:marker-position} {first-including-carryover} {previous} % top mark -\mapXMLvalue {fo:marker-position} {last-starting-within-page} {first} % dunno -\mapXMLvalue {fo:marker-position} {last-ending-within-page} {last} % bot mark - -\startsetups fo:retrieve-marker:process - - \expanded{\getmarking - [fo:\XMLop{retrieve-class-name}] - [\XMLval{fo:marker-position}{\XMLop{retrieve-position}}{first}]} - -\stopsetups - -%D Auxiliary macros - -\unprotect - -\long\def\noFOchecks#1\od{} - -\def\FOassignskip#1#2#3% - {\edef\!!stringa{\XMLpar{#1}{#2}\empty}% - \edef\!!stringb{\XMLpar{#1}{#2.optimum}\empty}% - \edef\!!stringc{\XMLpar{#1}{#2.minimum}\empty}% - \edef\!!stringd{\XMLpar{#1}{#2.maximum}\empty}% - \dimen0=\ifx\!!stringa\empty\zeropoint\else\!!stringa\fi - \dimen2=\ifx\!!stringb\empty\dimen0 \else\!!stringb\fi - \dimen4=\dimexpr(\ifx\!!stringd\empty\dimen0 \else\!!stringd\fi-\dimen2)\relax - \dimen6=\dimexpr(\ifx\!!stringc\empty\dimen0 \else\!!stringc\fi-\dimen2)\relax - #3=\dimen2 \ifzeropt\dimen4 \else\!!plus\dimen4 \fi\ifzeropt\dimen6 \else\!!minus\dimen6 \fi\relax} - -\mapXMLvalue{fo:space:conditionality} {retain} {\let\next\retainedskip } -\mapXMLvalue{fo:space:conditionality} {discard} {\let\next\discardedskip} -\mapXMLvalue{fo:space:conditionality} {} {\let\next\discardedskip} - -\mapXMLvalue{fo:space:precedence} {force} {\let\next\forcedskip} - -\def\FOdoskip#1#2% - {\begingroup - \iftracingFO\showskips\fi - \FOassignskip{#1}{#2}\scratchskip - \XMLval{fo:space:conditionality}{\XMLpar{#1}{#2.conditionality}\empty}\empty - \XMLval{fo:space:precedence}{\XMLpar{#1}{#2.precedence}\empty}\empty - \ifdim\scratchskip=\zeropoint - \ifdim\gluestretch\scratchskip=\zeropoint - \ifdim\glueshrink\scratchskip=\zeropoint - \let\next\gobbleoneargument - \fi - \fi - \fi - \next\scratchskip - \endgroup} - -\def\doFObeforeskip#1{\FOdoskip{#1}{space-before}} -\def\doFOafterskip #1{\FOdoskip{#1}{space-after}} - -\def\FOassignspace#1#2#3% - {\edef\!!stringa{\XMLpar{#1}{#2}\empty}% - \ifx\!!stringa\empty - #3=\zeropoint - \else - #3=1em% ? - \setpercentdimen#3\!!stringa - \fi - \relax} - -\def\FOdospace#1#2% - {\begingroup - \iftracingFO\showskips\fi - \FOassignspace{#1}{#2}\scratchskip - \ifdim\scratchskip=\zeropoint \else - \hskip\scratchskip - \fi - \endgroup} - -\def\doFOstartspace#1{\FOdospace{#1}{space-start}} -\def\doFOendspace #1{\FOdospace{#1}{space-end}} - -\def\checkFOborder#1#2% - {\edef\FOattribute{\XMLpar{#1}{border-#2}\empty}% - \ifx\FOattribute\empty\else - \edef\FOtag{#1}% - \edef\FOatt{border-#2}% - \expanded{\docheckFOborder\FOattribute\space\relax\space\relax}\od - \fi} - -\def\docheckFOborder#1#2 #3% - {\ifx#1\relax - \expandafter\noFOchecks - \else - \doifhexcolorelse{#1#2} - {\setXMLpar\FOtag{\FOatt-color}{#1#2}} - {\doifelsenothing{\XMLval{fo:border-style}{#1#2}\empty} - {\doifcolorelse{#1#2} - {\setXMLpar\FOtag{\FOatt-color}{#1#2}} - {\setXMLpar\FOtag{\FOatt-width}{#1#2}}} - {\setXMLpar\FOtag{\FOatt-style}{#1#2}}}% - \expandafter\docheckFOborder - \fi#3} - -\def\checkFOposition#1#2% - {\edef\FOattribute{\XMLpar{#1}{#2-position}\empty}% - \ifx\FOattribute\empty\else - \edef\FOtag{#1}% - \edef\FOatt{#2-position}% - \scratchcounter\zerocount - \expanded{\docheckFOposition\FOattribute\space\relax\space\relax}\od - \fi} - -\def\docheckFOposition#1#2 #3% - {\ifx#1\relax - \expandafter\noFOchecks - \else - \advance\scratchcounter\plusone - \ifcase\scratchcounter - \or - \setXMLpar\FOtag{\FOatt-vertical}{#1#2}% - \or - \setXMLpar\FOtag{\FOatt-horizontal}{#1#2}% - \fi - \expandafter\docheckFOposition - \fi#3} - -\def\checkFOpadding{\def\FOatt{padding}\checkFOquadruple} -\def\checkFOmargin {\def\FOatt{margin}\checkFOquadruple} - -\def\checkFOquadruple#1% - {\edef\FOattribute{\XMLpar{#1}\FOatt\empty}% - \ifx\FOattribute\empty\else - \edef\FOtag{#1}% - \scratchcounter\zerocount - \expanded{\docheckFOquadruple\FOattribute\space\relax\space\relax}\od - \ifcase\scratchcounter - \let\FOattributeT\FOattribute - \let\FOattributeR\FOattribute - \let\FOattributeB\FOattribute - \let\FOattributeL\FOattribute - \or % (tblr) - \let\FOattributeT\FOattribute - \let\FOattributeR\FOattribute - \let\FOattributeB\FOattribute - \let\FOattributeL\FOattribute - \or % (tb)(lr) - \let\FOattributeB\FOattributeT - \let\FOattributeL\FOattributeR - \or % (t)(lr)(b) - \let\FOattributeL\FOattributeR - \or % (t)(r)(b)(l) - % already ok - \fi - \letXMLpar\FOtag{\FOatt-top}\FOattributeT - \letXMLpar\FOtag{\FOatt-right}\FOattributeR - \letXMLpar\FOtag{\FOatt-bottom}\FOattributeB - \letXMLpar\FOtag{\FOatt-left}\FOattributeL - \fi} - -\def\docheckFOquadruple#1#2 #3% - {\ifx#1\relax - \expandafter\noFOchecks - \else - \advance\scratchcounter\plusone - \ifcase\scratchcounter - \or - \edef\FOattributeT{#1#2}% - \or - \edef\FOattributeR{#1#2}% - \or - \edef\FOattributeB{#1#2}% - \or - \edef\FOattributeL{#1#2}% - \fi - \expandafter\docheckFOquadruple - \fi#3} - -% \def\setFOimagename#1% -% {\edef\FOimagename{#1}% -% \aftersplitstring \FOimagename\at url('\to\xFOimagename -% \ifx\xFOimagename\empty \else -% \beforesplitstring\xFOimagename\at ')\to\FOimagename -% \fi -% \aftersplitstring \FOimagename\at url("\to\xFOimagename -% \ifx\xFOimagename\empty \else -% \beforesplitstring\xFOimagename\at ")\to\FOimagename -% \fi} -% -% let's overkill: - -\def\setFOimagename#1% - {\analyzefunction{#1}% - \doifelse\functionname{url} - {\edef\FOimagename{\@EA\unstringed\functionA}} - {\ifx\functionname\empty - \def\FOimagename{#1}% - \else - \def\FOimagename{dummy}% - \fi}} - -% font - -\mapXMLvalue {fo:weight} {normal} {} -\mapXMLvalue {fo:weight} {bold} {bold} -\mapXMLvalue {fo:weight} {bolder} {bold} -\mapXMLvalue {fo:weight} {lighter} {normal} -\mapXMLvalue {fo:weight} {100} {normal} -\mapXMLvalue {fo:weight} {200} {normal} -\mapXMLvalue {fo:weight} {300} {normal} -\mapXMLvalue {fo:weight} {400} {normal} -\mapXMLvalue {fo:weight} {500} {normal} -\mapXMLvalue {fo:weight} {600} {normal} -\mapXMLvalue {fo:weight} {700} {normal} -\mapXMLvalue {fo:weight} {800} {normal} -\mapXMLvalue {fo:weight} {900} {normal} - -\mapXMLvalue {fo:variant} {normal} {} -\mapXMLvalue {fo:variant} {small-caps} {small-caps} - -\mapXMLvalue {fo:style} {normal} {normal} -\mapXMLvalue {fo:style} {italic} {italic} -\mapXMLvalue {fo:style} {oblique} {oblique} -\mapXMLvalue {fo:style} {backslant} {normal} - -% we can get crap like: 10pt/1.5 bold "Times Roman" ; i'm really puzzled why an -% otherwise rather verbose coding occasionally packs attributes; a design flaw - -\newtoks\FOfonttoks - -\def\checkFOfontSS#1'{} -\def\checkFOfontDD#1"{} -\def\checkFOfontII#1 {} - -\bgroup -\catcode`\'=\active -\catcode`\"=\active -\catcode`\/=\active -\gdef\setcheckFOfontX - {\catcode`\'=\active - \catcode`\"=\active - \catcode`\/=\active - \def'##1'{\global\FOfonttoks\expandafter{\the\FOfonttoks\def\FOfontfamily{##1}}}% - \def"##1"{\global\FOfonttoks\expandafter{\the\FOfonttoks\def\FOfontfamily{##1}}}% - \def/##1 {}}% todo linespacing -\gdef\setcheckFOfontXX - {\catcode`\'=\active - \catcode`\"=\active - \catcode`\/=\active - \def'##1'{}% - \def"##1"{}% - \def/##1 {}}% todo linespacing -\egroup - -\globallet\xFOattribute\empty - -\def\checkFOfont#1% - {\FOfonttoks\emptytoks - \bgroup - \catcode`\\=\@@escape - \catcode`\{=\@@begingroup - \catcode`\}=\@@endgroup -% \catcode`\:=\@@letter -% \catcode`\-=\@@letter - \setcheckFOfontX - \xdef\xFOattribute{#1 }% - \setbox\scratchbox\hbox{\scantokens\@EA{\xFOattribute}}% - \setcheckFOfontXX - \scantokens\@EA{\@EA\xdef\@EA\xFOattribute\@EA{\xFOattribute}}% - \egroup - \the\FOfonttoks - \ifx\xFOattribute\empty\else - \expanded{\docheckFOfont\xFOattribute\space\relax\space\relax}\od - \fi - \directsetup{fo:font:family:check}} - -\def\docheckFOfont#1#2 #3% - {\ifx#1\relax - \expandafter\noFOchecks - \else - \directsetup{fo:fonts:reset}% - \doifelsefontsynonym{#1#2} - {\def\FOfontfamily{#1#2}} - {\doifelsenothing{\XMLval{fo:weight}{#1#2}{}} - {\doifelsenothing{\XMLval{fo:variant}{#1#2}{}} - {\doifelsenothing{\XMLval{fo:style}{#1#2}{}} - {\setpercentdimen\dFOfontsize{#1#2}} - {\edef\FOfontstyle{\XMLval{fo:style}{#1#2}{}}}} - {\edef\FOfontvariant{\XMLval{fo:variant}{#1#2}{}}}} - {\edef\FOfontweight{\XMLval{fo:weight}{#1#2}{}}}}% - \expandafter\docheckFOfont - \fi#3} - -\protect - -\newtoks\FOreferences - -\def\setFOreference#1% - {\doifsomething{\XMLpar{#1}{id}{}} - {\expanded{\appendtoks - \noexpand\reference[\XMLpar{#1}{id}{}]{\XMLpar{fo:page-sequence}{format}{}}}% - \to\FOreferences}} - -\def\flushFOreferences - {\the\FOreferences - \global\FOreferences\emptytoks} - -\def\doFOreference#1% - {\doifsomething{\XMLpar{#1}{id}{}} - {\expanded{\reference[\XMLpar{#1}{id}{}]{\XMLpar{fo:page-sequence}{format}{}}}}} - -\appendtoks \flushFOreferences \to \everypar -\appendtoks \flushFOreferences \to \neverypar % check ! - -%D Graphics: static frames - -\startMPinclusions - input mp-fobg.mp ; -\stopMPinclusions - -\def\unknownMPcolor{FoNoColor} - -% todo: combine into one en alleen tweede run, immers toch geen invloed; is -% aangezien de referentiepunten vast liggen - -\def\FoRegionWidth#1% - {\XMLpav - {fo:border-width} - {fo:region-\MPvar{location}} - {border-#1-width} - {FoMedium}} - -\def\FoRegionStyle#1% - {\XMLpav - {fo:border-style} - {fo:region-\MPvar{location}} - {border-#1-style} - {FoNone}} - -\def\FoRegionColor#1% - {\MPcolor{\XMLpar - {fo:region-\MPvar{location}} - {border-#1-color} - {black}}} - -\def\FoRegionBackgroundColor - {\MPcolor{\XMLpar - {fo:region-\MPvar{location}} - {background-color} - {FoNoColor}}} - -% todo: when connected and same color : one draw - -\startuseMPgraphic{region-do} - FoBackgroundColor := \FoRegionBackgroundColor ; - FoLineColor[FoTop] := \FoRegionColor{top} ; - FoLineColor[FoBottom] := \FoRegionColor{bottom} ; - FoLineColor[FoLeft] := \FoRegionColor{left} ; - FoLineColor[FoRight] := \FoRegionColor{right} ; - FoLineStyle[FoTop] := \FoRegionStyle{top} ; - FoLineStyle[FoBottom] := \FoRegionStyle{bottom} ; - FoLineStyle[FoLeft] := \FoRegionStyle{left} ; - FoLineStyle[FoRight] := \FoRegionStyle{right} ; - FoLineWidth[FoTop] := \FoRegionWidth{top} ; - FoLineWidth[FoBottom] := \FoRegionWidth{bottom} ; - FoLineWidth[FoLeft] := \FoRegionWidth{left} ; - FoLineWidth[FoRight] := \FoRegionWidth{right} ; - if FoBackgroundColor <> FoNoColor : - fill OverlayBox - withcolor FoBackgroundColor ; - fi ; - path OverlayFrameBox ; - interim linecap := butt ; - OverlayFrameBox := OverlayBox - topenlarged -.5FoLineWidth[FoTop] - bottomenlarged -.5FoLineWidth[FoBottom] - leftenlarged -.5FoLineWidth[FoLeft] - rightenlarged -.5FoLineWidth[FoRight] ; - DrawFoFrame(FoTop, topboundary OverlayFrameBox) ; - DrawFoFrame(FoBottom, bottomboundary OverlayFrameBox) ; - DrawFoFrame(FoLeft, leftboundary OverlayFrameBox) ; - DrawFoFrame(FoRight, rightboundary OverlayFrameBox) ; -\stopuseMPgraphic - -\startuseMPgraphic{region-body} \includeMPgraphic{region-do} \stopuseMPgraphic -\startuseMPgraphic{region-before} \includeMPgraphic{region-do} \stopuseMPgraphic -\startuseMPgraphic{region-after} \includeMPgraphic{region-do} \stopuseMPgraphic -\startuseMPgraphic{region-start} \includeMPgraphic{region-do} \stopuseMPgraphic -\startuseMPgraphic{region-end} \includeMPgraphic{region-do} \stopuseMPgraphic - -\startnotmode[fo-no-bg] - -\defineoverlay[region-body-graphic] [\useMPgraphic{region-body}{location=body}] -\defineoverlay[region-before-graphic][\useMPgraphic{region-before}{location=before}] -\defineoverlay[region-after-graphic] [\useMPgraphic{region-after}{location=after}] -\defineoverlay[region-start-graphic] [\useMPgraphic{region-start}{location=start}] -\defineoverlay[region-end-graphic] [\useMPgraphic{region-end}{location=end}] - -\stopnotmode - -% more efficient: todo: relocate and move to page background - -% \def\FoRegionWidth#1#2% -% {\XMLpav -% {fo:border-width} -% {fo:region-#2} -% {border-#1-width} -% {FoMedium}} - -% \def\FoRegionStyle#1#2% -% {\XMLpav -% {fo:border-style} -% {fo:region-#2} -% {border-#1-style} -% {FoNone}} - -% \def\FoRegionColor#1#2% -% {\MPcolor{\XMLpar -% {fo:region-#2} -% {border-#1-color} -% {black}}} - -% \def\FoRegionBackgroundColor#1% -% {\MPcolor{\XMLpar -% {fo:region-#1} -% {background-color} -% {FoNoColor}}} - -% \def\combinedFOgraphic#1% -% {FoBackgroundColor := \FoRegionBackgroundColor{#1} ; -% FoLineColor[FoTop] := \FoRegionColor{top}{#1} ; -% FoLineColor[FoBottom] := \FoRegionColor{bottom}{#1} ; -% FoLineColor[FoLeft] := \FoRegionColor{left}{#1} ; -% FoLineColor[FoRight] := \FoRegionColor{right}{#1} ; -% FoLineStyle[FoTop] := \FoRegionStyle{top}{#1} ; -% FoLineStyle[FoBottom] := \FoRegionStyle{bottom}{#1} ; -% FoLineStyle[FoLeft] := \FoRegionStyle{left}{#1} ; -% FoLineStyle[FoRight] := \FoRegionStyle{right}{#1} ; -% FoLineWidth[FoTop] := \FoRegionWidth{top}{#1} ; -% FoLineWidth[FoBottom] := \FoRegionWidth{bottom}{#1} ; -% FoLineWidth[FoLeft] := \FoRegionWidth{left}{#1} ; -% FoLineWidth[FoRight] := \FoRegionWidth{right}{#1} ; -% if FoBackgroundColor <> FoNoColor : -% fill OverlayBox -% withcolor FoBackgroundColor ; -% fi ; -% path OverlayFrameBox ; -% interim linecap := butt ; -% OverlayFrameBox := OverlayBox -% topenlarged -.5FoLineWidth[FoTop] -% bottomenlarged -.5FoLineWidth[FoBottom] -% leftenlarged -.5FoLineWidth[FoLeft] -% rightenlarged -.5FoLineWidth[FoRight] ; -% DrawFoFrame(FoTop, topboundary OverlayFrameBox) ; -% DrawFoFrame(FoBottom, bottomboundary OverlayFrameBox) ; -% DrawFoFrame(FoLeft, leftboundary OverlayFrameBox) ; -% DrawFoFrame(FoRight, rightboundary OverlayFrameBox) ;} - -% \startuseMPgraphic{region-body} -% \combinedFOgraphic{before} -% \combinedFOgraphic{body} -% \combinedFOgraphic{after} -% \combinedFOgraphic{start} -% \combinedFOgraphic{end} -% \stopuseMPgraphic - -% \defineoverlay[region-body-graphic] [\useMPgraphic{region-body}{location=body}] -% \defineoverlay[region-before-graphic][] -% \defineoverlay[region-after-graphic] [] -% \defineoverlay[region-start-graphic] [] -% \defineoverlay[region-end-graphic] [] - -\stopXMLcompiling - -\endinput - -% we can follow two approaches: set the attributes global, using -% -% \defineXML...[tag][prefix][empty] -% -% in that case we trust the fo-file to be correct, i.e. the xslt style -% sheets should not put attributes in the wrong places; however, we need -% to do that with care, since for instance the attributes of some objects -% (regions) are used mixed -% -% \defineXMLprocess [fo:root] [XMLFO] [test=unset] -% -% \defineXMLenvironment [fo:block-container] [XMLFO] -% {\begingroup} -% {\endgroup} -% -% \defineXMLenvironment [fo:block] [XMLFO] -% {\begingroup\getXMLparameters[XMLFO]\begingroup} -% {\endgroup\XMLFOtest\endgraf\endgroup} -% -% \startXMLdata -% <fo:root> -% <fo:block-container test='first'><fo:block test='second'>second:</fo:block></fo:block-container> -% <fo:block>unset:</fo:block> -% <fo:block test='outer'><fo:block test='nested'>nested:</fo:block>outer:</fo:block> -% <fo:block test='last'>last:</fo:block> -% </fo:root> -% \stopXMLdata -% -% the other approach is to set the attributes explicitly for each -% element, which is slower but more robust -% -% A mix is: -% -% \defineXMLenvironment -% [fo:root] -% [test=unset] -% {\beginXMLelement} -% {\endXMLelement} -% -% \defineXMLenvironment -% [fo:block-container] -% [test=\XMLpar\XMLpureparent{test}{}] -% {\beginXMLelement} -% {\endXMLelement} -% -% \defineXMLenvironment -% [fo:block] -% [test=\XMLpar\XMLpureparent{test}{}] -% {\beginXMLelement -% \begingroup} -% {\endgroup -% \XMLpar{fo:block}{test}{} -% \endXMLelement} -% -% \startXMLdata -% <fo:root> -% <fo:block-container test='first'><fo:block test='second'>second:</fo:block></fo:block-container> -% <fo:block>unset:</fo:block> -% <fo:block test='outer'><fo:block test='nested'>nested:</fo:block>outer:</fo:block> -% <fo:block test='last'>last:</fo:block> -% </fo:root> -% \stopXMLdata |