mlib-int.lmt /size: 16 Kb    last modification: 2023-12-21 09:44
1if not modules then modules = { } end modules ['mlib-int'] = {
2    version   = 1.001,
3    comment   = "companion to mlib-ctx.mkiv",
4    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
5    copyright = "PRAGMA ADE / ConTeXt Development Team",
6    license   = "see context related readme files",
7}
8
9local factor         = number.dimenfactors.bp
10local isdimen        = tex.isdimen
11local iscount        = tex.iscount
12local getdimen       = tex.getdimen
13local getcount       = tex.getcount
14local getmacro       = tokens.getters.macro
15local get            = tex.get
16
17local registerscript = metapost.registerscript
18local registerdirect = metapost.registerdirect
19
20do
21
22    local t = os.date("*t") -- maybe this should be a very early on global
23
24    -- If we want to do a vardef then we first need to catch an endgroup and
25    -- that then fails because we have a variable sitting there, so they need
26    -- to be def's at the mp end.
27
28    local assignment_code = metapost.codes.assignment
29
30    local mpscannext      = mp.scan.next
31    local mpscaninteger   = mp.scan.integer
32
33    local function item(name)
34        local n = mpscannext(true) -- keep
35        if n == assignment_code then
36            mpscannext()
37            t[name] = mpscaninteger()
38        else
39            return t[name]
40        end
41    end
42
43    registerdirect("year",   function() return item("year")  end)
44    registerdirect("month",  function() return item("month") end)
45    registerdirect("day",    function() return item("day")   end)
46    registerdirect("hour",   function() return item("hour")  end)
47    registerdirect("minute", function() return item("min")   end)
48    registerdirect("second", function() return item("sec")   end)
49
50end
51
52do
53
54        -- These get swapped so the d_ numbers change.
55
56        registerdirect("PaperHeight",         function() return getdimen("paperheight")         * factor end)
57        registerdirect("PaperWidth",          function() return getdimen("paperwidth")          * factor end)
58        registerdirect("PrintPaperHeight",    function() return getdimen("printpaperheight")    * factor end)
59        registerdirect("PrintPaperWidth",     function() return getdimen("printpaperwidth")     * factor end)
60        registerdirect("BackSpace",           function() return getdimen("backspace")           * factor end)
61        registerdirect("CutSpace",            function() return getdimen("cutspace")            * factor end)
62
63        registerdirect("LeftEdgeWidth",       function() return getdimen("leftedgewidth")       * factor end)
64        registerdirect("LeftEdgeDistance",    function() return getdimen("leftedgedistance")    * factor end)
65        registerdirect("LeftMarginWidth",     function() return getdimen("leftmarginwidth")     * factor end)
66        registerdirect("LeftMarginDistance",  function() return getdimen("leftmargindistance")  * factor end)
67        registerdirect("RightMarginDistance", function() return getdimen("rightmargindistance") * factor end)
68        registerdirect("RightMarginWidth",    function() return getdimen("rightmarginwidth")    * factor end)
69        registerdirect("RightEdgeDistance",   function() return getdimen("rightedgedistance")   * factor end)
70        registerdirect("RightEdgeWidth",      function() return getdimen("rightedgewidth")      * factor end)
71
72        -- leftmargintotal   rightmargintotal -- not yet
73        -- leftedgetotal     rightedgetotal
74        -- leftsidetotal     rightsidetotal
75        -- leftcombitotal    rightcombitotal
76        -- innermargintotal  outermargintotal
77        -- inneredgetotal    outeredgetotal
78        -- innercombitotal   outercombitotal
79        -- innersidetotal    outersidetotal
80
81        local d_leftedgewidth       = isdimen("leftedgewidth")
82        local d_leftedgedistance    = isdimen("leftedgedistance")
83        local d_leftmarginwidth     = isdimen("leftmarginwidth")
84        local d_leftmargindistance  = isdimen("leftmargindistance")
85        local d_rightmargindistance = isdimen("rightmargindistance")
86        local d_rightmarginwidth    = isdimen("rightmarginwidth")
87        local d_rightedgedistance   = isdimen("rightedgedistance")
88        local d_rightedgewidth      = isdimen("rightedgewidth")
89
90        registerdirect("InnerMarginDistance",  function() return getdimen(d_leftmargindistance ) * factor end)
91        registerdirect("InnerMarginWidth",     function() return getdimen(d_leftmarginwidth    ) * factor end)
92        registerdirect("OuterMarginDistance",  function() return getdimen(d_rightmargindistance) * factor end)
93        registerdirect("OuterMarginWidth",     function() return getdimen(d_rightmarginwidth   ) * factor end)
94        registerdirect("InnerEdgeDistance",    function() return getdimen(d_leftmargindistance ) * factor end)
95        registerdirect("InnerEdgeWidth",       function() return getdimen(d_leftmarginwidth    ) * factor end)
96        registerdirect("OuterEdgeDistance",    function() return getdimen(d_rightedgedistance  ) * factor end)
97        registerdirect("OuterEdgeWidth",       function() return getdimen(d_rightedgewidth     ) * factor end)
98
99        -- local onrightpage = structures.pages.on_right
100
101        -- registerdirect("InnerMarginDistance",  function() return getdimen(onrightpage() and "leftmargindistance"  or "rightmargindistance") * factor end)
102        -- registerdirect("InnerMarginWidth",     function() return getdimen(onrightpage() and "leftmarginwidth"     or "rightmarginwidth"   ) * factor end)
103        -- registerdirect("OuterMarginDistance",  function() return getdimen(onrightpage() and "rightmargindistance" or "leftmargindistance" ) * factor end)
104        -- registerdirect("OuterMarginWidth",     function() return getdimen(onrightpage() and "rightmarginwidth"    or "leftmarginwidth"    ) * factor end)
105        -- registerdirect("InnerEdgeDistance",    function() return getdimen(onrightpage() and "leftmargindistance"  or "rightmargindistance") * factor end)
106        -- registerdirect("InnerEdgeWidth",       function() return getdimen(onrightpage() and "leftmarginwidth"     or "rightmarginwidth"   ) * factor end)
107        -- registerdirect("OuterEdgeDistance",    function() return getdimen(onrightpage() and "rightedgedistance"   or "leftedgedistance"   ) * factor end)
108        -- registerdirect("OuterEdgeWidth",       function() return getdimen(onrightpage() and "rightedgewidth"      or "leftedgewidth"      ) * factor end)
109
110        -- These have stable d_ numbers.
111
112        local d_topspace       = isdimen("topspace")       registerdirect("TopSpace",       function() return getdimen(d_topspace)       * factor end)
113        local d_bottomspace    = isdimen("bottomspace")    registerdirect("BottomSpace",    function() return getdimen(d_bottomspace)    * factor end)
114        local d_makeupheight   = isdimen("makeupheight")   registerdirect("MakeupHeight",   function() return getdimen(d_makeupheight)   * factor end)
115        local d_makeupwidth    = isdimen("makeupwidth")    registerdirect("MakeupWidth",    function() return getdimen(d_makeupwidth)    * factor end)
116        local d_topheight      = isdimen("topheight")      registerdirect("TopHeight",      function() return getdimen(d_topheight)      * factor end)
117        local d_topdistance    = isdimen("topdistance")    registerdirect("TopDistance",    function() return getdimen(d_topdistance)    * factor end)
118        local d_headerheight   = isdimen("headerheight")   registerdirect("HeaderHeight",   function() return getdimen(d_headerheight)   * factor end)
119        local d_headerdistance = isdimen("headerdistance") registerdirect("HeaderDistance", function() return getdimen(d_headerdistance) * factor end)
120        local d_textheight     = isdimen("textheight")     registerdirect("TextHeight",     function() return getdimen(d_textheight)     * factor end)
121        local d_footerdistance = isdimen("footerdistance") registerdirect("FooterDistance", function() return getdimen(d_footerdistance) * factor end)
122        local d_footerheight   = isdimen("footerheight")   registerdirect("FooterHeight",   function() return getdimen(d_footerheight)   * factor end)
123        local d_bottomdistance = isdimen("bottomdistance") registerdirect("BottomDistance", function() return getdimen(d_bottomdistance) * factor end)
124        local d_bottomheight   = isdimen("bottomheight")   registerdirect("BottomHeight",   function() return getdimen(d_bottomheight)   * factor end)
125        local d_textwidth      = isdimen("textwidth")      registerdirect("TextWidth",      function() return getdimen(d_textwidth)      * factor end)
126
127end
128
129do
130
131    local d_pagebackgroundoffset = isdimen("pagebackgroundoffset") registerdirect("PageOffset",           function() return getdimen(d_pagebackgroundoffset) * factor end)
132    local d_pagebackgrounddepth  = isdimen("pagebackgrounddepth")  registerdirect("PageDepth",            function() return getdimen(d_pagebackgrounddepth)  * factor end)
133    local c_layoutcolumns        = iscount("layoutcolumns")        registerdirect("LayoutColumns",        function() return getcount(c_layoutcolumns)                 end)
134    local d_layoutcolumndistance = isdimen("layoutcolumndistance") registerdirect("LayoutColumnDistance", function() return getdimen(d_layoutcolumndistance) * factor end)
135    local d_layoutcolumnwidth    = isdimen("layoutcolumnwidth")    registerdirect("LayoutColumnWidth",    function() return getdimen(d_layoutcolumnwidth)    * factor end)
136    local d_spinewidth           = isdimen("spinewidth")           registerdirect("SpineWidth",           function() return getdimen(d_spinewidth)           * factor end)
137    local d_paperbleed           = isdimen("paperbleed")           registerdirect("PaperBleed",           function() return getdimen(d_paperbleed)           * factor end)
138
139end
140
141do
142
143    local c_realpageno    = iscount("realpageno")    registerdirect("RealPageNumber", function() return getcount(c_realpageno)    end)
144    local c_lastpageno    = iscount("lastpageno")    registerdirect("LastPageNumber", function() return getcount(c_lastpageno)    end)
145
146    local c_userpageno    = iscount("userpageno")    registerdirect("PageNumber",     function() return getcount(c_userpageno)    end)
147    local c_lastpageno    = iscount("lastpageno")    registerdirect("NOfPages",       function() return getcount(c_lastpageno)    end)
148
149    local c_subpageno     = iscount("subpageno")     registerdirect("SubPageNumber",  function() return getcount(c_subpageno)     end)
150    local c_lastsubpageno = iscount("lastsubpageno") registerdirect("NOfSubPages",    function() return getcount(c_lastsubpageno) end)
151
152    local c_mofcolumns    = iscount("mofcolumns")    registerdirect("CurrentColumn",  function() return getcount(c_mofcolumns)    end)
153    local c_nofcolumns    = iscount("nofcolumns")    registerdirect("NOfColumns",     function() return getcount(c_nofcolumns)    end)
154
155end
156
157do
158
159    registerdirect("BaseLineSkip",  function() return get("baselineskip",true) * factor end)
160    registerdirect("TopSkip",       function() return get("topskip",true)      * factor end)
161    registerdirect("CurrentWidth",  function() return get("hsize")             * factor end)
162    registerdirect("CurrentHeight", function() return get("vsize")             * factor end)
163    registerdirect("HSize",         function() return get("hsize")             * factor end)
164    registerdirect("VSize",         function() return get("vsize")             * factor end)
165
166    local emwidths  = fonts.hashes.emwidths
167    local exheights = fonts.hashes.exheights
168
169    registerdirect("EmWidth",  function() return emwidths [false] * factor end)
170    registerdirect("ExHeight", function() return exheights[false] * factor end)
171
172    local d_uunit = isdimen("uunit") registerdirect("uunit", function() return getdimen(d_uunit) * factor end)
173
174end
175
176do
177
178    local d_lineheight   = isdimen("lineheight")   registerdirect("LineHeight",   function() return getdimen(d_lineheight)   * factor end)
179    local d_bodyfontsize = isdimen("bodyfontsize") registerdirect("BodyFontSize", function() return getdimen(d_bodyfontsize) * factor end)
180    local d_strutht      = isdimen("strutht")      registerdirect("StrutHeight",  function() return getdimen(d_strutht)      * factor end)
181    local d_strutdp      = isdimen("strutdp")      registerdirect("StrutDepth",   function() return getdimen(d_strutdp)      * factor end)
182
183end
184
185do
186
187    local d_overlay_width     = isdimen("d_overlay_width")     registerdirect("OverlayWidth",     function() return getdimen(d_overlay_width)     * factor end)
188    local d_overlay_height    = isdimen("d_overlay_height")    registerdirect("OverlayHeight",    function() return getdimen(d_overlay_height)    * factor end)
189    local d_overlay_depth     = isdimen("d_overlay_depth")     registerdirect("OverlayDepth",     function() return getdimen(d_overlay_depth)     * factor end)
190    local d_overlay_linewidth = isdimen("d_overlay_linewidth") registerdirect("OverlayLineWidth", function() return getdimen(d_overlay_linewidth) * factor end)
191    local d_overlay_offset    = isdimen("d_overlay_offset")    registerdirect("OverlayOffset",    function() return getdimen(d_overlay_offset)    * factor end)
192                                                               registerdirect("OverlayRegion",    function() return getmacro("m_overlay_region")           end)
193                                                               registerdirect("CurrentLayout",    function() return getmacro("currentlayout")              end)
194                                                               registerdirect("OverlayColor",     function() return getmacro("overlaycolor")               end)
195                                                               registerdirect("OverlayLineColor", function() return getmacro("overlaylinecolor")               end)
196
197end
198
199do
200
201    registerdirect("LastChangedLayoutPage",function() return getcount("c_page_layouts_changed") end)
202    registerdirect("SwapMarginDimensions", function() token.expandmacro("swapmargindimensions") end)
203
204    registerdirect("PageFraction",     structures.pages.fraction)
205    registerdirect("OnRightPage",      structures.pages.on_right)
206    registerdirect("OnOddPage",        structures.pages.is_odd)
207    registerdirect("InPageBody",       structures.pages.in_body)
208    --------------("LayoutHasChanged", structures.pages.has_changed)
209
210end
211
212do
213
214    local function defaultcolormodel() -- can be helper
215        local colormethod = getcount("MPcolormethod")
216        return (colormethod == 0 or colormethod == 1) and 1 or 3
217    end
218
219    registerdirect("defaultcolormodel", defaultcolormodel)
220
221end
222
223do
224
225    -- see node-rul.*
226    -- offset is a multiplier
227    -- factor is the amount
228
229    -- TODO: dimensions are yet undefined so we will move this
230
231    registerdirect("RuleWidth",     function() return getdimen("d_rule_width")  * factor end)
232    registerdirect("RuleHeight",    function() return getdimen("d_rule_height") * factor end)
233    registerdirect("RuleDepth",     function() return getdimen("d_rule_depth")  * factor end)
234    registerdirect("RuleH",         function() return getdimen("d_rule_h")      * factor end)
235    registerdirect("RuleV",         function() return getdimen("d_rule_v")      * factor end)
236    registerdirect("RuleThickness", function() return getdimen("d_rule_line")   * factor end)
237    registerdirect("RuleOffset",    function() return getdimen("d_rule_offset") / 65536  end) -- not factor
238    registerdirect("RuleDirection", function() return getmacro("m_rule_direction")       end)
239    registerdirect("RuleFactor",    function() return getdimen("d_rule_factor") * factor end)
240    registerdirect("RuleOption",    function() return getmacro("m_rule_option")          end)
241    registerscript("RuleColor",     function() return getmacro("m_rule_color")           end)
242
243end
244
245-- see typo-ada.*
246
247do
248
249    local d_adaptive_width  = isdimen("d_adaptive_width")  registerdirect("AdaptiveWidth",     function() return getdimen(d_adaptive_width)  * factor end)
250    local d_adaptive_height = isdimen("d_adaptive_height") registerdirect("AdaptiveHeight",    function() return getdimen(d_adaptive_height) * factor end)
251    local d_adaptive_depth  = isdimen("d_adaptive_depth")  registerdirect("AdaptiveDepth",     function() return getdimen(d_adaptive_depth)  * factor end)
252    local d_adaptive_line   = isdimen("d_adaptive_line")   registerdirect("AdaptiveThickness", function() return getdimen(d_adaptive_line)   * factor end)
253                                                           registerdirect("AdaptiveColor",     function() return getmacro("m_adaptive_color") end)
254
255    registerdirect("AdaptiveTotal", function()
256        return (getdimen(d_adaptive_height) + getdimen(d_adaptive_depth)) * factor
257    end)
258
259end
260