mp-cont.mpxl /size: 18 Kb    last modification: 2021-10-28 13:50
1%D \module
2%D   [       file=mp-cont.mpiv,
3%D        version=1999.03.10,
4%D          title=\CONTEXT\ \METAPOST\ graphics,
5%D       subtitle=Interfaces,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14%D This module is rather preliminary and subjected to changes.
15
16if known metafun_loaded_cont : endinput ; fi ;
17
18newinternal boolean metafun_loaded_cont ; metafun_loaded_cont := true ; immutable metafun_loaded_cont ;
19
20string CurrentLayout ; CurrentLayout := "default" ;
21
22boolean mfun_swapped ;
23
24def SwapPageState =
25    mfun_swapped := true ; % eventually this will go !
26enddef ;
27
28permanent CurrentLayout, SwapPageState ;
29
30extra_beginfig := extra_beginfig & "mfun_swapped := false ;" ;
31
32newscriptindex mfid_PaperHeight          ; mfid_PaperHeight          := scriptindex "PaperHeight"          ; vardef PaperHeight          = runscript mfid_PaperHeight          enddef ;
33newscriptindex mfid_PaperWidth           ; mfid_PaperWidth           := scriptindex "PaperWidth"           ; vardef PaperWidth           = runscript mfid_PaperWidth           enddef ;
34newscriptindex mfid_PrintPaperHeight     ; mfid_PrintPaperHeight     := scriptindex "PrintPaperHeight"     ; vardef PrintPaperHeight     = runscript mfid_PrintPaperHeight     enddef ;
35newscriptindex mfid_PrintPaperWidth      ; mfid_PrintPaperWidth      := scriptindex "PrintPaperWidth"      ; vardef PrintPaperWidth      = runscript mfid_PrintPaperWidth      enddef ;
36newscriptindex mfid_TopSpace             ; mfid_TopSpace             := scriptindex "TopSpace"             ; vardef TopSpace             = runscript mfid_TopSpace             enddef ;
37newscriptindex mfid_BottomSpace          ; mfid_BottomSpace          := scriptindex "BottomSpace"          ; vardef BottomSpace          = runscript mfid_BottomSpace          enddef ;
38newscriptindex mfid_BackSpace            ; mfid_BackSpace            := scriptindex "BackSpace"            ; vardef BackSpace            = runscript mfid_BackSpace            enddef ;
39newscriptindex mfid_CutSpace             ; mfid_CutSpace             := scriptindex "CutSpace"             ; vardef CutSpace             = runscript mfid_CutSpace             enddef ;
40newscriptindex mfid_MakeupHeight         ; mfid_MakeupHeight         := scriptindex "MakeupHeight"         ; vardef MakeupHeight         = runscript mfid_MakeupHeight         enddef ;
41newscriptindex mfid_MakeupWidth          ; mfid_MakeupWidth          := scriptindex "MakeupWidth"          ; vardef MakeupWidth          = runscript mfid_MakeupWidth          enddef ;
42newscriptindex mfid_TopHeight            ; mfid_TopHeight            := scriptindex "TopHeight"            ; vardef TopHeight            = runscript mfid_TopHeight            enddef ;
43newscriptindex mfid_TopDistance          ; mfid_TopDistance          := scriptindex "TopDistance"          ; vardef TopDistance          = runscript mfid_TopDistance          enddef ;
44newscriptindex mfid_HeaderHeight         ; mfid_HeaderHeight         := scriptindex "HeaderHeight"         ; vardef HeaderHeight         = runscript mfid_HeaderHeight         enddef ;
45newscriptindex mfid_HeaderDistance       ; mfid_HeaderDistance       := scriptindex "HeaderDistance"       ; vardef HeaderDistance       = runscript mfid_HeaderDistance       enddef ;
46newscriptindex mfid_TextHeight           ; mfid_TextHeight           := scriptindex "TextHeight"           ; vardef TextHeight           = runscript mfid_TextHeight           enddef ;
47newscriptindex mfid_FooterDistance       ; mfid_FooterDistance       := scriptindex "FooterDistance"       ; vardef FooterDistance       = runscript mfid_FooterDistance       enddef ;
48newscriptindex mfid_FooterHeight         ; mfid_FooterHeight         := scriptindex "FooterHeight"         ; vardef FooterHeight         = runscript mfid_FooterHeight         enddef ;
49newscriptindex mfid_BottomDistance       ; mfid_BottomDistance       := scriptindex "BottomDistance"       ; vardef BottomDistance       = runscript mfid_BottomDistance       enddef ;
50newscriptindex mfid_BottomHeight         ; mfid_BottomHeight         := scriptindex "BottomHeight"         ; vardef BottomHeight         = runscript mfid_BottomHeight         enddef ;
51newscriptindex mfid_LeftEdgeWidth        ; mfid_LeftEdgeWidth        := scriptindex "LeftEdgeWidth"        ; vardef LeftEdgeWidth        = runscript mfid_LeftEdgeWidth        enddef ;
52newscriptindex mfid_LeftEdgeDistance     ; mfid_LeftEdgeDistance     := scriptindex "LeftEdgeDistance"     ; vardef LeftEdgeDistance     = runscript mfid_LeftEdgeDistance     enddef ;
53newscriptindex mfid_LeftMarginWidth      ; mfid_LeftMarginWidth      := scriptindex "LeftMarginWidth"      ; vardef LeftMarginWidth      = runscript mfid_LeftMarginWidth      enddef ;
54newscriptindex mfid_LeftMarginDistance   ; mfid_LeftMarginDistance   := scriptindex "LeftMarginDistance"   ; vardef LeftMarginDistance   = runscript mfid_LeftMarginDistance   enddef ;
55newscriptindex mfid_TextWidth            ; mfid_TextWidth            := scriptindex "TextWidth"            ; vardef TextWidth            = runscript mfid_TextWidth            enddef ;
56newscriptindex mfid_RightMarginDistance  ; mfid_RightMarginDistance  := scriptindex "RightMarginDistance"  ; vardef RightMarginDistance  = runscript mfid_RightMarginDistance  enddef ;
57newscriptindex mfid_RightMarginWidth     ; mfid_RightMarginWidth     := scriptindex "RightMarginWidth"     ; vardef RightMarginWidth     = runscript mfid_RightMarginWidth     enddef ;
58newscriptindex mfid_RightEdgeDistance    ; mfid_RightEdgeDistance    := scriptindex "RightEdgeDistance"    ; vardef RightEdgeDistance    = runscript mfid_RightEdgeDistance    enddef ;
59newscriptindex mfid_RightEdgeWidth       ; mfid_RightEdgeWidth       := scriptindex "RightEdgeWidth"       ; vardef RightEdgeWidth       = runscript mfid_RightEdgeWidth       enddef ;
60newscriptindex mfid_InnerMarginDistance  ; mfid_InnerMarginDistance  := scriptindex "InnerMarginDistance"  ; vardef InnerMarginDistance  = runscript mfid_InnerMarginDistance  enddef ;
61newscriptindex mfid_InnerMarginWidth     ; mfid_InnerMarginWidth     := scriptindex "InnerMarginWidth"     ; vardef InnerMarginWidth     = runscript mfid_InnerMarginWidth     enddef ;
62newscriptindex mfid_OuterMarginDistance  ; mfid_OuterMarginDistance  := scriptindex "OuterMarginDistance"  ; vardef OuterMarginDistance  = runscript mfid_OuterMarginDistance  enddef ;
63newscriptindex mfid_OuterMarginWidth     ; mfid_OuterMarginWidth     := scriptindex "OuterMarginWidth"     ; vardef OuterMarginWidth     = runscript mfid_OuterMarginWidth     enddef ;
64newscriptindex mfid_InnerEdgeDistance    ; mfid_InnerEdgeDistance    := scriptindex "InnerEdgeDistance"    ; vardef InnerEdgeDistance    = runscript mfid_InnerEdgeDistance    enddef ;
65newscriptindex mfid_InnerEdgeWidth       ; mfid_InnerEdgeWidth       := scriptindex "InnerEdgeWidth"       ; vardef InnerEdgeWidth       = runscript mfid_InnerEdgeWidth       enddef ;
66newscriptindex mfid_OuterEdgeDistance    ; mfid_OuterEdgeDistance    := scriptindex "OuterEdgeDistance"    ; vardef OuterEdgeDistance    = runscript mfid_OuterEdgeDistance    enddef ;
67newscriptindex mfid_OuterEdgeWidth       ; mfid_OuterEdgeWidth       := scriptindex "OuterEdgeWidth"       ; vardef OuterEdgeWidth       = runscript mfid_OuterEdgeWidth       enddef ;
68newscriptindex mfid_PageOffset           ; mfid_PageOffset           := scriptindex "PageOffset"           ; vardef PageOffset           = runscript mfid_PageOffset           enddef ;
69newscriptindex mfid_PageDepth            ; mfid_PageDepth            := scriptindex "PageDepth"            ; vardef PageDepth            = runscript mfid_PageDepth            enddef ;
70newscriptindex mfid_LayoutColumns        ; mfid_LayoutColumns        := scriptindex "LayoutColumns"        ; vardef LayoutColumns        = runscript mfid_LayoutColumns        enddef ;
71newscriptindex mfid_LayoutColumnDistance ; mfid_LayoutColumnDistance := scriptindex "LayoutColumnDistance" ; vardef LayoutColumnDistance = runscript mfid_LayoutColumnDistance enddef ;
72newscriptindex mfid_LayoutColumnWidth    ; mfid_LayoutColumnWidth    := scriptindex "LayoutColumnWidth"    ; vardef LayoutColumnWidth    = runscript mfid_LayoutColumnWidth    enddef ;
73
74immutable % permanent
75    PaperHeight, PaperWidth, PrintPaperHeight, PrintPaperWidth, TopSpace,
76    BottomSpace, BackSpace, CutSpace, MakeupHeight, MakeupWidth, TopHeight,
77    TopDistance, HeaderHeight, HeaderDistance, TextHeight, FooterDistance,
78    FooterHeight, BottomDistance, BottomHeight, LeftEdgeWidth, LeftEdgeDistance,
79    LeftMarginWidth, LeftMarginDistance, TextWidth, RightMarginDistance,
80    RightMarginWidth, RightEdgeDistance, RightEdgeWidth, InnerMarginDistance,
81    InnerMarginWidth, OuterMarginDistance, OuterMarginWidth, InnerEdgeDistance,
82    InnerEdgeWidth, OuterEdgeDistance, OuterEdgeWidth, PageOffset, PageDepth,
83    LayoutColumns, LayoutColumnDistance, LayoutColumnWidth ;
84
85newscriptindex mfid_OnRightPage      ; mfid_OnRightPage      := scriptindex "OnRightPage"      ; vardef OnRightPage      = runscript mfid_OnRightPage      enddef ;
86newscriptindex mfid_OnOddPage        ; mfid_OnOddPage        := scriptindex "OnOddPage"        ; vardef OnOddPage        = runscript mfid_OnOddPage        enddef ;
87newscriptindex mfid_InPageBody       ; mfid_InPageBody       := scriptindex "InPageBody"       ; vardef InPageBody       = runscript mfid_InPageBody       enddef ;
88newscriptindex mfid_LayoutHasChanged ; mfid_LayoutHasChanged := scriptindex "LayoutHasChanged" ; vardef LayoutHasChanged = runscript mfid_LayoutHasChanged enddef ;
89
90immutable % permanent
91    OnRightPage, OnOddPage, InPageBody, LayoutHasChanged ;
92
93newscriptindex mfid_RealPageNumber ; mfid_RealPageNumber := scriptindex "RealPageNumber" ; vardef RealPageNumber= runscript mfid_RealPageNumber enddef ;
94newscriptindex mfid_LastPageNumber ; mfid_LastPageNumber := scriptindex "LastPageNumber" ; vardef LastPageNumber= runscript mfid_LastPageNumber enddef ;
95
96newscriptindex mfid_PageNumber     ; mfid_PageNumber     := scriptindex "PageNumber"     ; vardef PageNumber    = runscript mfid_PageNumber     enddef ;
97newscriptindex mfid_NOfPages       ; mfid_NOfPages       := scriptindex "NOfPages"       ; vardef NOfPages      = runscript mfid_NOfPages       enddef ;
98
99newscriptindex mfid_SubPageNumber  ; mfid_SubPageNumber  := scriptindex "SubPageNumber"  ; vardef SubPageNumber = runscript mfid_SubPageNumber  enddef ;
100newscriptindex mfid_NOfSubPages    ; mfid_NOfSubPages    := scriptindex "NOfSubPages"    ; vardef NOfSubPages   = runscript mfid_NOfSubPages    enddef ;
101
102newscriptindex mfid_CurrentColumn  ; mfid_CurrentColumn  := scriptindex "CurrentColumn"  ; vardef CurrentColumn = runscript mfid_CurrentColumn  enddef ;
103newscriptindex mfid_NOfColumns     ; mfid_NOfColumns     := scriptindex "NOfColumns"     ; vardef NOfColumns    = runscript mfid_NOfColumns     enddef ;
104
105immutable % permanent
106    RealPageNumber, LastPageNumber, PageNumber,
107    NOfPages, SubPageNumber, NOfSubPages, CurrentColumn, NOfColumns ;
108
109newscriptindex mfid_BaseLineSkip  ; mfid_BaseLineSkip  := scriptindex "BaseLineSkip"  ; vardef BaseLineSkip  = runscript mfid_BaseLineSkip         enddef ;
110newscriptindex mfid_LineHeight    ; mfid_LineHeight    := scriptindex "LineHeight"    ; vardef LineHeight    = runscript mfid_LineHeight           enddef ;
111newscriptindex mfid_BodyFontSize  ; mfid_BodyFontSize  := scriptindex "BodyFontSize"  ; vardef BodyFontSize  = runscript mfid_BodyFontSize         enddef ;
112
113newscriptindex mfid_TopSkip       ; mfid_TopSkip       := scriptindex "TopSkip"       ; vardef TopSkip       = runscript mfid_TopSkip              enddef ;
114newscriptindex mfid_StrutHeight   ; mfid_StrutHeight   := scriptindex "StrutHeight"   ; vardef StrutHeight   = runscript mfid_StrutHeight          enddef ;
115newscriptindex mfid_StrutDepth    ; mfid_StrutDepth    := scriptindex "StrutDepth"    ; vardef StrutDepth    = runscript mfid_StrutDepth           enddef ;
116
117newscriptindex mfid_CurrentWidth  ; mfid_CurrentWidth  := scriptindex "CurrentWidth"  ; vardef CurrentWidth  = runscript mfid_CurrentWidth         enddef ;
118newscriptindex mfid_CurrentHeight ; mfid_CurrentHeight := scriptindex "CurrentHeight" ; vardef CurrentHeight = runscript mfid_CurrentHeight        enddef ;
119
120newscriptindex mfid_HSize         ; mfid_HSize         := scriptindex "HSize"         ; vardef HSize         = runscript mfid_HSize                enddef ;
121newscriptindex mfid_VSize         ; mfid_VSize         := scriptindex "VSize"         ; vardef VSize         = runscript mfid_VSize                enddef ;
122
123newscriptindex mfid_EmWidth       ; mfid_EmWidth       := scriptindex "EmWidth"       ; vardef EmWidth       = runscript mfid_EmWidth              enddef ;
124newscriptindex mfid_ExHeight      ; mfid_ExHeight      := scriptindex "ExHeight"      ; vardef ExHeight      = runscript mfid_ExHeight             enddef ;
125
126immutable % permanent
127    BaseLineSkip, LineHeight, BodyFontSize, TopSkip, StrutHeight, StrutDepth,
128    CurrentWidth, CurrentHeight, HSize, VSize, EmWidth, ExHeight ;
129
130newscriptindex mfid_PageFraction ; mfid_PageFraction := scriptindex "PageFraction" ; vardef PageFraction = runscript mfid_PageFraction         enddef ;
131newscriptindex mfid_SpineWidth   ; mfid_SpineWidth   := scriptindex "SpineWidth"   ; vardef SpineWidth   = runscript mfid_SpineWidth           enddef ;
132newscriptindex mfid_PaperBleed   ; mfid_PaperBleed   := scriptindex "PaperBleed"   ; vardef PaperBleed   = runscript mfid_PaperBleed           enddef ;
133
134immutable % permanent
135    PageFraction, SpineWidth, PaperBleed ;
136
137%              mfid_CurrentLayout    ; mfid_CurrentLayout    := scriptindex "CurrentLayout"    ; vardef CurrentLayout    = runscript mfid_CurrentLayout        enddef ;
138%              mfid_OverlayLineColor ; mfid_OverlayLineColor := scriptindex "OverlayLineColor  ; vardef OverlayLineColor = runscript mfid_OverlayLineColor     enddef ;
139%              mfid_OverlayColor     ; mfid_OverlayColor     := scriptindex "OverlayColor      ; vardef OverlayColor     = runscript mfid_OverlayColor         enddef ;
140newscriptindex mfid_OverlayWidth     ; mfid_OverlayWidth     := scriptindex "OverlayWidth"     ; vardef OverlayWidth     = runscript mfid_OverlayWidth         enddef ;
141newscriptindex mfid_OverlayHeight    ; mfid_OverlayHeight    := scriptindex "OverlayHeight"    ; vardef OverlayHeight    = runscript mfid_OverlayHeight        enddef ;
142newscriptindex mfid_OverlayDepth     ; mfid_OverlayDepth     := scriptindex "OverlayDepth"     ; vardef OverlayDepth     = runscript mfid_OverlayDepth         enddef ;
143newscriptindex mfid_OverlayLineWidth ; mfid_OverlayLineWidth := scriptindex "OverlayLineWidth" ; vardef OverlayLineWidth = runscript mfid_OverlayLineWidth     enddef ;
144newscriptindex mfid_OverlayOffset    ; mfid_OverlayOffset    := scriptindex "OverlayOffset"    ; vardef OverlayOffset    = runscript mfid_OverlayOffset        enddef ;
145newscriptindex mfid_OverlayRegion    ; mfid_OverlayRegion    := scriptindex "OverlayRegion"    ; vardef OverlayRegion    = runscript mfid_OverlayRegion        enddef ;
146
147immutable % permanent
148  %  CurrentLayout, OverlayLineColor, OverlayColor,
149    OverlayWidth, OverlayHeight, OverlayDepth, OverlayLineWidth, OverlayOffset, OverlayRegion ;
150
151newscriptindex mfid_defaultcolormodel    ; mfid_defaultcolormodel    := scriptindex "defaultcolormodel"    ; vardef defaultcolormodel = runscript mfid_defaultcolormodel enddef ;
152
153immutable % permanent
154    defaultcolormodel ;
155
156vardef LeftMarginWidth     = if mfun_swapped and not OnRightPage : runscript mfid_RightMarginWidth    else : runscript mfid_LeftMarginWidth     fi enddef ;
157vardef RightMarginWidth    = if mfun_swapped and not OnRightPage : runscript mfid_LeftMarginWidth     else : runscript mfid_RightMarginWidth    fi enddef ;
158vardef LeftMarginDistance  = if mfun_swapped and not OnRightPage : runscript mfid_RightMarginDistance else : runscript mfid_LeftMarginDistance  fi enddef ;
159vardef RightMarginDistance = if mfun_swapped and not OnRightPage : runscript mfid_LeftMarginDistance  else : runscript mfid_RightMarginDistance fi enddef ;
160
161vardef LeftEdgeWidth       = if mfun_swapped and not OnRightPage : runscript mfid_RightEdgeWidth      else : runscript mfid_LeftEdgeWidth       fi enddef ;
162vardef RightEdgeWidth      = if mfun_swapped and not OnRightPage : runscript mfid_LeftEdgeWidth       else : runscript mfid_RightEdgeWidth      fi enddef ;
163vardef LeftEdgeDistance    = if mfun_swapped and not OnRightPage : runscript mfid_RightEdgeDistance   else : runscript mfid_LeftEdgeDistance    fi enddef ;
164vardef RightEdgeDistance   = if mfun_swapped and not OnRightPage : runscript mfid_LeftEdgeDistance    else : runscript mfid_RightEdgeDistance   fi enddef ;
165
166vardef BackSpace           = if mfun_swapped and not OnRightPage : PaperWidth - MakeupWidth - fi runscript mfid_BackSpace enddef ;
167vardef CutSpace            = if mfun_swapped and not OnRightPage : PaperWidth - MakeupWidth - fi runscript mfid_CutSpace  enddef ;
168
169% better use:
170
171vardef OuterMarginWidth    = if not OnRightPage : runscript mfid_LeftMarginWidth     else : runscript mfid_RightMarginWidth    fi enddef ;
172vardef InnerMarginWidth    = if not OnRightPage : runscript mfid_RightMarginWidth    else : runscript mfid_LeftMarginWidth     fi enddef ;
173vardef OuterMarginDistance = if not OnRightPage : runscript mfid_LeftMarginDistance  else : runscript mfid_RightMarginDistance fi enddef ;
174vardef InnerMarginDistance = if not OnRightPage : runscript mfid_RightMarginDistance else : runscript mfid_LeftMarginDistance  fi enddef ;
175
176vardef OuterEdgeWidth      = if not OnRightPage : runscript mfid_LeftEdgeWidth       else : runscript mfid_RightEdgeWidth      fi enddef ;
177vardef InnerEdgeWidth      = if not OnRightPage : runscript mfid_RightEdgeWidth      else : runscript mfid_LeftEdgeWidth       fi enddef ;
178vardef OuterEdgeDistance   = if not OnRightPage : runscript mfid_LeftEdgeDistance    else : runscript mfid_RightEdgeDistance   fi enddef ;
179vardef InnerEdgeDistance   = if not OnRightPage : runscript mfid_RightEdgeDistance   else : runscript mfid_LeftEdgeDistance    fi enddef ;
180
181vardef OuterSpaceWidth     = if not OnRightPage : runscript mfid_BackSpace           else : runscript mfid_CutSpace            fi enddef ;
182vardef InnerSpaceWidth     = if not OnRightPage : runscript mfid_CutSpace            else : runscript mfid_BackSpace           fi enddef ;
183
184% indices
185
186vardef OuterMargin = if not OnRightPage : LeftMargin  else : RightMargin fi enddef ;
187vardef InnerMargin = if not OnRightPage : RightMargin else : LeftMargin  fi enddef ;
188
189vardef OuterEdge   = if not OnRightPage : LeftEdge    else : RightEdge   fi enddef ;
190vardef InnerEdge   = if not OnRightPage : RightEdge   else : LeftEdge    fi enddef ;
191
192immutable % permanent
193    LeftMarginWidth, RightMarginWidth, LeftMarginDistance, RightMarginDistance,
194    LeftEdgeWidth, RightEdgeWidth, LeftEdgeDistance, RightEdgeDistance, BackSpace,
195    CutSpace, OuterMarginWidth, InnerMarginWidth, OuterMarginDistance,
196    InnerMarginDistance, OuterEdgeWidth, InnerEdgeWidth, OuterEdgeDistance,
197    InnerEdgeDistance, OuterSpaceWidth, InnerSpaceWidth, OuterMargin, InnerMargin,
198    OuterEdge, InnerEdge ;
199