summaryrefslogtreecommitdiff
path: root/tex/context/base/page-plg.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/page-plg.mkiv')
-rw-r--r--tex/context/base/page-plg.mkiv110
1 files changed, 63 insertions, 47 deletions
diff --git a/tex/context/base/page-plg.mkiv b/tex/context/base/page-plg.mkiv
index 004b9204d..b59a05a94 100644
--- a/tex/context/base/page-plg.mkiv
+++ b/tex/context/base/page-plg.mkiv
@@ -11,10 +11,11 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% \ifx\pageareabox\undefined \else \endinput \fi
-
\writestatus{loading}{ConTeXt Page Macros / Extra Page Building}
+%D This still needs some work, especially the dimensions need to be
+%D checked cq.\ optimized. Beware: method has become alternative!
+
%D This feature has been present for a while but has never been
%D exploited: pluggable pagebuilders. The next example code
%D demonstrates the application of one such a plug-in. This variant
@@ -31,6 +32,8 @@
%D \startpagelayout[leftpage]
%D \setupTABLE[offset=overlay]
%D \setupTABLE[c][1][width=\leftmarginwidth]
+%D \setupTABLE[c][2][width=\textwidth]
+%D \setupTABLE[c][3][width=\rightmarginwidth]
%D \bTABLE
%D \bTR
%D \bTD[nx=3,background=color,backgroundcolor=green]
@@ -43,7 +46,7 @@
%D \eTR
%D \bTR
%D \bTD[nx=3,offset=overlay]
-%D {\bTABLE[width=.5\hsize]
+%D {\bTABLE
%D \bTR
%D \bTD \pagearea[footer][text][left] \eTD
%D \bTD \pagearea[bottom][text][left] \eTD
@@ -56,7 +59,9 @@
%D
%D \startpagelayout[rightpage]
%D \setupTABLE[offset=overlay]
-%D \setupTABLE[c][1][width=\rightmarginwidth]
+%D \setupTABLE[c][1][width=\leftmarginwidth]
+%D \setupTABLE[c][2][width=\textwidth]
+%D \setupTABLE[c][3][width=\rightmarginwidth]
%D \bTABLE
%D \bTR
%D \bTD[nx=3] \pagearea[header][text][middle] \eTD
@@ -67,7 +72,7 @@
%D \eTR
%D \bTR
%D \bTD[nx=3,offset=overlay]
-%D {\bTABLE[width=.5\hsize]
+%D {\bTABLE
%D \bTR
%D \bTD \pagearea[bottom][text][right] \eTD
%D \bTD \pagearea[footer][text][right] \eTD
@@ -80,12 +85,9 @@
%D
%D \setupcolors[state=start]
%D
-%D \setupbackgrounds[text][background=color,backgroundcolor=blue]
-%D \setupbackgrounds[header][text][background=color,backgroundcolor=red]
-%D
%D \setuppagenumbering[alternative=doublesided,location=]
%D
-%D \setuplayout[method=makeup]
+%D \setuplayout[alternative=makeup]
%D
%D \definetextbackground
%D [test]
@@ -110,6 +112,8 @@
\unprotect
+\installcorenamespace{layoutmakeupalternative}
+
\def\page_boxes_construct_content_makeup#1#2#3% targetbox flusher box
{\setbox#1\hbox
{\vbox to \textheight
@@ -125,65 +129,77 @@
\dp#1\zeropoint
\hsize\paperwidth
\vsize\paperheight
- \setbox#1\vbox{\csname\??layoutmethod\doifbothsidesoverruled\v!page\v!rightpage\v!leftpage\endcsname}%
+ \setbox#1\vbox{\csname\??layoutmakeupalternative\doifbothsidesoverruled\v!page\v!rightpage\v!leftpage\endcsname}%
\wd#1\paperwidth
\ht#1\paperheight
\dp#1\zeropoint}
\installlayoutalternative\v!makeup{\page_boxes_construct_content_makeup}
-\newbox\pageareabox
+\newbox\b_page_area
\unexpanded\def\pagearea
{\dotripleempty\page_area}
-\def\page_area[#1][#2][#3]%
+\def\page_area
{\ifthirdargument
- \doifelse{#3}\v!left
- {\page_area_indeed{#1}{#2}\c!lefttext}
- {\doifelse{#3}\v!right
- {\page_area_indeed{#1}{#2}\c!righttext}
- {\page_area_indeed{#1}{#2}\c!middletext}}%
+ \expandafter\page_area_three
\else\ifsecondargument
- \doifbothsidesoverruled
- {\page_area_indeed{#1}{#2}\c!righttext}
- {\page_area_indeed{#1}{#2}\c!righttext}
- {\page_area_indeed{#1}{#2}\c!lefttext }%
+ \doubleexpandafter\page_area_two
\else
- \doif{#1}\v!text % copy due to trial runs in TABLE
- {\iftrialtypesetting
-% \copy\pagebox
- \fakebox\pagebox
- \else
-% \localpositioningfalse
- \page_backgrounds_add_to_text\pagebox
- \page_grids_add_to_box\pagebox
- \box\pagebox
- \fi}%
+ \doubleexpandafter\page_area_one
\fi\fi}
-\def\page_area_indeed#1#2#3%
- {\setbox\pageareabox\vbox{\getspecificlayouttext{#1}{#2}{#3}}%
- \ifsomebackgroundfound{#1#2}%
+\def\page_area_three[#1][#2][#3]%
+ {\edef\m_page_area_three{#3}%
+ \ifx\m_page_area_three\v!left
+ \let\m_page_area_three\c!lefttext
+ \else\ifx\m_page_area_three\v!right
+ \let\m_page_area_three\c!righttext
+ \else
+ \let\m_page_area_three\c!middletext
+ \fi\fi
+ \page_area_indeed{#1}{#2}\m_page_area_three}
+
+\def\page_area_two[#1][#2][#3]%
+ {\edef\m_page_area_three{\doifbothsidesoverruled\c!righttext\c!righttext\c!lefttext}%
+ \page_area_indeed{#1}{#2}\m_page_area_three}
+
+\def\page_area_one[#1][#2][#3]%
+ {\edef\m_page_area_one{#1}
+ \ifx\m_page_area_one\v!text % copy due to trial runs in TABLE
\iftrialtypesetting
-% \box\pageareabox
- \fakebox\pageareabox
+ \fakebox\pagebox
\else
- \localframed
- [\??ma#1#2]
- [\c!width=\wd\pageareabox,
- \c!height=\ht\pageareabox,
- \c!offset=\v!overlay]
- {\box\pageareabox}%
+ \page_backgrounds_add_to_text\pagebox
+ \page_grids_add_to_box\pagebox
+ \box\pagebox
\fi
- \else
- \box\pageareabox
\fi}
+\def\page_area_indeed#1#2#3%
+ {\setbox\b_page_area\vbox{\getspecificlayouttext{#1}{#2}{#3}}%
+ \iftrialtypesetting
+ \fakebox\b_page_area
+ \else\ifcsname\??layoutbackgrounds#1#2\endcsname
+ \page_area_indeed_yes{#1}{#2}%
+ \else
+ \box\b_page_area
+ \fi\fi}
+
+\def\page_area_indeed_yes#1#2%
+ {% todo: \localbackgroundframed{\??layoutbackgrounds#1#2}{#1:#2}
+ \localframed % todo:
+ [\??layoutbackgrounds#1#2]
+ [\c!width=\wd\b_page_area,
+ \c!height=\ht\b_page_area,
+ \c!offset=\v!overlay]
+ {\box\b_page_area}}
+
% to be done nicely (proper namespacing)
-\setvalue{\??layoutmethod\v!leftpage }{\csname\??layoutmethod\v!page\endcsname}
-\setvalue{\??layoutmethod\v!rightpage}{\csname\??layoutmethod\v!page\endcsname}
+\setvalue{\??layoutmakeupalternative\v!leftpage }{\csname\??layoutmakeupalternative\v!page\endcsname}
+\setvalue{\??layoutmakeupalternative\v!rightpage}{\csname\??layoutmakeupalternative\v!page\endcsname}
\unexpanded\def\startpagelayout
{\bgroup
@@ -194,6 +210,6 @@
\def\page_layouts_start_layout[#1]#2\stoppagelayout
{\egroup
- \setvalue{\??layoutmethod#1}{#2}}
+ \setvalue{\??layoutmakeupalternative#1}{#2}}
\protect \endinput