From c3ae4997f73041c6b97d8aec055ba24096602ab4 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Tue, 23 Feb 2021 18:08:41 +0100 Subject: 2021-02-23 17:44:00 --- .../documents/general/manuals/luametafun.pdf | Bin 5544448 -> 5553137 bytes .../manuals/luametafun/luametafun-color.tex | 138 +++ .../manuals/luametafun/luametafun-introduction.tex | 2 +- .../general/manuals/luametafun/luametafun.tex | 4 + .../sources/general/manuals/metafun/gracht.mp | 1284 ++++++++++++++++++++ .../general/manuals/metafun/metafun-basics.tex | 14 + .../general/manuals/metafun/metafun-effects.tex | 133 +- .../manuals/metafun/metafun-environment-layout.tex | 4 +- .../manuals/metafun/metafun-introduction.tex | 9 + .../general/manuals/metafun/metafun-lua.tex | 43 +- .../general/manuals/metafun/metafun-reference.tex | 17 + .../general/manuals/metafun/metafun-styles.tex | 4 +- .../general/manuals/metafun/metafun-welcome.tex | 64 + .../sources/general/manuals/metafun/metafun.tex | 4 +- .../general/manuals/musings/musings-style.tex | 15 +- metapost/context/base/mpxl/mp-blob.mpxl | 8 +- metapost/context/base/mpxl/mp-lmtx.mpxl | 33 + metapost/context/base/mpxl/mp-luas.mpxl | 10 +- metapost/context/base/mpxl/mp-mlib.mpxl | 2 +- scripts/context/lua/mtxrun.lua | 23 +- scripts/context/stubs/mswin/mtxrun.lua | 23 +- scripts/context/stubs/unix/mtxrun | 23 +- scripts/context/stubs/win64/mtxrun.lua | 23 +- tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkiv/colo-icc.lua | 107 ++ tex/context/base/mkiv/cont-log.mkiv | 22 +- tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/data-fil.lua | 8 +- tex/context/base/mkiv/data-tmp.lua | 10 +- tex/context/base/mkiv/lang-def.mkiv | 51 +- tex/context/base/mkiv/lang-txt.lua | 678 ++++++++--- tex/context/base/mkiv/luat-cbk.lua | 4 +- tex/context/base/mkiv/luat-sto.lua | 16 - tex/context/base/mkiv/meta-imp-txt.mkiv | 13 +- tex/context/base/mkiv/mult-sys.mkiv | 4 + tex/context/base/mkiv/node-nut.lua | 1 - tex/context/base/mkiv/status-files.pdf | Bin 25346 -> 25351 bytes tex/context/base/mkiv/status-lua.pdf | Bin 256068 -> 256039 bytes tex/context/base/mkiv/syst-aux.lua | 147 +-- tex/context/base/mkxl/attr-col.lmt | 666 ++++++++++ tex/context/base/mkxl/attr-col.mkxl | 2 +- tex/context/base/mkxl/cont-log.mkxl | 15 +- tex/context/base/mkxl/cont-new.mkxl | 2 +- tex/context/base/mkxl/context.mkxl | 2 +- tex/context/base/mkxl/driv-shp.lmt | 30 +- tex/context/base/mkxl/font-mps.lmt | 13 +- tex/context/base/mkxl/grph-trf.mkxl | 8 +- tex/context/base/mkxl/lang-def.mkxl | 51 +- tex/context/base/mkxl/luat-cbk.lmt | 287 +++++ tex/context/base/mkxl/luat-lib.mkxl | 2 +- tex/context/base/mkxl/mlib-ctx.lmt | 11 - tex/context/base/mkxl/mlib-fio.lmt | 17 +- tex/context/base/mkxl/mlib-lmt.lmt | 9 + tex/context/base/mkxl/mlib-pdf.lmt | 64 +- tex/context/base/mkxl/mlib-pdf.mkxl | 5 - tex/context/base/mkxl/mult-sys.mkxl | 3 + tex/context/base/mkxl/node-fin.lmt | 7 + tex/context/base/mkxl/node-nut.lmt | 1 - tex/context/base/mkxl/strc-sec.mkxl | 46 +- tex/context/base/mkxl/supp-box.mkxl | 2 + tex/generic/context/luatex/luatex-fonts-merged.lua | 2 +- 63 files changed, 3686 insertions(+), 508 deletions(-) create mode 100644 doc/context/sources/general/manuals/luametafun/luametafun-color.tex create mode 100644 doc/context/sources/general/manuals/metafun/gracht.mp create mode 100644 tex/context/base/mkxl/attr-col.lmt create mode 100644 tex/context/base/mkxl/luat-cbk.lmt diff --git a/doc/context/documents/general/manuals/luametafun.pdf b/doc/context/documents/general/manuals/luametafun.pdf index f1ef790dc..25c37bdcb 100644 Binary files a/doc/context/documents/general/manuals/luametafun.pdf and b/doc/context/documents/general/manuals/luametafun.pdf differ diff --git a/doc/context/sources/general/manuals/luametafun/luametafun-color.tex b/doc/context/sources/general/manuals/luametafun/luametafun-color.tex new file mode 100644 index 000000000..17f4a449d --- /dev/null +++ b/doc/context/sources/general/manuals/luametafun/luametafun-color.tex @@ -0,0 +1,138 @@ +% language=us + +\environment luametafun-style + +\startcomponent luametafun-color + +\startchapter[title={Color}] + +There are by now plenty of examples made by users that use color and \METAFUN\ +provides all kind of helpers. So do we need more? When I play around with things +or when users come with questions that then result in a nice looking graphic, the +result might en dup as example of coding. The following is an example of showing +of colors. We have a helper that goes from a so called lab specification to rgb +and it does that via xyz transformations. It makes no real sense to interface +this beyond this converter. We use this opportunity to demonstrate how to make +an interface. + +\startbuffer +\startMPdefinitions + vardef cielabmatrix(expr l, mina, maxa, minb, maxb, stp) = + image ( + for a = mina step stp until maxa : + for b = minb step stp until maxb : + draw (a,b) withcolor labtorgb(l,a,b) ; + endfor ; + endfor ; + ) + enddef ; +\stopMPdefinitions +\stopbuffer + +\typebuffer[option=TEX] + +\getbuffer + +Here we define a macro that makes a color matrix. It can be used as follows + +\startbuffer +\startcombination[nx=4,ny=1] + {\startMPcode draw cielabmatrix(20, -100, 100, -100, 100, 5) ysized 35mm withpen pencircle scaled 2.5 ; \stopMPcode} {\type {l = 20}} + {\startMPcode draw cielabmatrix(40, -100, 100, -100, 100, 5) ysized 35mm withpen pencircle scaled 2.5 ; \stopMPcode} {\type {l = 40}} + {\startMPcode draw cielabmatrix(60, -100, 100, -100, 100, 5) ysized 35mm withpen pencircle scaled 2.5 ; \stopMPcode} {\type {l = 60}} + {\startMPcode draw cielabmatrix(80, -100, 100, -100, 100, 5) ysized 35mm withpen pencircle scaled 2.5 ; \stopMPcode} {\type {l = 80}} +\stopcombination +\stopbuffer + +\typebuffer[option=TEX] + +\startlinecorrection +\getbuffer +\stoplinecorrection + +One can of course mess around a bit: + +\startbuffer +\startcombination[nx=4,ny=1] + {\startMPcode draw cielabmatrix(20, -100, 100, -100, 100, 10) ysized 35mm randomized 1 withpen pensquare scaled 4 ; \stopMPcode} {\type {l = 20}} + {\startMPcode draw cielabmatrix(40, -100, 100, -100, 100, 10) ysized 35mm randomized 1 withpen pensquare scaled 4 ; \stopMPcode} {\type {l = 40}} + {\startMPcode draw cielabmatrix(60, -100, 100, -100, 100, 10) ysized 35mm randomized 1 withpen pensquare scaled 4 ; \stopMPcode} {\type {l = 60}} + {\startMPcode draw cielabmatrix(80, -100, 100, -100, 100, 10) ysized 35mm randomized 1 withpen pensquare scaled 4 ; \stopMPcode} {\type {l = 80}} +\stopcombination +\stopbuffer + +\typebuffer[option=TEX] + +\startlinecorrection +\getbuffer +\stoplinecorrection + +Normally, when you don't go beyond this kind of usage, a simple macro like the +above will do. But when you want to make something that is upward compatible +(which is one of the principles behind the \CONTEXT\ user interface(s), you can +do this: + +\startbuffer +\startcombination[nx=4,ny=1] + {\startMPcode draw lmt_labtorgb [ l = 20, step = 20 ] ysized 35mm withpen pencircle scaled 8 ; \stopMPcode} {\type {l = 20}} + {\startMPcode draw lmt_labtorgb [ l = 40, step = 20 ] ysized 35mm withpen pencircle scaled 8 ; \stopMPcode} {\type {l = 40}} + {\startMPcode draw lmt_labtorgb [ l = 60, step = 20 ] ysized 35mm withpen pencircle scaled 8 ; \stopMPcode} {\type {l = 60}} + {\startMPcode draw lmt_labtorgb [ l = 80, step = 20 ] ysized 35mm withpen pencircle scaled 8 ; \stopMPcode} {\type {l = 80}} +\stopcombination +\stopbuffer + +\typebuffer[option=TEX] + +\startlinecorrection +\getbuffer +\stoplinecorrection + +This is a predefined macro in the reserved \type {lmt_} namespace (don't use that +one yourself, create your own). First we preset the possible parameters: + +\starttyping[option=MP] +presetparameters "labtorgb" [ + mina = -100, + maxa = 100, + minb = -100, + maxb = 100, + step = 5, + l = 50, +] ; +\stoptyping + +Next we define the main interface macro: + +\starttyping[option=MP] +def lmt_labtorgb = applyparameters "labtorgb" "lmt_do_labtorgb" enddef ; +\stoptyping + +Last we do the actual implementation, which looks a lot like the one we +started with: + +\starttyping[option=MP] +vardef lmt_do_labtorgb = + image ( + pushparameters "labtorgb" ; + save l ; l := getparameter "l" ; + for a = getparameter "mina" step getparameter "step" + until getparameter "maxa" : + for b = getparameter "minb" step getparameter "step" + until getparameter "maxb" : + draw (a,b) withcolor labtorgb(l,a,b) ; + endfor ; + endfor ; + popparameters ; + ) +enddef ; +\stoptyping + +Of course we can now add all kind of extra features but this is what we currently +have. Maybe this doesn't belong in the \METAFUN\ core but it's not that much code +and a nice demo. After all, there is much in there that is seldom used. + +\stopchapter + +\stopcomponent + + diff --git a/doc/context/sources/general/manuals/luametafun/luametafun-introduction.tex b/doc/context/sources/general/manuals/luametafun/luametafun-introduction.tex index 6892b21ce..fa0e28510 100644 --- a/doc/context/sources/general/manuals/luametafun/luametafun-introduction.tex +++ b/doc/context/sources/general/manuals/luametafun/luametafun-introduction.tex @@ -76,7 +76,7 @@ have a collection of modules for specific tasks. \startlines Hans Hagen Hasselt NL -August 2019 (and beyond) +August 2021 (and beyond) \stoplines \stopchapter diff --git a/doc/context/sources/general/manuals/luametafun/luametafun.tex b/doc/context/sources/general/manuals/luametafun/luametafun.tex index f8ca97ada..6aaf166a5 100644 --- a/doc/context/sources/general/manuals/luametafun/luametafun.tex +++ b/doc/context/sources/general/manuals/luametafun/luametafun.tex @@ -1,3 +1,6 @@ +% This file takes a while to process because we render some complex graphics. It +% can be sped up by enabling caching, but for some images that has been disabled. + \setupfootertexts[{\tttf uncorrected draft}] \environment luametafun-style @@ -29,6 +32,7 @@ \component luametafun-svg \component luametafun-poisson \component luametafun-fonts + \component luametafun-color \component luametafun-groups \component luametafun-interface \stopbodymatter diff --git a/doc/context/sources/general/manuals/metafun/gracht.mp b/doc/context/sources/general/manuals/metafun/gracht.mp new file mode 100644 index 000000000..5076c729a --- /dev/null +++ b/doc/context/sources/general/manuals/metafun/gracht.mp @@ -0,0 +1,1284 @@ +% Converted from PostScript(TM) to MetaPost by pstoedit +% +% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa + +% MetaPost backend contributed by Scott Pakin +% pstoedit is Copyright (C) 1993 - 1999 Wolfgang Glunz + +% Generate structured PostScript +prologues := 1; + +% Display a given string with its *baseline* at a given location +% and with a given rotation angle +vardef showtext(expr origin)(expr angle)(expr string) = + draw string infont defaultfont scaled defaultscale + rotated angle shifted origin; +enddef; + +beginfig(1); +drawoptions (withcolor (0.8,0.9,1)); +linecap := butt; +linejoin := mitered; +fill (34.0598,214.47)--(286.57,214.47)--(285.2,72.9199) + --(38.1699,83.8599)--(34.0598,214.47)--cycle; +drawoptions (withcolor (0.95,0.95,0.95)); +fill (62,152.91)..controls (62,152.91) and (74.24,150.18)..(77.6199,152.91) + ..controls (81.0798,155.65) and (98.0698,152.91)..(98.0698,152.91) + ..controls (98.0698,152.91) and (106.21,148.81)..(111.68,148.81) + ..controls (117.15,148.81) and (130.76,147.37)..(130.76,147.37) + --(134.86,140.53)..controls (134.86,140.53) and (130.11,139.88)..(123.92,139.88) + ..controls (117.8,139.88) and (98.72,139.23)..(98.72,139.23) + --(82.3799,139.23)--(72.1499,145.35)--(64.0198,147.37) + --(62,152.91)--cycle; +drawoptions (withcolor (0.9,0.9,0.9)); +fill (202.11,112.52)--(200.82,126.85)--(184.47,117.99) + --(170.86,116.62)--(150.42,117.34)--(141.63,114.61) + --(104.19,115.26)--(87.1299,115.26)--(69.49,113.17) + --(74.96,107.77)--(106.21,108.42)--(140.98,108.42) + --(147.03,110.5)--(165.39,110.5)--(164.74,104.38) + --(172.88,103.74)--(285.92,79.0398)--(285.2,98.9099) + --(271.59,100.93)--(202.11,112.52)--cycle; +drawoptions (withcolor (1,0.4,0.4)); +fill (285.92,193.23)--(259.78,193.23)--(259.78,188.7) + --(277.35,148.88)--(285.92,155.72)--(285.92,193.23) + --cycle; +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 0.86bp; +draw (285.92,193.23)--(259.78,193.23)--(259.78,188.7) + --(277.35,148.88)--(285.92,155.72)--(285.92,193.23); +drawoptions (withcolor (1,0.9,0.9)); +pickup pencircle scaled 0bp; +fill (231.85,165.66)--(235.95,169.69)--(246.75,170.62) + --(273.32,149.82)--(272.89,101)--(235.02,107.34) + --(231.85,165.66)--cycle; +drawoptions (withcolor (0.4,0.4,0.4)); +pickup pencircle scaled 0.86bp; +draw (231.85,165.66)--(235.95,169.69)--(246.75,170.62) + --(273.32,149.82)--(272.89,101)--(235.02,107.34) + --(231.85,165.66); +drawoptions (withcolor (0,0.5,0)); +pickup pencircle scaled 0bp; +fill (178.28,133.26)..controls (178.28,133.26) and (175.98,132.39)..(175.11,130.09) + ..controls (174.25,127.78) and (172.38,125.62)..(172.38,125.62) + ..controls (172.38,125.62) and (170.86,124.47)..(170,121.88) + ..controls (169.21,119.36) and (168.99,119.14)..(168.99,118.06) + ..controls (168.99,116.98) and (169.21,116.19)..(170.43,116.41) + ..controls (171.73,116.55) and (172.81,117.63)..(172.81,117.63) + --(175.33,116.84)..controls (175.33,116.84) and (175.9,116.62)..(177.42,117.85) + ..controls (178.86,119.14) and (179.29,121.52)..(179.72,120.22) + ..controls (180.15,118.93) and (179.94,119.58)..(180.73,118.06) + ..controls (181.59,116.55) and (183.03,115.98)..(184.11,116.41) + ..controls (185.19,116.84) and (184.47,115.69)..(185.55,117.2) + ..controls (186.63,118.71) and (185.19,122.74)..(185.19,122.74) + --(182.24,132.39)--(178.28,133.26)--cycle; +drawoptions (withcolor (0,0.6,0)); +fill (203.19,132.82)..controls (207.44,132.82) and (198.58,125.84)..(194.55,123.61) + ..controls (190.45,121.3) and (188.65,115.04)..(184.11,120.87) + ..controls (179.65,126.7) and (184.54,132.61)..(180.51,133.04) + ..controls (176.48,133.54) and (177.85,132.18)..(174.68,133.54) + ..controls (171.51,134.84) and (172.45,140.31)..(172.45,140.31) + ..controls (172.45,140.31) and (175.98,145.71)..(177.42,148.88) + ..controls (178.78,152.05) and (177.42,152.91)..(177.85,155.22) + ..controls (178.28,157.52) and (181.02,159.32)..(181.02,159.32) + --(190.02,158.82)--(192.25,162.78)..controls (192.25,162.78) and (196.78,162.92)..(199.02,161.12) + ..controls (201.25,159.32) and (201.25,156.58)..(201.25,156.58) + --(203.98,155.22)--(203.55,147.58)--(201.68,143.12) + ..controls (201.68,143.12) and (201.82,139.95)..(203.19,137.72) + ..controls (204.56,135.42) and (202.76,132.82)..(203.19,132.82) + --cycle; +drawoptions (withcolor (0.8,0.8,0.8)); +fill (1.37988,135.34)--(63.9399,129.01)--(67.98,114.97) + --(73.8799,108.63)--(57.6799,89.26)--(0.869873,46.2798) + --(1.37988,135.34)--cycle; +drawoptions (withcolor (0,0.6,0)); +fill (141.27,120.87)..controls (140.84,121.23) and (143.65,122.46)..(139.62,123.32) + ..controls (135.51,124.26) and (134.65,122.67)..(129.25,122.67) + ..controls (123.85,122.67) and (124.28,120.87)..(122.05,122.67) + ..controls (119.82,124.47) and (119.38,126.27)..(115.28,126.27) + ..controls (111.25,126.27) and (109.45,126.7)..(106.78,124.9) + ..controls (104.05,123.1) and (102.68,123.1)..(100.45,123.1) + ..controls (98.22,123.1) and (96.3398,123.18)..(93.6799,123.61) + ..controls (91.0198,124.04) and (88.7798,124.47)..(86.0498,124.9) + ..controls (83.3098,125.41) and (80.5798,125.84)..(77.9099,125.41) + ..controls (75.25,124.9) and (70.2798,124.47)..(66.6799,124.9) + ..controls (63.0798,125.41) and (60.3398,127.21)..(57.1799,125.41) + ..controls (54.0798,123.61) and (49.1099,123.61)..(49.1099,123.61) + --(44.1399,122.67)--(45.0798,115.9)..controls (45.0798,115.9) and (43.2798,113.6)..(49.5398,113.6) + ..controls (55.8799,113.6) and (58.98,113.6)..(64.8799,113.6) + ..controls (70.71,113.6) and (69.4199,112.66)..(76.1099,114.03) + ..controls (82.8799,115.47) and (86.98,115.47)..(91.8799,115.47) + ..controls (96.8499,115.47) and (100.88,114.97)..(105.85,114.97) + ..controls (110.82,114.97) and (112.62,114.97)..(118.02,114.97) + ..controls (123.42,114.97) and (125.22,114.54)..(136.02,114.54) + ..controls (146.74,114.54) and (146.74,115.9)..(146.74,115.9) + --(145.88,120.37)--(141.27,120.87)--cycle; +drawoptions (withcolor (0.5,0.5,0.5)); +fill (5.83984,98.26)--(27.5098,109.14)--(46.3799,113.6) + --(70.2798,114.03)--(74.3098,109.57)--(49.5398,105.54) + --(0.869873,67.95)--(5.83984,98.26)--cycle; +drawoptions (withcolor (0.8,0.3,0)); +fill (105.85,108.2)--(106.78,85.23)--(73.8799,84.2998) + --(66.25,38.1399)--(36.7998,1.05981)--(0.72998,1.05981) + --(0.869873,49.8799)..controls (0.869873,49.8799) and (24.7798,67.0898)..(36.0798,74.7898) + ..controls (47.3098,82.5) and (70.2798,104.6)..(72.5098,107.34) + ..controls (74.74,110) and (77.48,108.2)..(77.48,108.2) + --(105.85,108.2)--cycle; +drawoptions (withcolor (0.6,0.3,0)); +fill (75.25,107.77)--(105.85,107.77)--(105.85,85.23) + --(75.25,85.23)--(75.25,107.77)--cycle; +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 0.86bp; +draw (75.25,107.77)--(105.85,107.77)--(105.85,85.23) + --(75.25,85.23)--(75.25,107.77); +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 2.23bp; +draw (118.59,71.1899)--(117.22,61.8999); +drawoptions (withcolor (0.9,0.95,1)); +pickup pencircle scaled 0bp; +fill (266.48,1.56982)--(267.34,45.9199)--(158.84,82.3499) + --(149.26,81.2)--(144.15,86.3098)--(140.84,107.77) + --(104.84,107.26)--(105.92,86.3098)--(114.92,40.45) + --(55.5898,38.5798)--(37.23,0.849854)--(266.48,1.56982) + --cycle; +drawoptions (withcolor (0,0.2,1)); +fill (55.1599,40.0898)--(113.98,37.21)--(153.94,25.8999) + ..controls (153.94,25.8999) and (123.42,17.8398)..(145.88,14.6699) + ..controls (168.34,11.4299) and (158.91,11)..(152.65,7.3999) + ..controls (146.31,3.7998) and (118.95,1.05981)..(113.48,1.05981) + ..controls (108.08,1.05981) and (35.6499,1.05981)..(35.6499,1.05981) + --(55.1599,40.0898)--cycle; +drawoptions (withcolor (1,0.7,0)); +fill (146.96,157.59)--(149.77,157.59)--(149.77,118.06) + --(146.96,118.06)--(146.96,157.59)--cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (146.96,157.59)--(149.77,157.59)--(149.77,118.06) + --(146.96,118.06)--(146.96,157.59); +drawoptions (withcolor (1,0.7,0)); +pickup pencircle scaled 0bp; +fill (109.16,161.05)--(180.37,158.53)--(176.41,154.86) + --(108.66,157.3)--(109.16,161.05)--cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (109.16,161.05)--(180.37,158.53)--(176.41,154.86) + --(108.66,157.3)--(109.16,161.05); +drawoptions (withcolor (1,0.9,0)); +pickup pencircle scaled 0bp; +fill (107.65,166.74)--(192.18,162.27)--(189.94,159.54) + --(108.15,162.99)--(107.65,166.74)--cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (107.65,166.74)--(192.18,162.27)--(189.94,159.54) + --(108.15,162.99)--(107.65,166.74); +drawoptions (withcolor (1,0.9,0)); +pickup pencircle scaled 0bp; +fill (149.77,163.86)--(153.8,163.86)--(153.8,110.07) + --(149.77,110.07)--(149.77,163.86)--cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (149.77,163.86)--(153.8,163.86)--(153.8,110.07) + --(149.77,110.07)--(149.77,163.86); +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 2.23bp; +draw (112.26,165.3)--(104.77,109.14); +draw (109.59,159.82)--(102.75,116.62); +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (153.73,150.61)--(163.38,129.3); +draw (153.51,140.17)--(163.09,124.33); +drawoptions (withcolor (0,0.2,1)); +pickup pencircle scaled 0bp; +fill (162.58,130.74)--(168.99,130.74)--(168.99,114.9) + --(162.58,114.9)--(162.58,130.74)--cycle; +drawoptions (withcolor (0,0.4,1)); +fill (153.22,123.1)--(162.58,123.1)--(162.58,115.9) + --(153.22,115.9)--(153.22,123.1)--cycle; +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 0.86bp; +draw (101.89,117.92)--(149.05,117.42); +pickup pencircle scaled 2.02bp; +draw (103.98,113.46)--(150.56,113.67); +pickup pencircle scaled 0bp; +fill (102.25,109.71)--(146.82,109.71)--(146.82,107.77) + --(102.25,107.77)--(102.25,109.71)--cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (102.25,109.71)--(146.82,109.71)--(146.82,107.77) + --(102.25,107.77)--(102.25,109.71); +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (90.4399,158.02)--(92.1699,158.02)--(92.1699,117.92) + --(90.4399,117.92)--(90.4399,158.02)--cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (90.4399,158.02)--(92.1699,158.02)--(92.1699,117.92) + --(90.4399,117.92)--(90.4399,158.02); +drawoptions (withcolor (0,0,0)); +draw (161.86,94.8799)--(164.1,94.8799)--(164.1,92.22) + --(161.86,92.22)--(161.86,94.8799); +drawoptions (withcolor (0.8,0.3,0)); +pickup pencircle scaled 0bp; +fill (147.32,104.1)--(149.05,104.1)--(149.05,87.97) + --(147.32,87.97)--(147.32,104.1)--cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (147.32,104.1)--(149.05,104.1)--(149.05,87.97) + --(147.32,87.97)--(147.32,104.1); +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 0bp; +fill (148.54,104.6)--(150.27,104.6)--(150.27,87.6799) + --(148.54,87.6799)--(148.54,104.6)--cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (148.54,104.6)--(150.27,104.6)--(150.27,87.6799) + --(148.54,87.6799)--(148.54,104.6); +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 0bp; +fill (141.2,107.55)--(147.1,107.55)--(147.1,87.25) + --(141.2,87.25)--(141.2,107.55)--cycle; +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 0.86bp; +draw (141.2,107.55)--(147.1,107.55)--(147.1,87.25) + --(141.2,87.25)--(141.2,107.55); +drawoptions (withcolor (0,0.75,1)); +pickup pencircle scaled 0bp; +fill (141.49,88.1799)--(153.58,88.1799)--(161.22,81.99) + --(143.22,81.2)--(141.49,88.1799)--cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (141.49,88.1799)--(153.58,88.1799)--(161.22,81.99) + --(143.22,81.2)--(141.49,88.1799); +drawoptions (withcolor (1,0.4,0)); +pickup pencircle scaled 0bp; +fill (146.53,110.22)--(165.1,110.22)--(165.1,103.09) + --(162.8,103.09)--(152.94,87.97)--(147.32,87.97) + --(146.53,110.22)--cycle; +drawoptions (withcolor (0.4,0.4,0.4)); +pickup pencircle scaled 0.86bp; +draw (146.53,110.22)--(165.1,110.22)--(165.1,103.09) + --(162.8,103.09)--(152.94,87.97)--(147.32,87.97) + --(146.53,110.22); +drawoptions (withcolor (1,0.5,0)); +pickup pencircle scaled 0bp; +fill (285.92,78.3899)--(163.09,104.31)--(152.43,88.6899) + --(160.57,82.5)..controls (160.57,82.5) and (165.39,79.76)..(175.62,74.2898) + ..controls (185.84,68.8198) and (187.86,71.5498)..(192.61,67.45) + ..controls (197.36,63.3398) and (215.65,62.0498)..(215.65,62.0498) + --(285.63,30.6599)--(285.92,78.3899)--cycle; +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 0.86bp; +draw (285.92,78.3899)--(163.09,104.31)--(152.43,88.6899) + --(160.57,82.5)..controls (160.57,82.5) and (165.39,79.76)..(175.62,74.2898) + ..controls (185.84,68.8198) and (187.86,71.5498)..(192.61,67.45) + ..controls (197.36,63.3398) and (215.65,62.0498)..(215.65,62.0498) + --(285.63,30.6599)--(285.92,78.3899); +drawoptions (withcolor (0.2,0.9,0.2)); +pickup pencircle scaled 0bp; +fill (40.1799,214.47)..controls (47.6699,214.47) and (37.0198,202.59)..(40.3999,195.82) + ..controls (43.7798,188.98) and (41.0498,194.46)..(47.8899,187.62) + ..controls (54.6599,180.78) and (59.4099,178.76)..(59.4099,173.29) + ..controls (59.4099,167.82) and (59.4099,166.45)..(60.1299,159.61) + ..controls (60.7798,152.77) and (64.8098,145.93)..(65.5298,141.82) + ..controls (66.25,137.79) and (68.98,134.34)..(66.25,130.95) + ..controls (63.5098,127.57) and (62.7898,127.57)..(52.6399,127.57) + ..controls (42.49,127.57) and (42.49,130.3)..(33.6299,125.48) + ..controls (24.7798,120.73) and (25.5,116.62)..(18.6599,120.73) + ..controls (11.8899,124.76) and (1.65991,128.22)..(1.65991,128.22) + --(1.37988,214.47)--(40.1799,214.47)--cycle; +drawoptions (withcolor (0,0.5,1)); +fill (122.41,51.8999)..controls (122.41,51.8999) and (121.76,52.47)..(120.25,49.3799) + ..controls (118.66,46.21) and (118.66,44.3398)..(115.86,39.9399) + ..controls (113.05,35.48) and (114.27,36.49)..(110.53,32.6699) + ..controls (106.71,28.9299) and (109.38,32.3799)..(104.34,28.9299) + ..controls (99.2998,25.47) and (94.2598,26.3398)..(89.7898,26.7) + ..controls (85.3999,26.98) and (76.6199,25.1799)..(72.8699,27.3398) + ..controls (69.1299,29.5798) and (67.8999,30.51)..(65.74,34.26) + ..controls (63.5798,38) and (63.5798,38)..(61.71,41.46) + ..controls (59.8398,44.9099) and (59.3398,48.5798)..(58.2598,50.3098) + --(54.8699,55.6399)--(122.41,51.8999)--cycle; +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 1.44bp; +draw (122.41,51.8999)..controls (122.41,51.8999) and (121.76,52.47)..(120.25,49.3799) + ..controls (118.66,46.21) and (118.66,44.3398)..(115.86,39.9399) + ..controls (113.05,35.48) and (114.27,36.49)..(110.53,32.6699) + ..controls (106.71,28.9299) and (109.38,32.3799)..(104.34,28.9299) + ..controls (99.2998,25.47) and (94.2598,26.3398)..(89.7898,26.7) + ..controls (85.3999,26.98) and (76.6199,25.1799)..(72.8699,27.3398) + ..controls (69.1299,29.5798) and (67.8999,30.51)..(65.74,34.26) + ..controls (63.5798,38) and (63.5798,38)..(61.71,41.46) + ..controls (59.8399,44.9099) and (59.3398,48.5798)..(58.2598,50.3098) + --(54.8699,55.6399)--(122.41,51.8999); +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (202.04,156.87)--(200.53,112.81)--(234.87,107.26) + --(233.29,167.1)--(202.04,156.87); +drawoptions (withcolor (1,0.25,0.25)); +pickup pencircle scaled 0bp; +fill (246.9,189.63)--(223.06,177.32)--(202.76,160.26) + --(230.55,170.55)--(246.9,189.63)--cycle; +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 0.86bp; +draw (246.9,189.63)--(223.06,177.32)--(202.76,160.26) + --(230.55,170.55)--(246.9,189.63); +drawoptions (withcolor (1,0.4,0.4)); +pickup pencircle scaled 0bp; +fill (246.25,188.98)--(230.98,170.62)--(274.76,169.83) + --(246.25,188.98)--cycle; +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 0.86bp; +draw (246.25,188.98)--(230.98,170.62)--(274.76,169.83) + --(246.25,188.98); +drawoptions (withcolor (0.3,1,0.3)); +pickup pencircle scaled 0bp; +fill (255.75,122.1)..controls (252.3,122.1) and (253.02,121.45)..(248.26,125.48) + ..controls (243.51,129.58) and (242.79,126.2)..(239.41,135.06) + ..controls (236.02,143.91) and (234.01,141.18)..(234.66,148.66) + ..controls (235.3,156.22) and (230.62,155.5)..(236.02,163.06) + ..controls (241.42,170.55) and (240.13,166.45)..(245.53,174.66) + ..controls (251,182.79) and (250.28,185.53)..(255.03,186.9) + ..controls (259.78,188.26) and (258.49,194.38)..(264.61,186.9) + ..controls (270.66,179.41) and (271.3,174.58)..(276.06,173.94) + ..controls (280.88,173.29) and (282.25,175.95)..(282.25,167.82) + ..controls (282.25,159.61) and (282.9,154.86)..(277.5,149.38) + ..controls (272.02,143.91) and (267.27,145.28)..(266.55,137.07) + ..controls (265.9,128.86) and (266.55,124.83)..(263.17,124.11) + ..controls (259.78,123.39) and (255.75,122.1)..(255.75,122.1) + --cycle; +drawoptions (withcolor (0.8,0.3,0)); +fill (270.66,52.47)--(276.78,52.47)--(276.78,0.629883) + --(270.66,0.629883)--(270.66,52.47)--cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (270.66,52.47)--(276.78,52.47)--(276.78,0.629898) + --(270.66,0.629898)--(270.66,52.47); +drawoptions (withcolor (0.9,0,0)); +pickup pencircle scaled 0bp; +fill (90.5798,158.02)--(92.0198,158.02)--(92.0198,152.84) + --(90.5798,152.84)--(90.5798,158.02)--cycle; +fill (90.5798,147.66)--(92.0198,147.66)--(92.0198,142.47) + --(90.5798,142.47)--(90.5798,147.66)--cycle; +fill (90.5798,137.43)--(92.0198,137.43)--(92.0198,132.25) + --(90.5798,132.25)--(90.5798,137.43)--cycle; +fill (90.5798,128.14)--(92.0198,128.14)--(92.0198,122.96) + --(90.5798,122.96)--(90.5798,128.14)--cycle; +drawoptions (withcolor (1,0.9,0)); +fill (203.34,160.98)--(200.53,160.98)--(199.38,155.29) + --(233.22,167.17)--(236.02,169.98)--(230.34,169.98) + --(203.34,160.98)--cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (203.34,160.98)--(200.53,160.98)--(199.38,155.29) + --(233.22,167.17)--(236.02,169.98)--(230.34,169.98) + --(203.34,160.98); +drawoptions (withcolor (1,1,0.7)); +pickup pencircle scaled 0bp; +fill (232.14,166.59)--(235.52,107.77)--(202.11,112.52) + --(202.83,155.65)--(232.14,166.59)--cycle; +drawoptions (withcolor (0.8,0.8,0.8)); +pickup pencircle scaled 0.22bp; +draw (232.14,166.59)--(235.52,107.77)--(202.11,112.52) + --(202.83,155.65)--(232.14,166.59); +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (214.42,156.3)--(214.42,145.35)--(217.81,146.07) + --(217.16,157.66)--(214.42,156.3); +drawoptions (withcolor (0.4,0.4,0.4)); +pickup pencircle scaled 1.44bp; +draw (219.9,133.04)--(219.75,109.86)--(230.77,108.42) + --(230.12,133.04)--(219.9,133.04); +drawoptions (withcolor (0,0.8,0)); +pickup pencircle scaled 0bp; +fill (212.34,118.64)..controls (217.16,122.1) and (219.82,117.34)..(221.19,126.2) + ..controls (222.56,135.13) and (224.65,137.86)..(221.91,141.25) + ..controls (219.18,144.7) and (213.06,146.07)..(213.06,146.07) + ..controls (213.06,146.07) and (213.7,152.26)..(208.3,149.46) + ..controls (202.83,146.72) and (196.06,153.42)..(196.06,145.93) + ..controls (196.06,138.37) and (200.1,135.13)..(203.55,131.67) + ..controls (206.94,128.29) and (206.22,127.57)..(207.58,124.18) + ..controls (208.95,120.73) and (212.34,118.64)..(212.34,118.64) + --cycle; +drawoptions (withcolor (0.6,0.3,0)); +fill (251.86,122.1)--(257.34,122.1)--(257.34,92.0698) + --(251.86,92.0698)--(251.86,122.1)--cycle; +pickup pencircle scaled 0.86bp; +draw (251.86,122.1)--(257.34,122.1)--(257.34,92.0698) + --(251.86,92.0698)--(251.86,122.1); +drawoptions (withcolor (0.6,0.85,1)); +pickup pencircle scaled 0bp; +fill (116.5,62.8398)..controls (116.5,62.8398) and (123.06,57.22)..(123.06,54.99) + ..controls (123.06,52.8298) and (122.98,51.25)..(118.66,49.95) + ..controls (114.27,48.73) and (104.62,47.7898)..(102.1,47.7898) + ..controls (99.5798,47.7898) and (93.3198,46.8599)..(91.45,46.8599) + ..controls (89.5798,46.8599) and (77.0498,46.21)..(74.5298,46.8599) + ..controls (72.0798,47.4299) and (65.8198,46.21)..(63.5798,47.7898) + ..controls (61.4199,49.3799) and (58.3298,49.95)..(56.74,52.47) + ..controls (55.1599,54.99) and (55.1599,55.3499)..(55.1599,58.1599) + ..controls (55.1599,60.97) and (59.8398,64.4199)..(59.8398,64.4199) + --(116.5,62.8398)--cycle; +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 1.44bp; +draw (116.5,62.8398)..controls (116.5,62.8398) and (123.06,57.22)..(123.06,54.99) + ..controls (123.06,52.8298) and (122.98,51.25)..(118.66,49.95) + ..controls (114.27,48.73) and (104.62,47.7898)..(102.1,47.7898) + ..controls (99.5798,47.7898) and (93.3198,46.8599)..(91.45,46.8599) + ..controls (89.5798,46.8599) and (77.0498,46.21)..(74.5298,46.8599) + ..controls (72.0798,47.4299) and (65.8198,46.21)..(63.5798,47.7898) + ..controls (61.4199,49.3799) and (58.3298,49.95)..(56.74,52.47) + ..controls (55.1599,54.99) and (55.1599,55.3498)..(55.1599,58.1599) + ..controls (55.1599,60.97) and (59.8399,64.4199)..(59.8399,64.4199) + --(116.5,62.8398); +drawoptions (withcolor (0.8,0.9,1)); +pickup pencircle scaled 0bp; +fill (63.3699,81.4199)..controls (63.3699,81.4199) and (81.5098,83.5)..(87.8499,83.5) + ..controls (94.1799,83.5) and (111.82,82.1399)..(111.82,82.1399) + ..controls (111.82,82.1399) and (114.06,71.4099)..(114.06,70.0398) + ..controls (114.06,68.74) and (115.64,64.6399)..(115.64,64.6399) + --(116.29,54.6299)..controls (116.29,54.6299) and (98.5,52.5398)..(93.25,52.5398) + ..controls (87.99,52.5398) and (69.2698,50.5999)..(67.47,51.25) + ..controls (65.6699,51.8999) and (65.6699,59.8198)..(65.6699,59.8198) + --(63.3699,63.49)--(63.3699,81.4199)--cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (63.3699,81.4199)..controls (63.3699,81.4199) and (81.5098,83.5)..(87.8499,83.5) + ..controls (94.1799,83.5) and (111.82,82.1399)..(111.82,82.1399) + ..controls (111.82,82.1399) and (114.06,71.4099)..(114.06,70.0398) + ..controls (114.06,68.74) and (115.64,64.6399)..(115.64,64.6399) + --(116.29,54.6299)..controls (116.29,54.6299) and (98.5,52.5398)..(93.25,52.5398) + ..controls (87.99,52.5398) and (69.2698,50.5999)..(67.47,51.25) + ..controls (65.6699,51.8999) and (65.6699,59.8198)..(65.6699,59.8198) + --(63.3699,63.49)--(63.3699,81.4199); +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (66.6799,78.25)..controls (68.9099,79.26) and (74.24,79.26)..(75.8198,79.26) + ..controls (77.3398,79.26) and (84.25,79.5398)..(84.25,79.5398) + --(85.1799,77.0198)--(85.1799,72.6299)--(83.5999,70.76) + ..controls (83.5999,70.76) and (80.22,70.76)..(77.0498,70.1099) + ..controls (73.8799,69.46) and (68.2598,68.5298)..(68.2598,68.5298) + ..controls (68.2598,68.5298) and (66.0999,69.46)..(66.0999,71.0498) + ..controls (66.0999,72.6299) and (66.6799,78.25)..(66.6799,78.25) + --cycle; +drawoptions (withcolor (0.4,0.4,0.4)); +pickup pencircle scaled 0.86bp; +draw (66.6799,78.25)..controls (68.9099,79.26) and (74.24,79.26)..(75.8198,79.26) + ..controls (77.3398,79.26) and (84.25,79.5398)..(84.25,79.5398) + --(85.1799,77.0198)--(85.1799,72.6299)--(83.5999,70.76) + ..controls (83.5999,70.76) and (80.22,70.76)..(77.0498,70.1099) + ..controls (73.8799,69.46) and (68.2598,68.5298)..(68.2598,68.5298) + ..controls (68.2598,68.5298) and (66.0999,69.46)..(66.0999,71.0498) + ..controls (66.0999,72.6299) and (66.6799,78.25)..(66.6799,78.25) + --cycle; +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (93.0298,79.8298)--(105.85,79.5398)..controls (105.85,79.5398) and (108.37,79.26)..(108.66,77.3098) + ..controls (108.94,75.4399) and (109.3,72.9199)..(109.3,72.9199) + ..controls (109.3,72.9199) and (108.94,70.76)..(107.43,70.76) + ..controls (105.85,70.76) and (93.6099,70.3999)..(93.6099,70.3999) + ..controls (93.6099,70.3999) and (91.45,71.3398)..(91.45,72.9199) + ..controls (91.45,74.5) and (91.1599,77.3098)..(91.1599,77.3098) + --(93.0298,79.8298)--cycle; +drawoptions (withcolor (0.4,0.4,0.4)); +pickup pencircle scaled 0.86bp; +draw (93.0298,79.8298)--(105.85,79.5398)..controls (105.85,79.5398) and (108.37,79.26)..(108.66,77.3098) + ..controls (108.94,75.4399) and (109.3,72.9199)..(109.3,72.9199) + ..controls (109.3,72.9199) and (108.94,70.76)..(107.43,70.76) + ..controls (105.85,70.76) and (93.6098,70.3999)..(93.6098,70.3999) + ..controls (93.6098,70.3999) and (91.45,71.3399)..(91.45,72.9199) + ..controls (91.45,74.5) and (91.1599,77.3098)..(91.1599,77.3098) + --(93.0298,79.8298); +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (95.48,61.3298)..controls (98.6499,61.3298) and (108.01,61.3298)..(108.01,61.3298) + --(110.82,58.8098)--(110.82,56.2898)..controls (108.01,55.3499) and (96.4199,54.99)..(96.4199,54.99) + ..controls (96.4199,54.99) and (93.3198,54.7)..(93.3198,56.2898) + ..controls (93.3198,57.8699) and (93.0298,59.3799)..(93.0298,59.3799) + --(95.48,61.3298)--cycle; +drawoptions (withcolor (0.4,0.4,0.4)); +pickup pencircle scaled 0.86bp; +draw (95.48,61.3298)..controls (98.6499,61.3298) and (108.01,61.3298)..(108.01,61.3298) + --(110.82,58.8098)--(110.82,56.2898)..controls (108.01,55.3499) and (96.4199,54.99)..(96.4199,54.99) + ..controls (96.4199,54.99) and (93.3198,54.7)..(93.3198,56.2898) + ..controls (93.3198,57.8699) and (93.0298,59.3799)..(93.0298,59.3799) + --(95.48,61.3298); +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (84.5398,60.0298)--(88.2798,58.8098)--(88.2798,55.6399) + ..controls (88.2798,55.6399) and (88.3499,54.7)..(86.1199,54.7) + ..controls (83.96,54.7) and (71.72,53.1199)..(71.72,53.1199) + --(69.2,54.7)--(69.2,57.51)--(71.4299,59.74) + --(84.5398,60.0298)--cycle; +drawoptions (withcolor (0.4,0.4,0.4)); +pickup pencircle scaled 0.86bp; +draw (84.5398,60.0298)--(88.2798,58.8098)--(88.2798,55.6399) + ..controls (88.2798,55.6399) and (88.3499,54.7)..(86.1199,54.7) + ..controls (83.96,54.7) and (71.72,53.1199)..(71.72,53.1199) + --(69.2,54.7)--(69.2,57.51)--(71.4299,59.74) + --(84.5398,60.0298); +drawoptions (withcolor (0,0.7,1)); +pickup pencircle scaled 2.23bp; +draw (65.3799,59.8198)..controls (70.6399,63.0598) and (81.22,66.6599)..(88.2798,66.4399) + ..controls (95.2598,66.22) and (111.97,65.2898)..(115.64,61.47); +drawoptions (withcolor (0.4,0.8,1)); +pickup pencircle scaled 0bp; +fill (111.82,82.1399)--(105.92,86.46)..controls (105.92,86.46) and (95.98,87.3899)..(93.8999,87.3899) + ..controls (91.8799,87.3899) and (81.9399,87.3899)..(81.9399,87.3899) + --(74.24,87.3899)--(68.3398,84.8699)--(63.5798,81.9199) + --(64.95,81.2)..controls (64.95,81.2) and (79.4199,83.5)..(87.3398,83.2898) + ..controls (95.2598,83.0698) and (111.61,82.1399)..(111.82,82.1399) + --cycle; +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 1.44bp; +draw (111.82,82.1399)--(105.92,86.46)..controls (105.92,86.46) and (95.98,87.3899)..(93.8999,87.3899) + ..controls (91.8799,87.3899) and (81.9399,87.3899)..(81.9399,87.3899) + --(74.24,87.3899)--(68.3398,84.8699)--(63.5798,81.9199) + --(64.95,81.2)..controls (64.95,81.2) and (79.4199,83.5)..(87.3398,83.2898) + ..controls (95.2598,83.0698) and (111.61,82.1399)..(111.82,82.1399) + --cycle; +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 2.81bp; +draw (113.84,72.8498)..controls (114.92,72.8498) and (116.29,72.8498)..(118.16,71.7) + ..controls (119.96,70.5398) and (119.53,70.5398)..(121.11,68.96) + ..controls (122.62,67.3799) and (121.98,66.22)..(121.98,66.22) + ..controls (121.98,66.22) and (120.82,65.5798)..(119.02,65.5798) + ..controls (117.22,65.5798) and (111.82,65.0698)..(109.74,65.0698) + ..controls (107.72,65.0698) and (103.4,65.0698)..(99.7998,65.0698) + ..controls (96.2,65.0698) and (90.9399,64.8599)..(88.2798,64.8599) + ..controls (85.5398,64.8599) and (79.4199,64.1399)..(76.47,63.9199) + ..controls (73.5198,63.7) and (69.49,63.7)..(66.0999,63.7) + ..controls (62.72,63.7) and (63.7998,62.7698)..(61.3499,64.1399) + ..controls (58.8298,65.5798) and (57.97,64.2099)..(57.97,66.6599) + ..controls (57.97,69.1799) and (56.8198,69.46)..(59.3398,71.7) + ..controls (61.7798,73.9299) and (61.3499,73.0598)..(63.1499,73.0598); +pickup pencircle scaled 2.23bp; +draw (57.97,67.0899)--(57.97,59.1699); +draw (62.9399,62.7698)--(62.9399,51.25); +draw (90.2998,64.8598)--(91.45,48.9399); +draw (121.26,66.01)--(120.61,54.6299); +draw (60.9199,72.8499)--(62,66.01); +draw (114.7,72.5598)--(114.7,67.3799); +pickup pencircle scaled 2.81bp; +draw (84.6099,87.0999)--(84.8999,94.3799); +draw (96.8498,86.46)--(96.8498,90.7798); +drawoptions (withcolor (1,0.9,0)); +pickup pencircle scaled 0bp; +fill (96.6299,96.25)..controls (98,96.25) and (99.1499,95.1699)..(99.1499,93.73) + ..controls (99.1499,92.2898) and (98,91.21)..(96.6299,91.21) + ..controls (95.2598,91.21) and (94.1099,92.2898)..(94.1099,93.73) + ..controls (94.1099,95.1699) and (95.2598,96.25)..(96.6299,96.25) + --cycle; +drawoptions (withcolor (0.9,0,0)); +pickup pencircle scaled 2.23bp; +draw (96.6299,96.25)..controls (98,96.25) and (99.1499,95.1699)..(99.1499,93.73) + ..controls (99.1499,92.2898) and (98,91.21)..(96.6299,91.21) + ..controls (95.2598,91.21) and (94.1099,92.2898)..(94.1099,93.73) + ..controls (94.1099,95.1699) and (95.2598,96.25)..(96.6299,96.25) + --cycle; +drawoptions (withcolor (1,0.4,0)); +pickup pencircle scaled 0bp; +fill (277.14,29.4299)--(285.99,29.4299)--(285.99,0.699951) + --(277.14,0.699951)--(277.14,29.4299)--cycle; +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 0.86bp; +draw (277.14,29.4299)--(285.99,29.4299)--(285.99,0.699936) + --(277.14,0.699936)--(277.14,29.4299); +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (271.16,51.75)--(276.49,52.6199)--(276.7,49.95) + --(271.16,48.9399)--(271.16,51.75)--cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (271.16,51.75)--(276.49,52.6199)--(276.7,49.95) + --(271.16,48.9399)--(271.16,51.75); +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (285.56,29.3599)--(285.27,32.5298)--(276.85,32.5298) + --(277.64,29.3599)--(285.56,29.3599)--cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (285.56,29.3599)--(285.27,32.5298)--(276.85,32.5298) + --(277.64,29.3599)--(285.56,29.3599); +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (165.82,104.53)--(172.95,104.53)--(172.95,102.08) + --(165.82,102.08)--(165.82,104.53)--cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (165.82,104.53)--(172.95,104.53)--(172.95,102.08) + --(165.82,102.08)--(165.82,104.53); +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 0bp; +fill (162.37,92.22)..controls (162.58,92.22) and (162.87,92.22)..(163.16,92.22) + ..controls (163.52,92.22) and (163.81,92.22)..(164.1,92.22) + ..controls (164.02,89.7698) and (164.02,87.3198)..(164.02,84.8699) + ..controls (164.02,82.3499) and (164.02,79.8999)..(164.1,77.3799) + ..controls (163.81,77.5298) and (163.52,77.6699)..(163.16,77.74) + ..controls (162.94,77.8198) and (162.58,78.0298)..(162.37,78.0298) + ..controls (162.3,80.4099) and (162.3,82.7798)..(162.3,85.1599) + ..controls (162.3,87.46) and (162.37,89.9099)..(162.37,92.22) + --cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (162.37,92.22)..controls (162.58,92.22) and (162.87,92.22)..(163.16,92.22) + ..controls (163.52,92.22) and (163.81,92.22)..(164.1,92.22) + ..controls (164.02,89.7698) and (164.02,87.3198)..(164.02,84.8699) + ..controls (164.02,82.3499) and (164.02,79.8999)..(164.1,77.3799) + ..controls (163.81,77.5298) and (163.52,77.6699)..(163.16,77.74) + ..controls (162.94,77.8198) and (162.58,78.0298)..(162.37,78.0298) + ..controls (162.3,80.4099) and (162.3,82.7798)..(162.3,85.1599) + ..controls (162.3,87.46) and (162.37,89.9099)..(162.37,92.22) + --cycle; +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (161.94,92.6499)--(164.31,92.6499)--(164.31,93.6599) + --(161.94,93.6599)--(161.94,92.6499)--cycle; +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 0.86bp; +draw (161.94,92.6499)--(164.31,92.6499)--(164.31,93.6599) + --(161.94,93.6599)--(161.94,92.6499); +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (147.25,105.9)--(150.34,105.9)--(150.34,104.53) + --(147.25,104.53)--(147.25,105.9)--cycle; +drawoptions (withcolor (0.1,0.1,0.1)); +pickup pencircle scaled 0.86bp; +draw (147.25,105.9)--(150.34,105.9)--(150.34,104.53) + --(147.25,104.53)--(147.25,105.9); +drawoptions (withcolor (0,0.7,1)); +pickup pencircle scaled 0bp; +fill (105.85,90.6299)..controls (110.82,92.5) and (110.82,92)..(113.98,92.9399) + ..controls (117.08,93.7998) and (117.58,92.5)..(120.25,92.5) + ..controls (122.91,92.5) and (128.67,92)..(130.62,92) + --(135.58,92)--(141.85,93.3699)--(143.22,82.5) + --(154.45,82.5)--(159.78,79.3298)..controls (159.78,79.3298) and (159.34,72.1299)..(155.74,72.1299) + ..controls (152.22,72.1299) and (147.61,69.3899)..(144.08,72.1299) + ..controls (140.55,74.7898) and (136.88,75.22)..(134.22,74.7898) + ..controls (131.55,74.3599) and (126.94,73.9299)..(123.42,73.9299) + ..controls (119.82,73.9299) and (113.05,73.9299)..(113.05,73.9299) + --(111.25,82.9299)--(105.85,87.46)--(105.85,90.6299) + --cycle; +drawoptions (withcolor (0,0.4,1)); +fill (109.88,100.93)..controls (116.22,103.45) and (119.82,103.23)..(123.85,103.66) + ..controls (127.95,104.1) and (132.49,104.89)..(133.35,104.6) + --(138.75,102.8)--(136.02,99.6299)..controls (136.02,99.6299) and (138.25,93.2998)..(136.02,95.0999) + ..controls (133.78,96.8999) and (130.18,96.8999)..(127.02,97.3298) + ..controls (123.85,97.76) and (118.45,95.5298)..(121.18,95.5298) + ..controls (123.85,95.5298) and (131.98,95.5298)..(134.65,94.23) + --(139.18,91.9299)..controls (139.18,91.9299) and (112.18,91.9299)..(108.51,91.9299) + ..controls (104.91,91.9299) and (104.55,96.0298)..(106.78,96.0298) + ..controls (109.02,96.0298) and (115.78,98.7)..(115.78,98.7) + --(107.65,100.06)--(109.88,100.93)--cycle; +drawoptions (withcolor (0.6,0.3,0)); +fill (45.9399,128.07)..controls (45.9399,128.07) and (45.0798,122.6)..(45.9399,118.57) + ..controls (46.8799,114.54) and (45.9399,113.17)..(47.3098,110.43) + ..controls (48.6799,107.77) and (50.48,104.17)..(50.48,104.17) + --(54.9399,101.5)--(52.71,99.6299)--(47.74,99.6299) + --(43.21,103.3)--(41.9099,114.03)--(41.4099,123.1) + --(40.98,127.64)--(45.9399,128.07)--cycle; +fill (45.0798,95.1699)..controls (45.0798,95.1699) and (42.2698,98.7)..(41.4099,101.94) + ..controls (40.5398,105.1) and (38.74,111.37)..(38.74,114.97) + ..controls (38.74,118.57) and (38.74,128.07)..(38.74,128.07) + --(31.5398,124.04)..controls (31.5398,124.04) and (31.0398,119.5)..(31.5398,116.34) + ..controls (31.98,113.17) and (32.8398,108.2)..(33.3398,105.1) + ..controls (33.7798,101.94) and (34.21,100.57)..(34.21,97.8298) + ..controls (34.21,95.1699) and (39.6799,94.23)..(39.6799,94.23) + --(45.0798,95.1699)--cycle; +fill (27.9399,87.46)..controls (27.9399,87.46) and (27.5098,96.46)..(27.5098,99.2) + ..controls (27.5098,101.94) and (27.5098,113.17)..(27.5098,113.17) + --(27.0798,120.37)--(22.98,119.07)--(15.3398,123.61) + ..controls (15.3398,123.61) and (15.3398,113.6)..(15.3398,110.94) + ..controls (15.3398,108.2) and (15.7798,101.5)..(15.3398,96.97) + ..controls (14.9099,92.4299) and (15.7798,92)..(14.9099,88.8298) + ..controls (13.98,85.6599) and (21.1799,86.5298)..(21.1799,86.5298) + --(26.1399,85.23)--(27.9399,87.46)--cycle; +fill (1.37988,78.3899)--(15.3398,77.5298)..controls (15.3398,77.5298) and (14.8398,80.7)..(13.5398,83.3599) + ..controls (12.1799,86.0999) and (7.63989,86.96)..(6.77979,92.8599) + ..controls (5.83984,98.7698) and (4.53979,102.8)..(4.53979,107.77) + ..controls (4.53979,112.74) and (4.10986,127.21)..(4.10986,127.21) + --(1.37988,127.64)--(1.37988,78.3899)--cycle; +drawoptions (withcolor (0,0.75,1)); +fill (220.62,63.9199)--(217.45,58.5198)--(223.78,51.6799) + ..controls (223.78,51.6799) and (230.98,47.22)..(234.15,46.2798) + ..controls (237.32,45.3398) and (244.52,43.5398)..(244.52,43.5398) + --(257.12,43.5398)--(261.66,44.0498)--(267.42,42.6799) + --(266.55,36.3398)--(259.78,32.74)..controls (259.78,32.74) and (254.46,30.9399)..(248.98,32.74) + ..controls (243.58,34.5398) and (240.92,34.1099)..(236.38,34.98) + ..controls (231.85,35.9099) and (222.42,37.71)..(221.98,40.45) + ..controls (221.55,43.1099) and (219.32,49.0198)..(219.32,49.0198) + --(217.45,54.4199)--(218.38,62.5498)--(220.62,63.9199) + --cycle; +drawoptions (withcolor (0.6,0.3,0)); +fill (219.75,63.9199)--(235.02,63.9199)..controls (235.02,63.9199) and (238.18,63.9199)..(243.15,62.1199) + ..controls (248.12,60.3198) and (257.12,56.22)..(257.12,56.22) + --(262.09,51.25)--(266.98,48.5798)--(266.98,42.6799) + --(260.72,44.0498)--(246.32,41.74)--(231.42,46.7798) + --(222.42,52.1799)--(218.82,57.1499)--(219.75,63.9199) + --cycle; +drawoptions (withcolor (1,0.9,0)); +fill (223.78,55.7798)--(227.38,60.75)--(231.42,61.6899) + ..controls (231.42,61.6899) and (235.88,61.6899)..(238.62,61.26) + ..controls (241.35,60.75) and (245.38,59.3799)..(248.12,57.5798) + ..controls (250.78,55.7798) and (256.18,52.6199)..(256.18,52.6199) + --(254.89,48.5798)--(249.42,46.2798)--(243.58,48.0798) + --(237.75,53.0498)--(233.65,54.9199)--(223.78,55.7798) + --cycle; +drawoptions (withcolor (0.4,0.4,0.4)); +fill (221.34,54.4199)--(224.65,50.3799)..controls (224.65,50.3799) and (229.62,47.6499)..(232.35,46.7798) + ..controls (235.02,45.8499) and (240.56,44.6199)..(240.92,44.48) + --(246.75,42.25)--(251.29,48.0798)--(243.58,51.25) + --(236.02,54.4199)--(229.18,56.22)--(221.34,54.4199) + --cycle; +drawoptions (withcolor (0.8,0.8,0.8)); +fill (219.32,63.0598)--(219.32,58.0198)--(224.22,51.25) + ..controls (224.22,51.25) and (231.92,47.22)..(235.02,45.8499) + ..controls (238.18,44.48) and (243.15,43.1099)..(245.89,43.1099) + ..controls (248.55,43.1099) and (253.09,43.1099)..(255.75,43.1099) + ..controls (258.42,43.1099) and (262.02,44.0498)..(264.32,43.1099) + ..controls (266.55,42.25) and (267.42,40.45)..(267.42,40.45) + --(262.09,38.6499)..controls (262.09,38.6499) and (255.75,38.6499)..(251.65,38.6499) + ..controls (247.62,38.6499) and (240.92,39.51)..(237.32,40.45) + ..controls (233.65,41.3098) and (226.88,43.98)..(223.78,47.22) + ..controls (220.62,50.3799) and (218.38,53.98)..(218.38,53.98) + --(219.32,63.0598)--cycle; +drawoptions (withcolor (0.6,0.3,0)); +fill (271.45,52.8999)--(271.23,1.41992)--(266.34,1.41992) + --(266.41,54.2)..controls (266.41,54.2) and (272.17,53.1899)..(271.45,52.8999) + --cycle; +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 0.86bp; +draw (271.45,52.8999)--(271.23,1.41992)--(266.34,1.41992) + --(266.41,54.2)..controls (266.41,54.2) and (272.17,53.1899)..(271.45,52.8999) + --cycle; +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (271.16,51.75)--(266.26,54.1299)--(266.26,50.8899) + --(271.16,48.9399)--(271.16,51.75)--cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (271.16,51.75)--(266.26,54.1299)--(266.26,50.8899) + --(271.16,48.9399)--(271.16,51.75); +drawoptions (withcolor (0.6,0.85,1)); +pickup pencircle scaled 0bp; +fill (121.98,48.0798)..controls (129.82,48.51) and (138.9,48.51)..(143.36,48.51) + ..controls (147.75,48.51) and (157.69,51.6799)..(163.52,49.0198) + ..controls (169.42,46.2798) and (168.99,44.0498)..(174.82,43.5398) + ..controls (180.66,43.1099) and (189.66,39.51)..(189.66,39.51) + ..controls (189.66,39.51) and (190.52,35.8398)..(193.26,34.0398) + ..controls (195.99,32.24) and (185.62,29.5)..(185.62,29.5) + --(173.89,35.8398)..controls (173.89,35.8398) and (156.32,40.8799)..(152.72,40.8799) + ..controls (149.12,40.8799) and (134.79,39.9399)..(134.79,39.9399) + ..controls (134.79,39.9399) and (130.69,34.47)..(140.19,34.0398) + ..controls (149.55,33.6099) and (157.69,30.9399)..(157.69,30.9399) + ..controls (157.69,30.9399) and (156.32,25.47)..(152.72,25.47) + ..controls (149.12,25.47) and (129.82,26.4099)..(125.36,26.4099) + ..controls (120.82,26.4099) and (103.62,28.21)..(108.51,30.9399) + ..controls (113.48,33.6099) and (116.79,41.3098)..(116.79,41.3098) + ..controls (116.79,41.3098) and (118.59,46.71)..(121.98,48.0798) + --cycle; +drawoptions (withcolor (1,1,1)); +fill (266.12,54.1299)--(271.3,51.46)--(276.7,52.6199) + --(273.68,54.99)--(266.12,54.1299)--cycle; +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 0.86bp; +draw (266.12,54.1299)--(271.3,51.46)--(276.7,52.6199) + --(273.68,54.99)--(266.12,54.1299); +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 0bp; +fill (189.73,159.75)--(185.05,155.07)--(176.19,155.07) + --(181.09,159.75)--(189.73,159.75)--cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (189.73,159.75)--(185.05,155.07)--(176.19,155.07) + --(181.09,159.75)--(189.73,159.75); +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 0bp; +fill (191.24,121.45)..controls (191.24,118.71) and (191.24,115.54)..(191.24,113.89) + ..controls (191.24,112.16) and (191.6,109.35)..(191.24,107.91) + ..controls (190.81,106.54) and (190.38,105.46)..(190.38,105.46) + --(190.59,103.16)--(193.98,104.02)--(194.41,106.54) + ..controls (194.41,106.54) and (194.41,111.94)..(194.41,113.02) + ..controls (194.41,114.03) and (195.06,123.54)..(195.06,123.54) + --(191.24,121.45)--cycle; +pickup pencircle scaled 0.86bp; +draw (191.24,121.45)..controls (191.24,118.71) and (191.24,115.54)..(191.24,113.89) + ..controls (191.24,112.16) and (191.6,109.35)..(191.24,107.91) + ..controls (190.81,106.54) and (190.38,105.46)..(190.38,105.46) + --(190.59,103.16)--(193.98,104.02)--(194.41,106.54) + ..controls (194.41,106.54) and (194.41,111.94)..(194.41,113.02) + ..controls (194.41,114.03) and (195.06,123.54)..(195.06,123.54) + --(191.24,121.45); +pickup pencircle scaled 0bp; +fill (216.58,98.5498)..controls (216.58,100.21) and (216.15,99.3398)..(216.01,102.73) + ..controls (215.79,106.11) and (215.14,107.12)..(215.14,110.22) + ..controls (215.14,113.46) and (215.14,116.98)..(215.14,118.06) + ..controls (215.14,119.14) and (215.14,120.37)..(215.14,120.37) + --(212.19,119.36)..controls (212.19,119.36) and (212.19,118.71)..(212.19,116.98) + ..controls (212.19,115.33) and (212.19,113.17)..(212.19,111.3) + ..controls (212.19,109.42) and (212.19,109.5)..(212.19,106.98) + ..controls (212.19,104.46) and (212.05,101.94)..(212.05,101.94) + --(211.4,99.3398)--(213.27,98.7)--(216.58,98.5498) + --cycle; +pickup pencircle scaled 0.86bp; +draw (216.58,98.5498)..controls (216.58,100.21) and (216.15,99.3399)..(216.01,102.73) + ..controls (215.79,106.11) and (215.14,107.12)..(215.14,110.22) + ..controls (215.14,113.46) and (215.14,116.98)..(215.14,118.06) + ..controls (215.14,119.14) and (215.14,120.37)..(215.14,120.37) + --(212.19,119.36)..controls (212.19,119.36) and (212.19,118.71)..(212.19,116.98) + ..controls (212.19,115.33) and (212.19,113.17)..(212.19,111.3) + ..controls (212.19,109.42) and (212.19,109.5)..(212.19,106.98) + ..controls (212.19,104.46) and (212.05,101.94)..(212.05,101.94) + --(211.4,99.3399)--(213.27,98.6999)--(216.58,98.5498); +pickup pencircle scaled 0bp; +fill (184.54,108.78)--(184.54,114.46)--(183.46,116.19) + --(182.67,114.46)..controls (182.67,114.46) and (182.82,113.24)..(182.82,112.16) + ..controls (182.82,111.08) and (182.82,109.64)..(182.82,109.64) + --(184.54,108.78)--cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (184.54,108.78)--(184.54,114.46)--(183.46,116.19) + --(182.67,114.46)..controls (182.67,114.46) and (182.82,113.24)..(182.82,112.16) + ..controls (182.82,111.08) and (182.82,109.64)..(182.82,109.64) + --(184.54,108.78); +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 0bp; +fill (178.28,117.85)..controls (178.28,117.85) and (178.42,115.76)..(178.42,114.68) + ..controls (178.42,113.6) and (178.42,111.3)..(178.42,111.3) + --(176.98,109.64)--(176.98,113.46)--(176.98,116.55) + --(178.28,117.85)--cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (178.28,117.85)..controls (178.28,117.85) and (178.42,115.76)..(178.42,114.68) + ..controls (178.42,113.6) and (178.42,111.3)..(178.42,111.3) + --(176.98,109.64)--(176.98,113.46)--(176.98,116.55) + --(178.28,117.85); +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 0bp; +fill (180.51,109.21)..controls (180.51,109.21) and (180.3,109.5)..(180.51,112.16) + ..controls (180.73,114.9) and (180.73,117.85)..(180.73,117.85) + --(179.5,118.06)..controls (179.5,118.06) and (179.5,115.9)..(179.5,114.9) + ..controls (179.5,113.89) and (179.29,110.86)..(179.29,110.86) + --(179.5,108.99)--(180.51,109.21)--cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (180.51,109.21)..controls (180.51,109.21) and (180.3,109.5)..(180.51,112.16) + ..controls (180.73,114.9) and (180.73,117.85)..(180.73,117.85) + --(179.5,118.06)..controls (179.5,118.06) and (179.5,115.9)..(179.5,114.9) + ..controls (179.5,113.89) and (179.29,110.86)..(179.29,110.86) + --(179.5,108.99)--(180.51,109.21); +drawoptions (withcolor (0,0.5,0)); +pickup pencircle scaled 0bp; +fill (192.46,150.97)..controls (185.55,150.54) and (182.6,151.98)..(182.38,148.88) + ..controls (182.24,145.71) and (184.54,150.97)..(185.34,145.28) + ..controls (186.2,139.59) and (186.85,138.51)..(186.85,136.21) + ..controls (186.85,133.9) and (188.86,133.9)..(189.3,136.42) + ..controls (189.73,138.94) and (190.02,140.89)..(192.1,142.11) + ..controls (194.19,143.41) and (195.06,146.94)..(191.46,146.5) + ..controls (187.86,146.14) and (190.59,149.89)..(190.59,149.89) + --(192.46,150.97)--cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (221.77,159.61)--(227.17,163.06)--(226.52,146.65) + --(222.42,145.93)--(221.77,159.61); +draw (207.8,155.43)--(205.28,153.92)--(205.28,149.1); +drawoptions (withcolor (0.4,0.4,0.4)); +pickup pencircle scaled 1.44bp; +draw (204.63,125.48)--(204.63,118.28)--(209.24,117.63); +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (224,160.9)--(224.14,148.88); +draw (222.06,154.78)--(226.88,157.09); +draw (216.01,151.62)--(215.79,145.71); +drawoptions (withcolor (0.4,0.4,0.4)); +pickup pencircle scaled 1.44bp; +draw (223.5,130.52)--(227.96,130.52)--(228.18,124.4); +draw (222.7,118.28)--(222.7,115.76)--(228.39,115.11); +draw (222.27,123.32)--(227.53,123.18); +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (240.42,126.27)--(236.82,126.7)--(236.82,113.17) + --(241.35,113.17)--(240.42,126.27)--cycle; +drawoptions (withcolor (0.5,0.5,0.5)); +pickup pencircle scaled 0.22bp; +draw (240.42,126.27)--(236.82,126.7)--(236.82,113.17) + --(241.35,113.17)--(240.42,126.27); +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (246.75,126.7)--(242.65,126.7)--(243.58,112.23) + --(248.12,111.8)--(248.55,119.07)--(246.75,126.7) + --cycle; +drawoptions (withcolor (0.5,0.5,0.5)); +pickup pencircle scaled 0.22bp; +draw (246.75,126.7)--(242.65,126.7)--(243.58,112.23) + --(248.12,111.8)--(248.55,119.07)--(246.75,126.7); +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (258.7,119.79)--(258.7,111.66)--(262.74,111.66) + --(263.24,123.82)--(258.27,122.96)--(258.7,119.79) + --cycle; +drawoptions (withcolor (0.5,0.5,0.5)); +pickup pencircle scaled 0.22bp; +draw (258.7,119.79)--(258.7,111.66)--(262.74,111.66) + --(263.24,123.82)--(258.27,122.96)--(258.7,119.79); +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (269.36,126.49)--(264.82,126.49)--(265.33,110.22) + --(270.73,110.22)--(269.36,126.49)--cycle; +drawoptions (withcolor (0.5,0.5,0.5)); +pickup pencircle scaled 0.22bp; +draw (269.36,126.49)--(264.82,126.49)--(265.33,110.22) + --(270.73,110.22)--(269.36,126.49); +drawoptions (withcolor (1,0.8,0.8)); +pickup pencircle scaled 0bp; +fill (273.32,101.5)--(285.92,98.26)--(285.92,156.58) + --(273.32,145.28)--(273.32,101.5)--cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (273.32,101.5)--(285.92,98.26)--(285.92,156.58) + --(273.32,145.28)--(273.32,101.5); +drawoptions (withcolor (0.95,0.95,0.95)); +pickup pencircle scaled 0bp; +fill (277.86,125.41)--(276.92,109.57)--(285.92,107.77) + --(285.49,123.61)--(277.86,125.41)--cycle; +drawoptions (withcolor (0.6,0.6,0.6)); +pickup pencircle scaled 1.44bp; +draw (277.86,125.41)--(276.92,109.57)--(285.92,107.77) + --(285.49,123.61)--(277.86,125.41); +drawoptions (withcolor (0.9,0.9,0.9)); +pickup pencircle scaled 0bp; +fill (278.29,125.84)--(285.49,123.61)--(285.92,131.24) + --(278.29,132.18)--(278.29,125.84)--cycle; +drawoptions (withcolor (0.6,0.6,0.6)); +pickup pencircle scaled 1.44bp; +draw (278.29,125.84)--(285.49,123.61)--(285.92,131.24) + --(278.29,132.18)--(278.29,125.84); +pickup pencircle scaled 0.86bp; +draw (237.32,121.3)--(240.42,121.3); +drawoptions (withcolor (0.5,0.5,0.5)); +draw (243.15,121.3)--(248.12,120.87); +draw (259.35,120.37)--(262.52,119.94); +draw (265.69,121.3)--(269.22,120.87); +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 0bp; +fill (166.04,101.86)..controls (167.12,101.94) and (168.2,101.94)..(169.35,101.94) + ..controls (170.43,101.94) and (171.51,101.94)..(172.74,101.86) + ..controls (172.66,97.5398) and (172.66,93.1499)..(172.66,88.76) + ..controls (172.66,84.3699) and (172.66,79.98)..(172.74,75.5798) + ..controls (171.51,76.0898) and (170.43,76.5898)..(169.35,77.0198) + ..controls (168.27,77.46) and (167.12,77.96)..(166.04,78.3198) + ..controls (166.04,82.2798) and (166.04,86.1699)..(166.04,90.1299) + ..controls (166.04,94.0198) and (166.04,97.98)..(166.04,101.86) + --cycle; +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 0.86bp; +draw (166.04,101.86)..controls (167.12,101.94) and (168.2,101.94)..(169.35,101.94) + ..controls (170.43,101.94) and (171.51,101.94)..(172.74,101.86) + ..controls (172.66,97.5398) and (172.66,93.1499)..(172.66,88.76) + ..controls (172.66,84.3699) and (172.66,79.98)..(172.74,75.5798) + ..controls (171.51,76.0899) and (170.43,76.5898)..(169.35,77.0198) + ..controls (168.27,77.4599) and (167.12,77.9599)..(166.04,78.3198) + ..controls (166.04,82.2798) and (166.04,86.1699)..(166.04,90.1299) + ..controls (166.04,94.0198) and (166.04,97.98)..(166.04,101.86) + --cycle; +drawoptions (withcolor (0,0.6,0)); +pickup pencircle scaled 0bp; +fill (25.21,151.54)..controls (35.4299,157.66) and (33.3398,161.05)..(32.7,169.33) + ..controls (32.0498,177.54) and (29.3098,183.01)..(30.6799,189.13) + ..controls (32.0498,195.32) and (25.9299,187.04)..(23.8398,181.57) + ..controls (21.8198,176.17) and (13.6199,171.34)..(13.6199,171.34) + ..controls (13.6199,171.34) and (5.47998,167.89)..(8.85986,179.55) + ..controls (12.25,191.22) and (5.47998,189.78)..(5.47998,185.02) + ..controls (5.47998,180.27) and (3.38989,170.62)..(5.47998,164.5) + ..controls (7.5,158.38) and (12.3198,157.66)..(12.97,161.05) + ..controls (13.6199,164.5) and (17.0698,159.68)..(17.0698,152.19) + ..controls (17.0698,144.7) and (25.21,151.54)..(25.21,151.54) + --cycle; +fill (38.8198,143.98)..controls (44.2898,150.18) and (44.2898,155)..(44.2898,159.75) + ..controls (44.2898,164.5) and (43.5698,178.18)..(46.2998,174.73) + ..controls (49.0398,171.34) and (53.7898,163.86)..(53.7898,158.38) + ..controls (53.7898,152.91) and (46.3799,148.09)..(51.1299,143.98) + ..controls (55.8799,139.88) and (59.2598,136.5)..(50.4099,136.5) + ..controls (41.5498,136.5) and (34.0598,134.41)..(34.0598,134.41) + --(38.8198,143.98)--cycle; +drawoptions (withcolor (0,0.8,0)); +fill (254.6,137.86)..controls (254.6,145.42) and (251.14,148.16)..(254.6,155) + ..controls (257.98,161.84) and (261.44,170.7)..(261.44,170.7) + ..controls (261.44,170.7) and (262.74,170.7)..(262.74,165.94) + ..controls (262.74,161.12) and (268.93,156.3)..(268.93,156.3) + --(269.58,149.46)--(262.09,141.97)..controls (262.09,141.97) and (262.09,139.23)..(262.09,134.48) + ..controls (262.09,129.66) and (254.6,137.86)..(254.6,137.86) + --cycle; +drawoptions (withcolor (0.95,0.95,0.95)); +fill (80.3599,197.34)..controls (117.8,197.34) and (98.0698,202.81)..(123.92,202.81) + ..controls (149.77,202.81) and (150.42,203.53)..(162.66,200.79) + ..controls (174.97,198.06) and (174.25,195.25)..(185.84,193.23) + ..controls (197.43,191.22) and (206.29,189.78)..(204.92,185.02) + ..controls (203.55,180.27) and (180.44,174.15)..(174.97,176.82) + ..controls (169.5,179.55) and (155.17,184.38)..(150.42,184.38) + ..controls (145.66,184.38) and (110.31,192.58)..(110.31,192.58) + ..controls (110.31,192.58) and (102.82,188.41)..(115.14,185.74) + ..controls (127.38,183.01) and (154.52,178.9)..(142.28,172.71) + ..controls (130.04,166.52) and (115.78,176.17)..(106.93,176.17) + ..controls (98.0698,176.17) and (85.1799,176.82)..(78.99,179.55) + ..controls (72.8699,182.29) and (61.2798,190.5)..(54.5098,193.95) + ..controls (47.6699,197.34) and (49.6899,205.54)..(59.2598,204.18) + ..controls (68.7698,202.81) and (80.3599,197.34)..(80.3599,197.34) + --cycle; +drawoptions (withcolor (1,0.4,0)); +fill (14.3398,40.8098)..controls (21.8198,45.5598) and (32.7,53.0498)..(34.7798,56.5) + ..controls (36.7998,59.8899) and (37.45,49.6599)..(37.45,49.6599) + --(45.6599,57.1499)--(45.6599,47.6499)..controls (45.6599,47.6499) and (42.2,42.8198)..(39.5398,38) + ..controls (36.7998,33.25) and (22.47,18.2)..(22.47,18.2) + --(19.8098,25.0398)--(25.21,34.6199)--(23.8398,41.46) + --(12.25,35.26)--(14.3398,40.8098)--cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +fill (257.98,96.1799)--(278.43,94.8098)--(264.18,92.72) + --(255.25,92.72)--(257.98,96.1799)--cycle; +drawoptions (withcolor (0.4,0.4,0.4)); +fill (215.14,102.37)..controls (215.14,102.37) and (217.16,100.28)..(220.54,100.28) + ..controls (224,100.28) and (230.77,99.5598)..(230.77,99.5598) + --(227.31,98.1899)--(215.79,97.5398)--(215.14,102.37) + --cycle; +fill (193.98,104.38)--(204.92,104.38)--(203.55,100.93) + --(193.33,102.37)--(193.98,104.38)--cycle; +drawoptions (withcolor (0,0.5,1)); +fill (266.12,11.8599)..controls (260.65,15.25) and (251.79,18.7)..(246.32,18.7) + ..controls (240.85,18.7) and (239.48,17.3398)..(230.62,17.3398) + ..controls (221.7,17.3398) and (212.91,15.97)..(206.07,17.3398) + ..controls (199.23,18.7) and (191.74,16.6199)..(186.92,16.6199) + ..controls (182.17,16.6199) and (183.54,11.1399)..(178.06,10.5) + ..controls (172.59,9.77979) and (171.94,5.66992)..(167.84,5.66992) + ..controls (163.74,5.66992) and (159.06,0.849854)..(168.49,0.849854) + ..controls (177.92,0.849854) and (266.12,0.699951)..(266.12,1.41992) + --(266.12,11.8599)--cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (1.01978,215.34)--(286.28,215.34)--(286.28,0.849854) + --(1.01978,0.849854)--(1.01978,215.34); +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (286.28,31.6599)--(280.81,35.8398)--(277.42,35.8398) + --(277.42,31.6599)--(286.28,31.6599)--cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.86bp; +draw (286.28,31.6599)--(280.81,35.8398)--(277.42,35.8398) + --(277.42,31.6599)--(286.28,31.6599); +drawoptions (withcolor (0.4,0.4,0.4)); +pickup pencircle scaled 2.81bp; +draw (69.2698,192.73)..controls (74.74,190.71) and (75.46,185.89)..(75.46,185.89) + --(81.5798,185.24); +draw (62.1399,178.62)..controls (67.5398,176.6) and (69.7,176.89)..(69.7,176.89) + --(72.4399,180.27); +draw (52.3499,196.11)..controls (57.8198,194.02) and (58.47,189.27)..(58.47,189.27) + --(61.21,192.66); +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 2.23bp; +draw (173.17,30.73)..controls (173.17,29.72) and (173.38,28.5)..(173.38,28.5) + --(175.18,29.0698); +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 0bp; +fill (168.99,32.74)..controls (170.5,34.3999) and (171.51,33.1799)..(172.88,32.5298) + ..controls (174.25,31.8799) and (175.98,32.3098)..(175.11,31.23) + ..controls (174.32,30.22) and (168.56,29.3599)..(168.56,29.6499) + --(168.63,30.9399)--(168.13,31.6599)--(168.99,32.74) + --cycle; +pickup pencircle scaled 2.23bp; +draw (173.24,32.3098)..controls (173.24,33.3198) and (173.46,34.5398)..(173.46,34.5398) + --(175.33,33.97); +drawoptions (withcolor (0,0,0)); +draw (184.33,24.3899)..controls (184.33,23.3799) and (184.54,22.1599)..(184.54,22.1599) + --(186.42,22.8098); +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 0bp; +fill (180.22,26.4099)..controls (181.74,28.0598) and (182.67,26.8398)..(184.04,26.1899) + ..controls (185.41,25.5398) and (187.14,25.98)..(186.34,24.97) + ..controls (185.55,23.8899) and (179.72,23.0198)..(179.72,23.3098) + --(179.86,24.6099)--(179.29,25.3999)--(180.22,26.4099) + --cycle; +pickup pencircle scaled 2.23bp; +draw (184.47,25.98)..controls (184.47,26.98) and (184.69,28.21)..(184.69,28.21) + --(186.56,27.6299); +drawoptions (withcolor (0,0,0)); +draw (195.7,34.8298)..controls (195.7,33.75) and (195.92,32.5298)..(195.92,32.5298) + --(197.79,33.1799); +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 0bp; +fill (191.6,36.7798)..controls (193.04,38.5) and (194.05,37.2798)..(195.42,36.6299) + ..controls (196.78,35.9099) and (198.51,36.3398)..(197.72,35.3398) + ..controls (196.86,34.3298) and (191.1,33.46)..(191.1,33.6799) + --(191.24,35.0498)--(190.66,35.7698)--(191.6,36.7798) + --cycle; +pickup pencircle scaled 2.23bp; +draw (195.85,36.3398)..controls (195.85,37.4199) and (196.06,38.6499)..(196.06,38.6499) + --(197.94,38); +drawoptions (withcolor (0,0,0)); +draw (198.44,26.26)..controls (198.44,25.1799) and (198.66,23.96)..(198.66,23.96) + --(200.53,24.6099); +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 0bp; +fill (194.34,28.21)..controls (195.85,29.9399) and (196.78,28.71)..(198.15,28.0598) + ..controls (199.52,27.3398) and (201.25,27.7798)..(200.46,26.7698) + ..controls (199.66,25.76) and (193.83,24.8999)..(193.83,25.1099) + --(193.98,26.48)--(193.4,27.2)--(194.34,28.21) + --cycle; +pickup pencircle scaled 2.23bp; +draw (198.58,27.7798)..controls (198.58,28.8599) and (198.8,30.0798)..(198.8,30.0798) + --(200.67,29.4299); +drawoptions (withcolor (0,0,0)); +draw (157.47,21.0798)..controls (157.47,20) and (157.76,18.7798)..(157.76,18.7798) + --(159.56,19.4199); +drawoptions (withcolor (0.2,0.2,0.2)); +pickup pencircle scaled 0bp; +fill (153.37,23.0198)..controls (154.88,24.75) and (155.82,23.5298)..(157.18,22.8799) + ..controls (158.62,22.1599) and (160.35,22.5898)..(159.49,21.5798) + ..controls (158.7,20.5798) and (152.86,19.71)..(152.86,19.9299) + --(153.01,21.2998)--(152.43,22.0198)--(153.37,23.0198) + --cycle; +pickup pencircle scaled 2.23bp; +draw (157.62,22.5899)..controls (157.62,23.6699) and (157.83,24.8999)..(157.83,24.8999) + --(159.7,24.25); +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 0.86bp; +draw (114.85,113.6)--(114.85,109.71); +draw (124.64,113.6)--(124.64,109.28); +draw (135.01,113.46)--(135.01,109.93); +draw (144.08,113.46)--(144.08,110.07); +pickup pencircle scaled 0bp; +fill (191.38,89.98)--(212.55,83.7898)--(212.55,78.3198) + --(219.39,72.1299)--(218.02,67.3799)--(204.34,74.22) + --(205.06,80.3398)--(192.1,85.8799)--(191.38,89.98) + --cycle; +fill (275.98,73.5)--(263.02,76.95)--(258.27,71.48) + --(250.06,72.8499)--(248.7,67.3799)--(261.01,65.2898) + --(267.13,71.48)--(275.98,68.0999)--(275.98,73.5) + --cycle; +drawoptions (withcolor (0.4,0.4,0.4)); +pickup pencircle scaled 0.86bp; +draw (69.2698,75.5798)--(75.46,76.95); +drawoptions (withcolor (0.3,0.3,0.3)); +draw (98.8599,77.6699)--(105.92,76.5198); +drawoptions (withcolor (0.5,0.5,0.5)); +draw (72.9399,74.1399)--(76.3999,74.6499); +drawoptions (withcolor (0.4,0.4,0.4)); +draw (101.17,75.4399)--(105.63,74.5); +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 0bp; +fill (15.0598,62.3398)--(16.5698,62.3398)..controls (17.0698,62.3398) and (17.4299,62.7)..(17.4299,63.2) + --(17.4299,67.8799)..controls (17.4299,68.3799) and (17.0698,68.74)..(16.5698,68.74) + --(15.0598,68.74)..controls (14.5498,68.74) and (14.1899,68.3799)..(14.1899,67.8799) + --(14.1899,63.2)..controls (14.1899,62.7) and (14.5498,62.3398)..(15.0598,62.3398) + --cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (15.0598,62.3399)--(16.5698,62.3399)..controls (17.0698,62.3399) and (17.4299,62.7)..(17.4299,63.2) + --(17.4299,67.8799)..controls (17.4299,68.3799) and (17.0698,68.74)..(16.5698,68.74) + --(15.0598,68.74)..controls (14.5498,68.74) and (14.1899,68.3799)..(14.1899,67.8799) + --(14.1899,63.2)..controls (14.1899,62.7) and (14.5498,62.3399)..(15.0598,62.3399) + --cycle; +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (13.3298,70.1099)--(18.0098,70.1099)..controls (18.5798,70.1099) and (19.0198,69.6799)..(19.0198,69.1799) + --(19.0198,67.95)..controls (19.0198,67.45) and (18.5798,67.0198)..(18.0098,67.0198) + --(13.3298,67.0198)..controls (12.75,67.0198) and (12.3198,67.45)..(12.3198,67.95) + --(12.3198,69.1799)..controls (12.3198,69.6799) and (12.75,70.1099)..(13.3298,70.1099) + --cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 1.44bp; +draw (13.3298,70.1098)--(18.0098,70.1098)..controls (18.5798,70.1098) and (19.0198,69.6799)..(19.0198,69.1799) + --(19.0198,67.9499)..controls (19.0198,67.45) and (18.5798,67.0198)..(18.0098,67.0198) + --(13.3298,67.0198)..controls (12.75,67.0198) and (12.3198,67.45)..(12.3198,67.9499) + --(12.3198,69.1799)..controls (12.3198,69.6799) and (12.75,70.1098)..(13.3298,70.1098) + --cycle; +drawoptions (withcolor (0.9,0.95,1)); +pickup pencircle scaled 0bp; +fill (62.3599,49.45)--(63.22,49.45)..controls (63.5098,49.45) and (63.73,49.6599)..(63.73,49.95) + --(63.73,52.76)..controls (63.73,53.0498) and (63.5098,53.26)..(63.22,53.26) + --(62.3599,53.26)..controls (62,53.26) and (61.8599,53.0498)..(61.8599,52.76) + --(61.8599,49.95)..controls (61.8599,49.6599) and (62,49.45)..(62.3599,49.45) + --cycle; +drawoptions (withcolor (0,0.2,1)); +pickup pencircle scaled 0.86bp; +draw (62.3599,49.45)--(63.22,49.45)..controls (63.5098,49.45) and (63.73,49.6599)..(63.73,49.95) + --(63.73,52.76)..controls (63.73,53.0498) and (63.5098,53.26)..(63.22,53.26) + --(62.3599,53.26)..controls (62,53.26) and (61.8599,53.0498)..(61.8599,52.76) + --(61.8599,49.95)..controls (61.8599,49.6599) and (62,49.45)..(62.3599,49.45) + --cycle; +drawoptions (withcolor (0.9,0.95,1)); +pickup pencircle scaled 0bp; +fill (61.3499,54.0598)--(64.0898,54.0598)..controls (64.3799,54.0598) and (64.6599,53.8398)..(64.6599,53.48) + --(64.6599,52.8298)..controls (64.6599,52.47) and (64.3799,52.1799)..(64.0898,52.1799) + --(61.3499,52.1799)..controls (60.99,52.1799) and (60.7,52.47)..(60.7,52.8298) + --(60.7,53.48)..controls (60.7,53.8398) and (60.99,54.0598)..(61.3499,54.0598) + --cycle; +drawoptions (withcolor (0,0.2,1)); +pickup pencircle scaled 1.44bp; +draw (61.3499,54.0598)--(64.0899,54.0598)..controls (64.3799,54.0598) and (64.6599,53.8398)..(64.6599,53.48) + --(64.6599,52.8298)..controls (64.6599,52.47) and (64.3799,52.1799)..(64.0899,52.1799) + --(61.3499,52.1799)..controls (60.99,52.1799) and (60.7,52.47)..(60.7,52.8298) + --(60.7,53.48)..controls (60.7,53.8398) and (60.99,54.0598)..(61.3499,54.0598) + --cycle; +drawoptions (withcolor (0.9,0.95,1)); +pickup pencircle scaled 0bp; +fill (118.74,51.46)--(119.6,51.46)..controls (119.89,51.46) and (120.1,51.6099)..(120.1,51.97) + --(120.1,54.7)..controls (120.1,54.99) and (119.89,55.21)..(119.6,55.21) + --(118.74,55.21)..controls (118.38,55.21) and (118.23,54.99)..(118.23,54.7) + --(118.23,51.97)..controls (118.23,51.6099) and (118.38,51.46)..(118.74,51.46) + --cycle; +drawoptions (withcolor (0,0.2,1)); +pickup pencircle scaled 0.86bp; +draw (118.74,51.46)--(119.6,51.46)..controls (119.89,51.46) and (120.1,51.6098)..(120.1,51.97) + --(120.1,54.7)..controls (120.1,54.99) and (119.89,55.21)..(119.6,55.21) + --(118.74,55.21)..controls (118.38,55.21) and (118.23,54.99)..(118.23,54.7) + --(118.23,51.97)..controls (118.23,51.6098) and (118.38,51.46)..(118.74,51.46) + --cycle; +drawoptions (withcolor (0.9,0.95,1)); +pickup pencircle scaled 0bp; +fill (117.73,56)--(120.46,56)..controls (120.75,56) and (120.97,55.7798)..(120.97,55.4199) + --(120.97,54.7798)..controls (120.97,54.49) and (120.75,54.2)..(120.46,54.2) + --(117.73,54.2)..controls (117.37,54.2) and (117.08,54.49)..(117.08,54.7798) + --(117.08,55.4199)..controls (117.08,55.7798) and (117.37,56)..(117.73,56) + --cycle; +drawoptions (withcolor (0,0.2,1)); +pickup pencircle scaled 1.44bp; +draw (117.73,56)--(120.46,56)..controls (120.75,56) and (120.97,55.7798)..(120.97,55.4199) + --(120.97,54.7798)..controls (120.97,54.49) and (120.75,54.2)..(120.46,54.2) + --(117.73,54.2)..controls (117.37,54.2) and (117.08,54.49)..(117.08,54.7798) + --(117.08,55.4199)..controls (117.08,55.7798) and (117.37,56)..(117.73,56) + --cycle; +drawoptions (withcolor (0.6,0.3,0)); +pickup pencircle scaled 0bp; +fill (51.7,90.3398)--(52.7798,90.3398)..controls (53.1399,90.3398) and (53.3599,90.6299)..(53.3599,90.99) + --(53.3599,94.2998)..controls (53.3599,94.6599) and (53.1399,94.8799)..(52.7798,94.8799) + --(51.7,94.8799)..controls (51.3398,94.8799) and (51.1299,94.6599)..(51.1299,94.2998) + --(51.1299,90.99)..controls (51.1299,90.6299) and (51.3398,90.3398)..(51.7,90.3398) + --cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 0.86bp; +draw (51.7,90.3399)--(52.7798,90.3399)..controls (53.1399,90.3399) and (53.3599,90.6299)..(53.3599,90.99) + --(53.3599,94.2998)..controls (53.3599,94.6599) and (53.1399,94.8799)..(52.7798,94.8799) + --(51.7,94.8799)..controls (51.3398,94.8799) and (51.1299,94.6599)..(51.1299,94.2998) + --(51.1299,90.99)..controls (51.1299,90.6299) and (51.3398,90.3399)..(51.7,90.3399) + --cycle; +drawoptions (withcolor (1,1,1)); +pickup pencircle scaled 0bp; +fill (50.48,95.8899)--(53.7898,95.8899)..controls (54.22,95.8899) and (54.5098,95.5999)..(54.5098,95.24) + --(54.5098,94.3799)..controls (54.5098,93.9399) and (54.22,93.6599)..(53.7898,93.6599) + --(50.48,93.6599)..controls (50.1199,93.6599) and (49.8298,93.9399)..(49.8298,94.3799) + --(49.8298,95.24)..controls (49.8298,95.5999) and (50.1199,95.8899)..(50.48,95.8899) + --cycle; +drawoptions (withcolor (0.3,0.3,0.3)); +pickup pencircle scaled 1.44bp; +draw (50.48,95.8899)--(53.7898,95.8899)..controls (54.22,95.8899) and (54.5098,95.5998)..(54.5098,95.24) + --(54.5098,94.3799)..controls (54.5098,93.9399) and (54.22,93.6599)..(53.7898,93.6599) + --(50.48,93.6599)..controls (50.1199,93.6599) and (49.8298,93.9399)..(49.8298,94.3799) + --(49.8298,95.24)..controls (49.8298,95.5998) and (50.1199,95.8899)..(50.48,95.8899) + --cycle; +drawoptions (withcolor (0.2,0.2,0.2)); +draw (53,92.6499)..controls (53,88.8298) and (55.2998,80.4099)..(57.5398,76.8799) + ..controls (59.7698,73.3498) and (63.5798,67.8799)..(63.5798,67.8799); +pickup pencircle scaled 2.02bp; +draw (63.1499,52.26)..controls (63.1499,52.26) and (57.0298,49.5198)..(41.98,52.98) + ..controls (26.9399,56.3599) and (16.8599,66.01)..(15.8498,66.2998); +drawoptions (withcolor (0.9,0,0)); +pickup pencircle scaled 0bp; +fill (87.7,123.46)--(94.5398,123.46)--(94.5398,113.89) + --(87.7,113.89)--(87.7,123.46)--cycle; +endfig; +end diff --git a/doc/context/sources/general/manuals/metafun/metafun-basics.tex b/doc/context/sources/general/manuals/metafun/metafun-basics.tex index 823448acf..27d2f5fdf 100644 --- a/doc/context/sources/general/manuals/metafun/metafun-basics.tex +++ b/doc/context/sources/general/manuals/metafun/metafun-basics.tex @@ -2875,6 +2875,20 @@ The leftmost shape uses \type {eofill} and therefore the odd||even rule gets applied. This time we follow the line and when it gets crossed en even number of times the area will not be filled. +Here is another example: + +\startbuffer +eofill for i=1 upto 12: fullcircle scaled ((i/12)*cm) -- endfor cycle ; +\stopbuffer + +\typebuffer + +The successive larger circle are unfilled and basically form one path: + +\startlinecorrection[blank] +\processMPbuffer +\stoplinecorrection + A glyph is often constructed from more than one path and eventually the shape is filled with an odd||even fill (\type {eofill}) operation. Take the following sequence: diff --git a/doc/context/sources/general/manuals/metafun/metafun-effects.tex b/doc/context/sources/general/manuals/metafun/metafun-effects.tex index d63b36bfa..3c2a3f4cc 100644 --- a/doc/context/sources/general/manuals/metafun/metafun-effects.tex +++ b/doc/context/sources/general/manuals/metafun/metafun-effects.tex @@ -2222,10 +2222,10 @@ The \type {simple} option disables all. The simple results are shown in When you use this feature you need to be aware of the fact that fonts can have features, for instance ligatures and kerns between characters. In \in {figure} -[fig:outlines:features] we see a few examples with and without features, one with -Pagella (the Zapf quote) and one with Optima Nova (the Tufte quote). +[fig:outlines:features] we see a few examples, one with Pagella (the Zapf quote) +and one with Dejavu (the Tufte quote). -\startplacefigure[reference=fig:outlines:features,title={Pagela (\OPENTYPE) and Optima Nova (\TYPEONE)}] +\startplacefigure[reference=fig:outlines:features,title={Pagela and Dejavu}] \startcombination[1*4] \bgroup \def|#1|{-}% @@ -2249,24 +2249,24 @@ Pagella (the Zapf quote) and one with Optima Nova (the Tufte quote). \egroup {pagella / default features} \bgroup \def|#1|{-}% - \definedfont[lt55476.afm*none]% optima nova + \definedfont[dejavuserif.ttf*none]% \startMPcode draw outlinetext.b ("\framed[align=normal,width=max]{\input{tufte}}") (withcolor .375white) (withcolor .625green withpen pencircle scaled 1/10) ; \stopMPcode - \egroup {optima nova / no features} + \egroup {dejavu serif / no features} \bgroup \def|#1|{-}% - \definedfont[lt55476.afm*default]% optima nova + \definedfont[dejavuserif.ttf*default]% \startMPcode draw outlinetext.b ("\framed[align=normal,width=max]{\input{tufte}}") (withcolor .375white) (withcolor .625yellow withpen pencircle scaled 1/10) ; \stopMPcode - \egroup {optima nova / default features} + \egroup {dejavu serif / default features} \stopcombination \stopplacefigure @@ -2287,6 +2287,125 @@ like: \processMPbuffer \stoplinecorrection +The next example needs the \type {hanbatang-lvt.ttf} font so when you process this +you might want to install that first. In \MKIV\ and \LMTX\ you can put that font +in \typ {/texmf-fonts/data/hanbantang} or a similar path. + +We start by defining the font: + +% \definefontfeature +% [korean-base] +% [goodies=hanbatanglvt, +% colorscheme=default, +% mode=node, +% script=hang, +% language=kor] + +\startbuffer +\definefontfeature + [korean-base] + [goodies=hanbatanglvt, + colorscheme=default, + mode=node, + script=hang, + language=kor] + +\definefont[KoreanFont][hanbatanglvt*korean-base] +\stopbuffer + +\typebuffer \getbuffer + +Next we define a macro that will draw the outline: + +\startbuffer +\startMPdefinitions + string KoreanColors[] ; + + KoreanColors[1] := "darkred" ; + KoreanColors[2] := "darkgreen" ; + KoreanColors[3] := "darkblue" ; + KoreanColors[4] := "darkyellow" ; + KoreanColors[5] := "darkgray" ; + + newinternal KoreanSplit ; KoreanSplit := -1 ; + newinternal KoreanCode ; KoreanCode := -2 ; + newinternal KoreanMode ; KoreanMode := KoreanSplit ; + + def KoreanOutline(expr txt) = + picture p ; p := outlinetext.p(txt) ; + numeric n ; n := 0 ; + string old, new ; old := "" ; + for i within p : + if KoreanMode == KoreanSplit : + n := n + 1 ; + elseif KoreanMode == KoreanCode : + new := prescriptpart i ; + if new <> old : + old := new ; + n := n + 1 ; + fi ; + else : + n := KoreanMode ; + fi ; + if unknown KoreanColors[n] : + n := 1 ; + fi ; + draw pathpart i + withpen pencircle scaled 1/10 + withcolor KoreanColors[n] ; + endfor ; + enddef ; + + def KoreanTest(expr txt) = + image ( + KoreanMode := KoreanSplit ; KoreanOutline(txt) ; + currentpicture := currentpicture shifted (- xpart urcorner currentpicture, 0); + KoreanMode := KoreanCode ; KoreanOutline(txt) ; + currentpicture := currentpicture shifted (- xpart urcorner currentpicture, 0); + KoreanMode := 3 ; KoreanOutline(txt) ; + ) + enddef ; +\stopMPdefinitions +\stopbuffer + +Because we want to reuse this definition, we define it for all what comes: + +\typebuffer \getbuffer + +% entered as three characters: ᄅ ᅡ ᆺ (mail collapses) +% +% \startMPcode KoreanTest("\KoreanFont 랏") ; \stopMPcode + +\startbuffer +\startcombination[3*2] + {\startMPcode draw KoreanTest("\KoreanFont 랏") ysized 15mm ; \stopMPcode} {} + {\startMPcode draw KoreanTest("\KoreanFont 논") ysized 15mm ; \stopMPcode} {} + {\startMPcode draw KoreanTest("\KoreanFont 왕") ysized 15mm ; \stopMPcode} {} + {\startMPcode draw KoreanTest("\KoreanFont 닭") ysized 15mm ; \stopMPcode} {} + {\startMPcode draw KoreanTest("\KoreanFont 박") ysized 15mm ; \stopMPcode} {} + {\startMPcode draw KoreanTest("\KoreanFont 서") ysized 15mm ; \stopMPcode} {} +\stopcombination +\stopbuffer + +We use this macro in the following example. The results can be seen in \in +{figure} [koreanoutlines]. There is one drawback of this example: It contributes +a lot to the runtime: about 2.5~seconds to a 16~second run without this example. +\footnote {This is partly due to an enforced intermediate garbage collection +step.} The font itself loads fast but the outlines take their time because a few +hundred megabytes of \LUA\ tables are involved. Instead you can define the +feature to use \typ {goodies=hanbatanglvt} and \typ {colorscheme=default} and +play with that. + +\typebuffer + +\startplacefigure[title=Some Korean magic,reference=koreanoutlines] + \doifelsemode{optional} { + \getbuffer + } { + \framed{A large optional example is not shown here!} + } +\stopplacefigure + \stopsection \startsection[title=Transparency groups] diff --git a/doc/context/sources/general/manuals/metafun/metafun-environment-layout.tex b/doc/context/sources/general/manuals/metafun/metafun-environment-layout.tex index 409839cba..8a30aad7c 100644 --- a/doc/context/sources/general/manuals/metafun/metafun-environment-layout.tex +++ b/doc/context/sources/general/manuals/metafun/metafun-environment-layout.tex @@ -71,9 +71,11 @@ \setuppagenumbering [alternative=doublesided] +\definefontfallback[moremono] [dejavusansmono] [0x0000-0xFFFF] [rscale=0.85] + \definetypeface [metafunbodyfont] [rm] [serif] [pagella] [default] \definetypeface [metafunbodyfont] [ss] [sans] [modern] [default] -\definetypeface [metafunbodyfont] [tt] [mono] [modern] [default] +\definetypeface [metafunbodyfont] [tt] [mono] [modern] [default] [fallbacks=moremono] \definetypeface [metafunbodyfont] [mm] [math] [palatino] [default] \setupbodyfont [metafunbodyfont,10pt] % 11 pt and 12pt -> errors due to intersection mess diff --git a/doc/context/sources/general/manuals/metafun/metafun-introduction.tex b/doc/context/sources/general/manuals/metafun/metafun-introduction.tex index b519055c0..e2c33f6f3 100644 --- a/doc/context/sources/general/manuals/metafun/metafun-introduction.tex +++ b/doc/context/sources/general/manuals/metafun/metafun-introduction.tex @@ -88,6 +88,15 @@ they are. Therefore this manual presents different ways to solve problems. Hopefully this is not too confusing. Numerous examples can be found in the other manuals and test suite. +The first version of \METAFUN\ evolved in \CONTEXT\ \MKII, and when we moved to +\MKIV\ some interfaces (especially the extensions) could be made better. We now +have \LMTX\ so we can make even those better (and often easier). The downside is +that some features discussed here won't work in \MKII\ and \MKIV. If you run into +that, just consider updating to \LMTX. The current version should process okay +with the latest version; thanks to Otared Kavian for keeping an eye on that and +posting me possible issues. The real new features are part of what is to become +\LUAMETAFUN, but for that we have a separate manual. + \blank[big,samepage] \startlines diff --git a/doc/context/sources/general/manuals/metafun/metafun-lua.tex b/doc/context/sources/general/manuals/metafun/metafun-lua.tex index bd33109b0..7cd915005 100644 --- a/doc/context/sources/general/manuals/metafun/metafun-lua.tex +++ b/doc/context/sources/general/manuals/metafun/metafun-lua.tex @@ -1173,8 +1173,47 @@ the same name defined. \stopsection -% \startsection[title=Large paths] -% +\startsection[title=Accessing paths] + +A path in \METAPOST\ is internally a linked list of knots and each knot has a +coordinate and two control points. Access to specific points of very large path +can be somewhat slow. First of all, the lookup start at the beginning and when +you use fractions (say halfway between point 4 and 5) the engine has to find the +spot. For this (and other reasons not mentioned here) we have a way to access +paths different, using \LUA\ behind the scenes. + +\startbuffer +path p ; p := fullcircle xysized (4cm,2cm) ; +for i inpath p: + drawdot leftof i withpen pencircle scaled 2mm withcolor darkred ; + drawdot pointof i withpen pencircle scaled 3mm withcolor darkgreen ; + drawdot rightof i withpen pencircle scaled 2mm withcolor darkblue ; +endfor ; +draw for i inpath p: + pointof i .. controls (leftof i) and (rightof i) .. +endfor cycle withpen pencircle scaled .5mm withcolor white ; + +p := p shifted (5cm,0) ; +draw for i inpath p: + pointof i -- +endfor cycle withpen pencircle scaled .5mm withcolor .5white ; +for i inpath p: + drawdot pointof i withpen pencircle scaled 3mm withcolor darkgreen ; +endfor ; +\stopbuffer + +\typebuffer + +Here we access the main coordinate and the two control points. The last draw is of course +just mimicking drawing the path. + +\startlinecorrection[blank] +\processMPbuffer +\stoplinecorrection + + +\stopsection + % The plugins (like those dealing with text) also use calls in the \type {mp} % namespace but they have sort of protected names, starting with \type {mf_}. These % are visible but not meant to be used by users. Not only can their name change, diff --git a/doc/context/sources/general/manuals/metafun/metafun-reference.tex b/doc/context/sources/general/manuals/metafun/metafun-reference.tex index 7803faea5..bc59218b0 100644 --- a/doc/context/sources/general/manuals/metafun/metafun-reference.tex +++ b/doc/context/sources/general/manuals/metafun/metafun-reference.tex @@ -645,6 +645,23 @@ defineshade cshade withshademethod "circular" ; \stopsection +\startsection[title={Access}] + +\ShowSampleW + {mm} {leftof n} + {for i inpath fullcircle : drawdot leftof i ; endfor} + {for i inpath fullcircle xsized 3cm: drawdot leftof i withpen pencircle scaled 2mm InRed ; endfor} +\ShowSampleW + {mm} {pointof n} + {for i inpath fullcircle : drawdot pointof i ; endfor} + {for i inpath fullcircle xsized 3cm: drawdot pointof i withpen pencircle scaled 2mm InYellow ; endfor} +\ShowSampleW + {mm} {rightof n} + {for i inpath fullcircle : drawdot rightof i ; endfor} + {for i inpath fullcircle xsized 3cm: drawdot rightof i withpen pencircle scaled 2mm InRed ; endfor} + +\stopsection + \stopchapter \stopcomponent diff --git a/doc/context/sources/general/manuals/metafun/metafun-styles.tex b/doc/context/sources/general/manuals/metafun/metafun-styles.tex index f82359117..6de9a54da 100644 --- a/doc/context/sources/general/manuals/metafun/metafun-styles.tex +++ b/doc/context/sources/general/manuals/metafun/metafun-styles.tex @@ -189,14 +189,14 @@ what lines we need in order to be calculate the button shapes. \placefigure [here][fig:style] {The lines used to calculate the button shapes.} - {\externalfigure[mfun-774.pdf][page=1,height=.85\textheight]} + {\typesetfile[mfun-774.tex][page=1,height=.85\textheight]} \stopmode \startnotmode[screen] \placefigure [here][fig:style] {The auxiliary lines used to calculate the button shapes.} - {\rotate{\externalfigure[mfun-774.pdf][page=1,height=\textwidth]}} + {\rotate{\typesetfile[mfun-774.tex][page=1,height=\textwidth]}} \stopnotmode \page diff --git a/doc/context/sources/general/manuals/metafun/metafun-welcome.tex b/doc/context/sources/general/manuals/metafun/metafun-welcome.tex index 425d15796..725d03756 100644 --- a/doc/context/sources/general/manuals/metafun/metafun-welcome.tex +++ b/doc/context/sources/general/manuals/metafun/metafun-welcome.tex @@ -3497,6 +3497,70 @@ line properties. \stopsection +\startsection[title={\UTF8}] + +The \METAPOST\ library used in \LUATEX\ and \LUAMETATEX\ supports \UTF8\ input. +Actually there is not much magic needed to do this because all the engine in +interested in is bytes and some just have a special meaning (like parenthesis, +symbols that have a meaning in formulas etc). + +\startbuffer +save p ; pen p ; p := currentpen ; +pickup pencircle scaled .05; + +picture ○ ; ○ := image (draw fullcircle) ; +picture ◎ ; ◎ := image (draw fullcircle ; draw fullcircle scaled .5) ; + +draw ◎ ysized 2cm withcolor darkblue ; +draw ○ xsized 2cm shifted (3cm,0) withcolor darkgreen ; +draw ○ xysized (3cm,2cm) shifted (7cm,0) withcolor darkred ; +\stopbuffer + +\typebuffer + +Here we use a \UTF8\ encoded character as macro name and the next image +demonstrate that it does work indeed: + +\startlinecorrection[blank] \processMPbuffer \stoplinecorrection + +You can do crazy things like use emoji for special operators + +\startbuffer +def ✏ = withpen pencircle enddef ; +def ✖️ = scaled enddef ; +fill fullsquare ✖️ 1cm ✏ ✖️ 1mm withcolor darkgray ; +draw fullsquare ✖️ 1cm ✏ ✖️ 1mm withcolor darkblue ; +\stopbuffer + +\typebuffer + +But do we really want to go there? + +\startlinecorrection[blank] \processMPbuffer \stoplinecorrection + +Normally using \UTF8\ makes more sense in text or regular macro names, so if you +want to use accented characters it is possible: + +\startbuffer +def rændömîzèd = randomized 1/10 enddef ; + +draw textext ("\strut rændömîzèd") ; +draw boundingbox currentpicture rændömîzèd + enlarged 2mm + withpen pencircle scaled 1mm + withcolor darkgreen ; +\stopbuffer + +\typebuffer + +\page[preference] + +it really does work: + +\startlinecorrection[blank] \processMPbuffer \stoplinecorrection + +\stopsection + \stopchapter \stopcomponent diff --git a/doc/context/sources/general/manuals/metafun/metafun.tex b/doc/context/sources/general/manuals/metafun/metafun.tex index 963d1fad0..b7bc30a80 100644 --- a/doc/context/sources/general/manuals/metafun/metafun.tex +++ b/doc/context/sources/general/manuals/metafun/metafun.tex @@ -35,7 +35,9 @@ % with compact fonts). So we can safely conclude that we're not worse off with % respect to performance. (I use the same machine.) -\enableexperiments[fonts.compact] +% \enableexperiments[fonts.compact] + +% \enablemode[optional] % \enablemode[screen] \enablemode[print] diff --git a/doc/context/sources/general/manuals/musings/musings-style.tex b/doc/context/sources/general/manuals/musings/musings-style.tex index 5ed934f2f..a85960bdd 100644 --- a/doc/context/sources/general/manuals/musings/musings-style.tex +++ b/doc/context/sources/general/manuals/musings/musings-style.tex @@ -43,12 +43,15 @@ \hss % title #2 - \doifmode {*sectionnumber} { - % distance - \hskip10mm - % number - \struttedbox{\offset[x=-1mm,y=2.5mm]{\scale[height=2cm]{#1}}} - } + % \ifnum\getsomestructurenumber{\currentstructurelevel}{last}>\plusone + \ifnum\somenamedheadnumber{chapter}{last}>\plusone + \doifmode {*sectionnumber} { + % distance + \hskip10mm + % number + \struttedbox{\offset[x=-1mm,y=2.5mm]{\scale[height=2cm]{#1}}} + } + \fi } \stoptexdefinition diff --git a/metapost/context/base/mpxl/mp-blob.mpxl b/metapost/context/base/mpxl/mp-blob.mpxl index c6b0843b5..555578114 100644 --- a/metapost/context/base/mpxl/mp-blob.mpxl +++ b/metapost/context/base/mpxl/mp-blob.mpxl @@ -53,14 +53,15 @@ vardef followtext(expr pth, txt) = image ( mfun_blob_n := mfun_blob_n + 1 ; lua.mp.mf_inject_blob(mfun_blob_n,txt); - save pat, al, at, pl, pc, wid, pos, ap, ad, pic, len, n, b, sc ; + save pat, al, at, pl, pc, wid, pos, ap, ad, pic, len, n, b, sc, sb ; path pat, b ; pat := pth ; - numeric al, at, pl, pc, wid, pos, len[], n, sc ; + numeric al, at, pl, pc, wid, pos, len[], n, sc, sb ; pair ap, ad ; picture pic[] ; len[0] := 0 ; n := lua.mp.mf_blob_size(mfun_blob_n) ; sc := 0 ; + sb := .25pt; for i=1 upto n : pic[i] := mfun_inject_blob(i) ; pic[i] := pic[i] shifted - llcorner pic[i] ; @@ -105,10 +106,11 @@ vardef followtext(expr pth, txt) = endfor ; if ((autoscaleupfollowtext = 2) or (autoscaledownfollowtext = 2)) and (sc <> 0) and (sc <> 1): currentpicture := currentpicture scaled (1/sc) ; + sb := 2 * sb / sc ; fi ; b := boundingbox currentpicture ; if tracingfollowtext = 1 : - draw b withpen pencircle scaled .25pt withcolor blue ; + draw b withpen pencircle scaled sb withcolor blue ; fi ; draw fullcircle scaled 100bp withprescript "mf_object=followtext" diff --git a/metapost/context/base/mpxl/mp-lmtx.mpxl b/metapost/context/base/mpxl/mp-lmtx.mpxl index 3a6028954..2835dc89a 100644 --- a/metapost/context/base/mpxl/mp-lmtx.mpxl +++ b/metapost/context/base/mpxl/mp-lmtx.mpxl @@ -2368,3 +2368,36 @@ permanent mpvar ; % for old times sake (metafun manual) vardef textual primary p = false enddef ; + +% also for the menafun manual: + +newscriptindex mfid_labtorgb ; mfid_labtorgb := scriptindex "labtorgb" ; + +def labtorgb(expr l,a,b) = runscript mfid_labtorgb l a b enddef ; + +permanent labtorgb ; + +presetparameters "labtorgb" [ + mina = -100, + maxa = 100, + minb = -100, + maxb = 100, + step = 5, + l = 50, +] ; + +def lmt_labtorgb = applyparameters "labtorgb" "lmt_do_labtorgb" enddef ; + +vardef lmt_do_labtorgb = + image ( + pushparameters "labtorgb" ; + save l ; l := getparameter "l" ; + for a = getparameter "mina" step getparameter "step" until getparameter "maxa" : + for b = getparameter "minb" step getparameter "step" until getparameter "maxb" : + % draw (a,b) withcolor labtorgb(l,a,b) ; + draw (a,b) withcolor runscript mfid_labtorgb l a b ; + endfor ; + endfor ; + popparameters ; + ) +enddef ; diff --git a/metapost/context/base/mpxl/mp-luas.mpxl b/metapost/context/base/mpxl/mp-luas.mpxl index 05f7cef05..3e99ae7f7 100644 --- a/metapost/context/base/mpxl/mp-luas.mpxl +++ b/metapost/context/base/mpxl/mp-luas.mpxl @@ -154,10 +154,12 @@ newscriptindex mfid_getdimen ; mfid_getdimen := scriptindex "getdimen" ; def get newscriptindex mfid_getcount ; mfid_getcount := scriptindex "getcount" ; def getcount = runscript mfid_getcount enddef ; newscriptindex mfid_gettoks ; mfid_gettoks := scriptindex "gettoks" ; def gettoks = runscript mfid_gettoks enddef ; -newscriptindex mfid_setmacro ; mfid_setmacro := scriptindex "setmacro" ; def setmacro = runscript mfid_setmacro enddef ; -newscriptindex mfid_setdimen ; mfid_setdimen := scriptindex "setdimen" ; def setdimen = runscript mfid_setdimen enddef ; -newscriptindex mfid_setcount ; mfid_setcount := scriptindex "setcount" ; def setcount = runscript mfid_setcount enddef ; -newscriptindex mfid_settoks ; mfid_settoks := scriptindex "settoks" ; def settoks = runscript mfid_settoks enddef ; +% todo: figure out a mixed interface: setdimen "foo" 123pt ; setdimen("foo", 123pt) ; + +newscriptindex mfid_setmacro ; mfid_setmacro := scriptindex "setmacro" ; def setmacro(expr k, v) = runscript mfid_setmacro k v ; enddef ; +newscriptindex mfid_setdimen ; mfid_setdimen := scriptindex "setdimen" ; def setdimen(expr k, v) = runscript mfid_setdimen k v ; enddef ; +newscriptindex mfid_setcount ; mfid_setcount := scriptindex "setcount" ; def setcount(expr k, v) = runscript mfid_setcount k v ; enddef ; +newscriptindex mfid_settoks ; mfid_settoks := scriptindex "settoks" ; def settoks (expr k, v) = runscript mfid_settoks k v ; enddef ; permanent getmacro, getdimen, getcount, gettoks, setmacro, setdimen, setcount, settoks ; diff --git a/metapost/context/base/mpxl/mp-mlib.mpxl b/metapost/context/base/mpxl/mp-mlib.mpxl index ff733ce24..ce0d14b41 100644 --- a/metapost/context/base/mpxl/mp-mlib.mpxl +++ b/metapost/context/base/mpxl/mp-mlib.mpxl @@ -1135,7 +1135,7 @@ vardef mfun_do_outline_text_flush (expr kind, n, x, y, c) (text t) = enddef ; vardef mfun_do_outline_rule_flush (expr kind, x, y, w, h) = -% mfun_do_outline_text_flush (kind, 1, x, y, "") (fullsquare xyscaled(w,h)) + % mfun_do_outline_text_flush (kind, 1, x, y, "") (fullsquare xyscaled(w,h)) mfun_do_outline_text_flush (kind, 1, x, y, "") (unitsquare xyscaled(w,h)) enddef ; diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index 274de2553..588b8e7fd 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -21423,7 +21423,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-tmp"] = package.loaded["data-tmp"] or true --- original size: 16099, stripped down to: 11379 +-- original size: 16409, stripped down to: 11591 if not modules then modules={} end modules ['data-tmp']={ version=1.100, @@ -21673,7 +21673,10 @@ caches.getwritablepath=getwritablepath caches.setfirstwritablefile=setfirstwritablefile caches.getfirstreadablefile=getfirstreadablefile caches.setluanames=setluanames +local checkmemory=utilities and utilities.lua and utilities.lua.checkmemory +local threshold=100 function caches.loaddata(readables,name,writable) + local used=checkmemory and checkmemory() if type(readables)=="string" then readables={ readables } end @@ -21700,7 +21703,11 @@ function caches.loaddata(readables,name,writable) end if loader then loader=loader() - collectgarbage("step") + if checkmemory then + checkmemory(used,threshold) + else + collectgarbage("step") + end return loader end end @@ -23799,7 +23806,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-fil"] = package.loaded["data-fil"] or true --- original size: 4365, stripped down to: 3588 +-- original size: 4365, stripped down to: 3452 if not modules then modules={} end modules ['data-fil']={ version=1.001, @@ -23819,7 +23826,6 @@ local scanfiles=resolvers.scanfiles local registerfilehash=resolvers.registerfilehash local appendhash=resolvers.appendhash local loadcachecontent=caches.loadcontent -local checkgarbage=utilities.garbagecollector and utilities.garbagecollector.check function resolvers.locators.file(specification) local filename=specification.filename local realname=resolveprefix(filename) @@ -23909,10 +23915,7 @@ function loaders.file(specification,filetype) if trace_locating then report_files("file loader: %a loaded",filename) end - local s=f:read("*a") - if checkgarbage then - checkgarbage(#s) - end + local s=f:read("*a") f:close() if s then return true,s,#s @@ -25776,8 +25779,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1023710 --- stripped bytes : 404796 +-- original bytes : 1024020 +-- stripped bytes : 405030 -- end library merge diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua index 274de2553..588b8e7fd 100644 --- a/scripts/context/stubs/mswin/mtxrun.lua +++ b/scripts/context/stubs/mswin/mtxrun.lua @@ -21423,7 +21423,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-tmp"] = package.loaded["data-tmp"] or true --- original size: 16099, stripped down to: 11379 +-- original size: 16409, stripped down to: 11591 if not modules then modules={} end modules ['data-tmp']={ version=1.100, @@ -21673,7 +21673,10 @@ caches.getwritablepath=getwritablepath caches.setfirstwritablefile=setfirstwritablefile caches.getfirstreadablefile=getfirstreadablefile caches.setluanames=setluanames +local checkmemory=utilities and utilities.lua and utilities.lua.checkmemory +local threshold=100 function caches.loaddata(readables,name,writable) + local used=checkmemory and checkmemory() if type(readables)=="string" then readables={ readables } end @@ -21700,7 +21703,11 @@ function caches.loaddata(readables,name,writable) end if loader then loader=loader() - collectgarbage("step") + if checkmemory then + checkmemory(used,threshold) + else + collectgarbage("step") + end return loader end end @@ -23799,7 +23806,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-fil"] = package.loaded["data-fil"] or true --- original size: 4365, stripped down to: 3588 +-- original size: 4365, stripped down to: 3452 if not modules then modules={} end modules ['data-fil']={ version=1.001, @@ -23819,7 +23826,6 @@ local scanfiles=resolvers.scanfiles local registerfilehash=resolvers.registerfilehash local appendhash=resolvers.appendhash local loadcachecontent=caches.loadcontent -local checkgarbage=utilities.garbagecollector and utilities.garbagecollector.check function resolvers.locators.file(specification) local filename=specification.filename local realname=resolveprefix(filename) @@ -23909,10 +23915,7 @@ function loaders.file(specification,filetype) if trace_locating then report_files("file loader: %a loaded",filename) end - local s=f:read("*a") - if checkgarbage then - checkgarbage(#s) - end + local s=f:read("*a") f:close() if s then return true,s,#s @@ -25776,8 +25779,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1023710 --- stripped bytes : 404796 +-- original bytes : 1024020 +-- stripped bytes : 405030 -- end library merge diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun index 274de2553..588b8e7fd 100644 --- a/scripts/context/stubs/unix/mtxrun +++ b/scripts/context/stubs/unix/mtxrun @@ -21423,7 +21423,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-tmp"] = package.loaded["data-tmp"] or true --- original size: 16099, stripped down to: 11379 +-- original size: 16409, stripped down to: 11591 if not modules then modules={} end modules ['data-tmp']={ version=1.100, @@ -21673,7 +21673,10 @@ caches.getwritablepath=getwritablepath caches.setfirstwritablefile=setfirstwritablefile caches.getfirstreadablefile=getfirstreadablefile caches.setluanames=setluanames +local checkmemory=utilities and utilities.lua and utilities.lua.checkmemory +local threshold=100 function caches.loaddata(readables,name,writable) + local used=checkmemory and checkmemory() if type(readables)=="string" then readables={ readables } end @@ -21700,7 +21703,11 @@ function caches.loaddata(readables,name,writable) end if loader then loader=loader() - collectgarbage("step") + if checkmemory then + checkmemory(used,threshold) + else + collectgarbage("step") + end return loader end end @@ -23799,7 +23806,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-fil"] = package.loaded["data-fil"] or true --- original size: 4365, stripped down to: 3588 +-- original size: 4365, stripped down to: 3452 if not modules then modules={} end modules ['data-fil']={ version=1.001, @@ -23819,7 +23826,6 @@ local scanfiles=resolvers.scanfiles local registerfilehash=resolvers.registerfilehash local appendhash=resolvers.appendhash local loadcachecontent=caches.loadcontent -local checkgarbage=utilities.garbagecollector and utilities.garbagecollector.check function resolvers.locators.file(specification) local filename=specification.filename local realname=resolveprefix(filename) @@ -23909,10 +23915,7 @@ function loaders.file(specification,filetype) if trace_locating then report_files("file loader: %a loaded",filename) end - local s=f:read("*a") - if checkgarbage then - checkgarbage(#s) - end + local s=f:read("*a") f:close() if s then return true,s,#s @@ -25776,8 +25779,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1023710 --- stripped bytes : 404796 +-- original bytes : 1024020 +-- stripped bytes : 405030 -- end library merge diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua index 274de2553..588b8e7fd 100644 --- a/scripts/context/stubs/win64/mtxrun.lua +++ b/scripts/context/stubs/win64/mtxrun.lua @@ -21423,7 +21423,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-tmp"] = package.loaded["data-tmp"] or true --- original size: 16099, stripped down to: 11379 +-- original size: 16409, stripped down to: 11591 if not modules then modules={} end modules ['data-tmp']={ version=1.100, @@ -21673,7 +21673,10 @@ caches.getwritablepath=getwritablepath caches.setfirstwritablefile=setfirstwritablefile caches.getfirstreadablefile=getfirstreadablefile caches.setluanames=setluanames +local checkmemory=utilities and utilities.lua and utilities.lua.checkmemory +local threshold=100 function caches.loaddata(readables,name,writable) + local used=checkmemory and checkmemory() if type(readables)=="string" then readables={ readables } end @@ -21700,7 +21703,11 @@ function caches.loaddata(readables,name,writable) end if loader then loader=loader() - collectgarbage("step") + if checkmemory then + checkmemory(used,threshold) + else + collectgarbage("step") + end return loader end end @@ -23799,7 +23806,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-fil"] = package.loaded["data-fil"] or true --- original size: 4365, stripped down to: 3588 +-- original size: 4365, stripped down to: 3452 if not modules then modules={} end modules ['data-fil']={ version=1.001, @@ -23819,7 +23826,6 @@ local scanfiles=resolvers.scanfiles local registerfilehash=resolvers.registerfilehash local appendhash=resolvers.appendhash local loadcachecontent=caches.loadcontent -local checkgarbage=utilities.garbagecollector and utilities.garbagecollector.check function resolvers.locators.file(specification) local filename=specification.filename local realname=resolveprefix(filename) @@ -23909,10 +23915,7 @@ function loaders.file(specification,filetype) if trace_locating then report_files("file loader: %a loaded",filename) end - local s=f:read("*a") - if checkgarbage then - checkgarbage(#s) - end + local s=f:read("*a") f:close() if s then return true,s,#s @@ -25776,8 +25779,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1023710 --- stripped bytes : 404796 +-- original bytes : 1024020 +-- stripped bytes : 405030 -- end library merge diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index a28d32bd4..6c083cd0b 100644 --- a/tex/context/base/mkii/cont-new.mkii +++ b/tex/context/base/mkii/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2021.02.20 16:46} +\newcontextversion{2021.02.23 17:41} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii index 845a90e47..4b20c792e 100644 --- a/tex/context/base/mkii/context.mkii +++ b/tex/context/base/mkii/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2021.02.20 16:46} +\edef\contextversion{2021.02.23 17:41} %D For those who want to use this: diff --git a/tex/context/base/mkiv/colo-icc.lua b/tex/context/base/mkiv/colo-icc.lua index 06a913e17..f523e870e 100644 --- a/tex/context/base/mkiv/colo-icc.lua +++ b/tex/context/base/mkiv/colo-icc.lua @@ -119,3 +119,110 @@ function colors.iccprofile(filename,verbose) report_colors("profile %a loaded",fullname) return profile, true end + +-- This is just some fun stuff I decided to check out when I was making sure that +-- the 2020 metafun manual could be processed with lmtx 2021. Color conversion has +-- been part of ConTeXt from the start but it has been extended to the less commonly +-- used color spaces. We already do some CIE but didn't have lab converters to play +-- with (although I had some MetaPost done for a friend long ago). So, when we moved +-- to lmtx it made sense to also move some into the core. When searching for info +-- I ran into some formulas for lab/xyz: http://www.easyrgb.com/en/math.php and +-- http://www.brucelindbloom.com/ are useful resources. I didn't touch existing +-- code (as it works ok). +-- +-- local illuminants = { -- 2=CIE 1931 10=CIE 1964 +-- A = { [2] = { 109.850, 100, 35.585 }, [10] = { 111.144, 100, 35.200 } }, -- incandescent/tungsten +-- B = { [2] = { 99.093, 100, 85.313 }, [10] = { 99.178, 100, 84.349 } }, -- old direct sunlight at noon +-- C = { [2] = { 98.074, 100, 118.232 }, [10] = { 97.285, 100, 116.145 } }, -- old daylight +-- D50 = { [2] = { 96.422, 100, 82.521 }, [10] = { 96.720, 100, 81.427 } }, -- icc profile pcs +-- D55 = { [2] = { 95.682, 100, 92.149 }, [10] = { 95.799, 100, 90.926 } }, -- mid-morning daylight +-- D65 = { [2] = { 95.047, 100, 108.883 }, [10] = { 94.811, 100, 107.304 } }, -- daylight, srgb, adobe-rgb +-- D75 = { [2] = { 94.972, 100, 122.638 }, [10] = { 94.416, 100, 120.641 } }, -- north sky daylight +-- E = { [2] = { 100.000, 100, 100.000 }, [10] = { 100.000, 100, 100.000 } }, -- equal energy +-- F1 = { [2] = { 92.834, 100, 103.665 }, [10] = { 94.791, 100, 103.191 } }, -- daylight fluorescent +-- F2 = { [2] = { 99.187, 100, 67.395 }, [10] = { 103.280, 100, 69.026 } }, -- cool fluorescent +-- F3 = { [2] = { 103.754, 100, 49.861 }, [10] = { 108.968, 100, 51.965 } }, -- white fluorescent +-- F4 = { [2] = { 109.147, 100, 38.813 }, [10] = { 114.961, 100, 40.963 } }, -- warm white fluorescent +-- F5 = { [2] = { 90.872, 100, 98.723 }, [10] = { 93.369, 100, 98.636 } }, -- daylight fluorescent +-- F6 = { [2] = { 97.309, 100, 60.191 }, [10] = { 102.148, 100, 62.074 } }, -- lite white fluorescent +-- F7 = { [2] = { 95.044, 100, 108.755 }, [10] = { 95.792, 100, 107.687 } }, -- daylight fluorescent, d65 simulator +-- F8 = { [2] = { 96.413, 100, 82.333 }, [10] = { 97.115, 100, 81.135 } }, -- sylvania f40, d50 simulator +-- F9 = { [2] = { 100.365, 100, 67.868 }, [10] = { 102.116, 100, 67.826 } }, -- cool white fluorescent +-- F10 = { [2] = { 96.174, 100, 81.712 }, [10] = { 99.001, 100, 83.134 } }, -- ultralume 50, philips tl85 +-- F11 = { [2] = { 100.966, 100, 64.370 }, [10] = { 103.866, 100, 65.627 } }, -- ultralume 40, philips tl84 +-- F12 = { [2] = { 108.046, 100, 39.228 }, [10] = { 111.428, 100, 40.353 } }, -- ultralume 30, philips tl83 +-- } +-- +-- local D65 = illuminants.D65 +-- local D652 = { 95.047, 100, 108.883 } +-- +-- local function labref(illuminate,observer) +-- local r = illuminants[illuminant or "D65"] or D65 +-- return r[observer or 2] or r[2] or D652 +-- end +-- +-- This is hardly useful but nice for metafun demos: + +local D652 = { 95.047, 100, 108.883 } + +local function xyztolab(x,y,z,mapping) + if not mapping then + mapping = D652 + end + x = x / mapping[1] + y = y / mapping[2] + z = z / mapping[3] + x = (x > 0.008856) and x^(1/3) or (7.787 * x) + (16/116) + y = (y > 0.008856) and y^(1/3) or (7.787 * y) + (16/116) + z = (z > 0.008856) and z^(1/3) or (7.787 * z) + (16/116) + return + 116 * y - 16, + 500 * (x - y), + 200 * (y - z) +end + +local function labtoxyz(l,a,b,mapping) + if not mapping then + mapping = D652 + end + local y = (l + 16) / 116 + local x = a / 500 + y + local z = y - b / 200 + return + mapping[1] * ((x^3 > 0.008856) and x^3 or (x - 16/116) / 7.787), + mapping[2] * ((y^3 > 0.008856) and y^3 or (y - 16/116) / 7.787), + mapping[3] * ((z^3 > 0.008856) and z^3 or (z - 16/116) / 7.787) +end + +local function xyztorgb(x,y,z) -- D65/2° + local r = (x * 3.2404542 + y * -1.5371385 + z * -0.4985314) / 100 + local g = (x * -0.9692660 + y * 1.8760108 + z * 0.0415560) / 100 + local b = (x * 0.0556434 + y * -0.2040259 + z * 1.0572252) / 100 + r = (r > 0.0031308) and (1.055 * r^(1/2.4) - 0.055) or (12.92 * r) + g = (g > 0.0031308) and (1.055 * g^(1/2.4) - 0.055) or (12.92 * g) + b = (b > 0.0031308) and (1.055 * b^(1/2.4) - 0.055) or (12.92 * b) + if r < 0 then r = 0 elseif r > 1 then r = 1 end + if g < 0 then g = 0 elseif g > 1 then g = 1 end + if b < 0 then b = 0 elseif b > 1 then b = 1 end + return r, g, b +end + +local function rgbtoxyz(r,g,b) + r = 100 * ((r > 0.04045) and ((r + 0.055)/1.055)^2.4 or (r / 12.92)) + g = 100 * ((g > 0.04045) and ((g + 0.055)/1.055)^2.4 or (g / 12.92)) + b = 100 * ((b > 0.04045) and ((b + 0.055)/1.055)^2.4 or (b / 12.92)) + return + r * 0.4124 + g * 0.3576 + b * 0.1805, + r * 0.2126 + g * 0.7152 + b * 0.0722, + r * 0.0193 + g * 0.1192 + b * 0.9505 +end + +local function labtorgb(l,a,b,mapping) + return xyztorgb(labtoxyz(l,a,b,mapping)) +end + +colors.xyztolab = xyztolab +colors.labtoxyz = labtoxyz +colors.xyztorgb = xyztorgb +colors.rgbtoxyz = rgbtoxyz +colors.labtorgb = labtorgb diff --git a/tex/context/base/mkiv/cont-log.mkiv b/tex/context/base/mkiv/cont-log.mkiv index 3dbfdc604..a6cd1cc2f 100644 --- a/tex/context/base/mkiv/cont-log.mkiv +++ b/tex/context/base/mkiv/cont-log.mkiv @@ -149,25 +149,29 @@ \def\syst_logos_meta_hyphen % there is no hyphenchar in this font {\discretionary{\vrule\s!height.33\emwidth\s!depth-.27\emwidth\s!width.33\emwidth}{}{}} -\unexpanded\def\MetaFont +\unexpanded\def\MetaFontLogo {\dontleavehmode \begingroup \setMFPfont META\syst_logos_meta_hyphen FONT% \endgroup} -% \unexpanded\def\MetaPost +\unexpanded\def\MetaPostLogo + {\dontleavehmode + \begingroup + \setMFPfont META\syst_logos_meta_hyphen POST% + \endgroup} + +% \protected\def\MetaFunLogo % {\dontleavehmode % \begingroup -% \setMFPfont META\syst_logos_meta_hyphen POST% +% \setMFPfont META\syst_logos_meta_hyphen FUN% % \endgroup} -% -% As decided on the ConText Meeting 2013 the logo has been simplified: -\unexpanded\def\MetaPost - {MetaPost} +% As decided on the ConText Meeting 2013 the logo has been simplified: -\unexpanded\def\MetaFun - {MetaFun} +\unexpanded\def\MetaFont{MetaFont} +\unexpanded\def\MetaPost{MetaPost} +\unexpanded\def\MetaFun {MetaFun} %D \macros %D {TEX, METAFONT, METAPOST, METAFUN, diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index 9569ad872..60bb0d85d 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2021.02.20 16:46} +\newcontextversion{2021.02.23 17:41} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index bcb398971..b5d86869c 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -45,7 +45,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2021.02.20 16:46} +\edef\contextversion{2021.02.23 17:41} %D Kind of special: diff --git a/tex/context/base/mkiv/data-fil.lua b/tex/context/base/mkiv/data-fil.lua index bbcc954b2..8dbc8a0d2 100644 --- a/tex/context/base/mkiv/data-fil.lua +++ b/tex/context/base/mkiv/data-fil.lua @@ -22,7 +22,7 @@ local appendhash = resolvers.appendhash local loadcachecontent = caches.loadcontent -local checkgarbage = utilities.garbagecollector and utilities.garbagecollector.check +----- checkgarbage = utilities.garbagecollector and utilities.garbagecollector.check function resolvers.locators.file(specification) local filename = specification.filename @@ -128,9 +128,9 @@ function loaders.file(specification,filetype) report_files("file loader: %a loaded",filename) end local s = f:read("*a") -- io.readall(f) is faster but we never have large files here - if checkgarbage then - checkgarbage(#s) - end + -- if checkgarbage then + -- checkgarbage(#s) + -- end f:close() if s then return true, s, #s diff --git a/tex/context/base/mkiv/data-tmp.lua b/tex/context/base/mkiv/data-tmp.lua index 9b0117c15..9a8a586cd 100644 --- a/tex/context/base/mkiv/data-tmp.lua +++ b/tex/context/base/mkiv/data-tmp.lua @@ -324,7 +324,11 @@ caches.setluanames = setluanames -- -- runtime files like fonts are written to the writable cache anyway +local checkmemory = utilities and utilities.lua and utilities.lua.checkmemory +local threshold = 100 -- MB + function caches.loaddata(readables,name,writable) + local used = checkmemory and checkmemory() if type(readables) == "string" then readables = { readables } end @@ -352,7 +356,11 @@ function caches.loaddata(readables,name,writable) end if loader then loader = loader() - collectgarbage("step") + if checkmemory then + checkmemory(used,threshold) + else -- generic + collectgarbage("step") -- option, really slows down! + end return loader end end diff --git a/tex/context/base/mkiv/lang-def.mkiv b/tex/context/base/mkiv/lang-def.mkiv index f74fb5339..85c1f3ac7 100644 --- a/tex/context/base/mkiv/lang-def.mkiv +++ b/tex/context/base/mkiv/lang-def.mkiv @@ -309,8 +309,55 @@ \c!date={\v!day,\space,\v!month,\space,\v!year}, \s!patterns=\s!uk] -\installlanguage [\s!russian] [\s!ru] -\installlanguage [\s!ukrainian] [\s!ua] +\installlanguage + [\s!be] + [\s!lefthyphenmin=2, + \s!righthyphenmin=2, + \c!spacing=\v!packed, + \c!leftsentence=\leftguillemot, + \c!rightsentence=\rightguillemot, + \c!leftsubsentence=\lowerleftdoubleninequote, + \c!rightsubsentence=\upperrightdoublesixquote, + \c!leftquote=\lowerleftdoubleninequote, + \c!rightquote=\upperrightdoublesixquote, + \c!leftquotation=\leftguillemot, + \c!rightquotation=\rightguillemot, + \c!date={\v!day,\space,\v!month,\space,\v!year}] + + \installlanguage + [\s!sr] + [\c!spacing=\v!packed, + \c!leftsentence=\hbox{\endash\space}, + \c!rightsentence=\hbox{\space\endash}, + \c!leftsubsentence=\endash, + \c!rightsubsentence=\endash, + \c!leftquote=\upperrightsingleninequote, + \c!rightquote=\upperrightsingleninequote, + \c!leftquotation=\lowerleftdoubleninequote, + \c!rightquotation=\upperleftdoubleninequote, + \c!date={\v!day,{.},\space,\v!month,\space,\v!year}] + +\installlanguage + [\s!mk] + [\c!spacing=\v!packed, + \c!leftsentence=\endash, + \c!rightsentence=\endash, + \c!leftsubsentence=\endash, + \c!rightsubsentence=\endash, + \c!leftquote=\upperleftsingleninequote, + \c!rightquote=\upperrightsinglesixquote, + \c!leftquotation=\lowerleftdoubleninequote, + \c!rightquotation=\upperrightdoublesixquote, + \c!date={\v!day,\space,\v!month,\space,\v!year}] + +\installlanguage [\s!russian] [\s!ru] +\installlanguage [\s!ukrainian] [\s!ua] +\installlanguage [\s!belarussian][\s!be] +\installlanguage [\s!serbian] [\s!sr] +\installlanguage [\s!sr-latn] [\s!sr] +\installlanguage [\s!sr-cyrl] [\s!sr] +\installlanguage [\s!macedonian] [\s!mk] + % Uralic Languages: Cheremiss, Estonian, Finnish, Karelian, Laap, % Mordvinian, Permian tongues, Hungarian, Ostyak, Vogul, Samoyed diff --git a/tex/context/base/mkiv/lang-txt.lua b/tex/context/base/mkiv/lang-txt.lua index e6ec11c32..026abbd0e 100644 --- a/tex/context/base/mkiv/lang-txt.lua +++ b/tex/context/base/mkiv/lang-txt.lua @@ -18,6 +18,8 @@ if not modules then modules = { } end modules ['lang-txt'] = { -- -- af Afrikaans ... -- ar Arabic Idris Samawi Hamid, Khaled Hosny +-- be Belarussian Darya Hryshkavets (2019) +-- bg Bulgarian Vladislav Hinkin, Aleš Ďurčanský (2019) -- ca Catalan ... -- cn Chinese Wang Lei, ... -- cs Czech Tom Hudec, Petr Sojka, Richard Gabriel @@ -25,7 +27,7 @@ if not modules then modules = { } end modules ['lang-txt'] = { -- de German Tobias Burnus, ... -- en English Hans Hagen, ... -- es Spanish Andrés Montoya, ... --- et Estonian Clyde Johnston +-- et Estonian Clyde Johnston (2018) -- fi Finish ... -- fr French Daniel Flipo, Arthur Reutenauer -- gr Greek Apostolos Syropoulos, Thomas Schmitz @@ -36,17 +38,19 @@ if not modules then modules = { } end modules ['lang-txt'] = { -- kr Korean Jeong Dalyoung -- la Latin ... -- lt Lithuanian Marius Aleknevičius --- mk Macedonian Jakub Loula, Tomáš Hála (2019), Stojan Trajanovski +-- mk Macedonian Jakub Loula, Tomáš Hála (2019), Stojan Trajanovski (2019) -- nb Norwegian Hans Fredrik Nordhaug, ... -- nn Norwegian Hans Fredrik Nordhaug, ... -- nl Dutch Hans Hagen --- pe Persian Mohammad Hossein Bateni --- pl Polish Grzegorz Sapijaszko +-- pe Persian Mohammad Hossein Bateni (2016) +-- pl Polish Grzegorz Sapijaszko (2011) -- pt Portuguese Pedro F. M. Mendonça -- ro Romanian Dan Seracu, ... -- ru Russian Olga Briginets, Alexander Bokovoy, Victor Figurnov, ... -- sk Slovak Tomáš Hála (2012) -- sl Slovenian Mojca Miklavec +-- sr Serbian Ivan Pešić (2020) +-- sr-latn Serbian Ivan Pešić (2020) -- sv Swedish ... -- tk Turkish Tobias Burnus -- tr Turkmen Nazar Annagurban @@ -71,35 +75,49 @@ data.labels={ ["btx"]={ ["In"]={ ["labels"]={ + ["be"]="У", + ["bg"]="в", ["en"]="In", ["es"]="En", ["fr"]="Dans", ["mk"]="во", ["pe"]="در", + ["sr"]="У", + ["sr-latn"]="U", }, }, ["Number"]={ ["labels"]={ + ["be"]="Нумар", + ["bg"]="номер", ["de"]="Numer", ["en"]="Number", ["fr"]="Numéro", ["mk"]="Број", ["nl"]="Nummer", ["pe"]="شماره", + ["sr"]="Број", + ["sr-latn"]="Broj", }, }, ["Volume"]={ ["labels"]={ + ["be"]="Гук", + ["bg"]="обем", ["de"]="Band", ["en"]="Volume", ["et"]="Köide", ["mk"]="Том", ["nl"]="Deel", ["pe"]="جلد", + ["sr"]="Том", + ["sr-latn"]="Tom", }, }, ["and"]={ ["labels"]={ + ["be"]="i", + ["bg"]="a", ["de"]="und", ["en"]="and", ["es"]="y", @@ -109,10 +127,14 @@ data.labels={ ["mk"]="и", ["nl"]="en", ["pe"]="و", + ["sr"]="и", + ["sr-latn"]="i", }, }, ["edition"]={ ["labels"]={ + ["be"]="Выданне", + ["bg"]="издание", ["de"]="Auflage", ["en"]="edition", ["es"]="edición", @@ -122,10 +144,14 @@ data.labels={ ["mk"]="издание", ["nl"]="editie", ["pe"]="ویرایش", + ["sr"]="издање", + ["sr-latn"]="izdanje", }, }, ["editor"]={ ["labels"]={ + ["be"]="Рэдактар", + ["bg"]="редактор", ["de"]="Herausgeber", ["en"]="editor", ["et"]="toimetaja", @@ -133,10 +159,14 @@ data.labels={ ["it"]="a cura di", ["mk"]="уредник", ["pe"]="ویراستار", + ["sr"]="уредник", + ["sr-latn"]="urednik", }, }, ["editors"]={ ["labels"]={ + ["be"]="Рэдактары", + ["bg"]="редактори", ["de"]="Herausgeber", ["en"]="editors", ["es"]="editores", @@ -144,20 +174,27 @@ data.labels={ ["fr"]="éditeurs", ["it"]="a cura di", ["mk"]="уредници", - + ["sr"]="уредници", + ["sr-latn"]="urednici", }, }, ["in"]={ ["labels"]={ + ["be"]="у", + ["bg"]="в", ["en"]="in", ["es"]="en", ["fr"]="dans", ["mk"]="во", ["pe"]="در", + ["sr"]="у", + ["sr-latn"]="u", }, }, ["mastersthesis"]={ ["labels"]={ + ["be"]="Дыпломная работа", + ["bg"]="дипломна работа", ["de"]="Masterarbeit", ["en"]="Master's thesis", ["es"]="Tesis de maestría", @@ -167,55 +204,76 @@ data.labels={ ["mk"]="Магистерска дисертација", ["nl"]="Masterproef", ["pe"]="پایان‌نامه کارشناسی ارشد", + ["sr"]="Мастер дисертација", + ["sr-latn"]="Master disertacija", }, }, ["number"]={ ["labels"]={ + ["be"]="нумар", + ["bg"]="номер", ["de"]="Numer", ["en"]="number", ["fr"]="numéro", ["mk"]="број", ["nl"]="nummer", ["pe"]="شماره", + ["sr"]="број", + ["sr-latn"]="broj", }, }, ["of"]={ ["labels"]={ + ["be"]="з", + ["bg"]="на", ["de"]="von", ["en"]="of", ["fr"]="de", ["mk"]="од", ["nl"]="van", + ["sr"]="од", + ["sr-latn"]="od", }, }, ["others"]={ ["labels"]={ ["en"]="et al.", ["et"]="jt", - ["mk"]="и др.", + ["mk"]="и др.", + ["sr"]="и др.", + ["sr-latn"]="i dr.", }, }, ["p"]={ ["labels"]={ + ["be"]="стар.", ["de"]="S.", ["en"]="p.", - ["mk"]="стр.", ["et"]="lk", + ["mk"]="стр.", ["pe"]="ص", + ["sr"]="стр.", + ["sr-latn"]="str.", }, }, ["pages"]={ ["labels"]={ + ["be"]="старонка", + ["bg"]="страни", ["de"]="Seiten", ["en"]="pages", ["et"]="leheküljed", ["mk"]="страници", ["nl"]="paginas", ["pe"]="صفحات", + ["sr"]="страницa", + ["sr-latn"]="stranica", }, }, ["patent"]={ ["labels"]={ + ["be"]="патэнт", + ["bg"]="патент", ["de"]="Patent", ["en"]="Patent", ["es"]="Patente", @@ -224,10 +282,14 @@ data.labels={ ["it"]="Brevetto", ["mk"]="Патент", ["nl"]="Octrooi", + ["sr"]="Патент", + ["sr-latn"]="Patent", }, }, ["phdthesis"]={ ["labels"]={ + ["be"]="Доктарская дысертацыя", + ["bg"]="дисертачна работа", ["de"]="Dissertation", ["en"]="PhD thesis", ["es"]="Tesis doctoral", @@ -237,6 +299,8 @@ data.labels={ ["mk"]="Докторска дисертација", ["nl"]="Proefschrift", ["pe"]="رساله دکتری", + ["sr"]="Докторска дисертација", + ["sr-latn"]="Doktorska disertacija", }, }, ["pp"]={ @@ -246,10 +310,14 @@ data.labels={ ["et"]="lk-d", ["mk"]="стр.", ["pe"]="صص", + ["sr"]="стр.", + ["sr-latn"]="str.", }, }, ["technicalreport"]={ ["labels"]={ + ["be"]="Тэхнічны даклад", + ["bg"]="технически доклад", ["de"]="Technischer Bericht", ["en"]="Technical report", ["es"]="Informe técnico", @@ -259,20 +327,28 @@ data.labels={ ["mk"]="Технички извештај", ["nl"]="Technisch rapport", ["pe"]="گزارش فنی", + ["sr"]="Технички извештај", + ["sr-latn"]="Tehnički izveštaj", }, }, ["volume"]={ ["labels"]={ + ["be"]="гучнасць", + ["bg"]="обем", ["de"]="Band", ["en"]="volume", ["et"]="köide", ["mk"]="том", ["nl"]="deel", ["pe"]="جلد", + ["sr"]="том", + ["sr-latn"]="tom", }, }, ["with"]={ ["labels"]={ + ["be"]="з", + ["bg"]="със", ["de"]="mit", ["en"]="with", ["es"]="con", @@ -281,177 +357,213 @@ data.labels={ ["it"]="con", ["mk"]="со", ["nl"]="met", + ["sr"]="са", + ["sr-latn"]="sa", }, }, }, ["functions"]={ ["Pr"]={ ["labels"]={ - ["cz"]="P", + ["cs"]="P", ["en"]="Pr", - ["mk"]="P", + ["mk"]="P", ["sk"]="P", + ["sr"]="P", + ["sr-latn"]="P", }, }, ["arccos"]={ ["labels"]={ - ["cz"]="arccos", + ["cs"]="arccos", ["en"]="arccos", ["es"]="arc\\sixperemspace cos", ["hr"]="arc\\sixperemspace cos", - ["mk"]="arccos", + ["mk"]="arccos", ["pl"]="arc\\sixperemspace cos", ["sk"]="arccos", + ["sr"]="arccos", + ["sr-latn"]="arccos", }, }, ["arccosh"]={ ["labels"]={ - ["cz"]="arccosh", + ["cs"]="arccosh", ["en"]="arccosh", ["es"]="arc\\sixperemspace cosh", ["hr"]="arc\\sixperemspace cosh", - ["mk"]="arccosh", + ["mk"]="arccosh", ["pl"]="arc\\sixperemspace cosh", ["sk"]="arccosh", + ["sr"]="arccosh", + ["sr-latn"]="arccosh", }, }, ["arcctg"]={ ["labels"]={ - ["cz"]="arccotg", + ["cs"]="arccotg", ["en"]="arccot", ["es"]="arc\\sixperemspace cot", ["hr"]="arc\\sixperemspace ctg", - ["mk"]="arccotg", + ["mk"]="arccotg", ["pl"]="arc\\sixperemspace ctg", ["sk"]="arccotg", + ["sr"]="arcctg", + ["sr-latn"]="arcctg", }, }, ["arcsin"]={ ["labels"]={ - ["cz"]="arcsin", + ["cs"]="arcsin", ["en"]="arcsin", ["es"]="arc\\sixperemspace sen", ["hr"]="arc\\sixperemspace sin", - ["mk"]="arcsin", + ["mk"]="arcsin", ["pl"]="arc\\sixperemspace sin", ["sk"]="arcsin", + ["sr"]="arcsin", + ["sr-latn"]="arcsin", }, }, ["arcsinh"]={ ["labels"]={ - ["cz"]="arcsinh", + ["cs"]="arcsinh", ["en"]="arcsinh", ["es"]="arc\\sixperemspace senh", ["hr"]="arc\\sixperemspace sinh", - ["mk"]="arcsinh", + ["mk"]="arcsinh", ["pl"]="arc\\sixperemspace sinh", ["sk"]="arcsinh", + ["sr"]="arcsinh", + ["sr-latn"]="arcsinh", }, }, ["arctan"]={ ["labels"]={ - ["cz"]="arctg", + ["cs"]="arctg", ["en"]="arctan", ["es"]="arc\\sixperemspace tan", ["hr"]="arc\\sixperemspace tg", - ["mk"]="arctg", + ["mk"]="arctg", ["pl"]="arc\\sixperemspace tg", ["sk"]="arctg", + ["sr"]="arctg", + ["sr-latn"]="arctg", }, }, ["arctanh"]={ ["labels"]={ - ["cz"]="arctgh", + ["cs"]="arctgh", ["en"]="arctanh", ["es"]="arc\\sixperemspace tanh", ["hr"]="arc\\sixperemspace tgh", - ["mk"]="arctgh", + ["mk"]="arctgh", ["pl"]="arc\\sixperemspace tgh", ["sk"]="arctgh", + ["sr"]="arctgh", + ["sr-latn"]="arctgh", }, }, ["arg"]={ ["labels"]={ - ["cz"]="arg", + ["cs"]="arg", ["en"]="arg", ["es"]="arg", - ["mk"]="arg", + ["mk"]="arg", ["sk"]="arg", + ["sr"]="arg", + ["sr-latn"]="arg", }, }, ["cos"]={ ["labels"]={ - ["cz"]="cos", + ["cs"]="cos", ["en"]="cos", ["es"]="cos", - ["mk"]="cos", + ["mk"]="cos", ["sk"]="cos", + ["sr"]="cos", + ["sr-latn"]="cos", }, }, ["cosh"]={ ["labels"]={ - ["cz"]="cosh", + ["cs"]="cosh", ["en"]="cosh", ["es"]="cosh", - ["mk"]="cosh", + ["mk"]="cosh", ["sk"]="cosh", + ["sr"]="cosh", + ["sr-latn"]="cosh", }, }, ["cot"]={ ["labels"]={ - ["cz"]="cotg", + ["cs"]="cotg", ["en"]="cot", ["es"]="cot", ["hr"]="ctg", - ["mk"]="ctg", + ["mk"]="ctg", ["pl"]="ctg", ["sk"]="cotg", + ["sr"]="ctg", + ["sr-latn"]="ctg", }, }, ["coth"]={ ["labels"]={ - ["cz"]="cotgh", + ["cs"]="cotgh", ["en"]="coth", ["es"]="coth", - ["mk"]="ctgh", + ["mk"]="ctgh", ["sk"]="cotgh", + ["sr"]="ctgh", + ["sr-latn"]="ctgh", }, }, ["csc"]={ ["labels"]={ - ["cz"]="cosec", + ["cs"]="cosec", ["en"]="csc", ["es"]="csc", - ["mk"]="cosec", + ["mk"]="cosec", ["sk"]="cosec", + ["sr"]="cosec", + ["sr-latn"]="cosec", }, }, ["ctg"]={ ["labels"]={ - ["cz"]="cotg", + ["cs"]="cotg", ["en"]="cot", ["es"]="cot", ["hr"]="ctg", - ["mk"]="ctg", + ["mk"]="ctg", ["pl"]="ctg", ["sk"]="cotg", + ["sr"]="ctg", + ["sr-latn"]="ctg", }, }, ["deg"]={ ["labels"]={ - ["cz"]="deg", + ["cs"]="deg", ["en"]="deg", ["es"]="gr", - ["mk"]="deg", + ["mk"]="deg", ["sk"]="deg", + ["sr"]="deg", + ["sr-latn"]="deg", }, }, ["det"]={ ["labels"]={ - ["cz"]="det", + ["cs"]="det", ["en"]="det", ["es"]="det", ["sk"]="det", + ["sr"]="det", + ["sr-latn"]="det", }, }, ["diff"]={ @@ -461,35 +573,41 @@ data.labels={ }, ["dim"]={ ["labels"]={ - ["cz"]="dim", + ["cs"]="dim", ["en"]="dim", ["es"]="dim", - ["mk"]="dim", + ["mk"]="dim", ["sk"]="dim", + ["sr"]="dim", + ["sr-latn"]="dim", }, }, ["exp"]={ ["labels"]={ - ["cz"]="exp", + ["cs"]="exp", ["en"]="exp", ["es"]="exp", ["sk"]="exp", + ["sr"]="exp", + ["sr-latn"]="exp", }, }, ["gcd"]={ ["labels"]={ - ["cz"]="NSD", + ["cs"]="NSD", ["en"]="gcd", ["es"]="mcd", ["hr"]="nzd", - ["mk"]="НЗД", + ["mk"]="НЗД", ["nl"]="ggd", ["sk"]="NSD", + ["sr"]="НЗД", + ["sr-latn"]="NZD", }, }, ["hom"]={ ["labels"]={ - ["cz"]="Hom", + ["cs"]="Hom", ["en"]="hom", ["es"]="hom", ["sk"]="Hom", @@ -497,207 +615,237 @@ data.labels={ }, ["inf"]={ ["labels"]={ - ["cz"]="inf", + ["cs"]="inf", ["en"]="inf", ["es"]="inf", - ["mk"]="inf", + ["mk"]="inf", ["sk"]="inf", + ["sr"]="inf", + ["sr-latn"]="inf", }, }, ["injlim"]={ ["labels"]={ - ["cz"]="inj\\sixperemspace lim", + ["cs"]="inj\\sixperemspace lim", ["en"]="inj\\sixperemspace lim", ["es"]="lím\\sixperemspace iny", ["sk"]="inj\\sixperemspace lim", + ["sr"]="inj\\sixperemspace lim", + ["sr-latn"]="inj\\sixperemspace lim", }, }, ["ker"]={ ["labels"]={ - ["cz"]="ker", + ["cs"]="ker", ["en"]="ker", ["es"]="Ker", ["sk"]="ker", + ["sr"]="ker", + ["sr-latn"]="ker", }, }, ["lcm"]={ ["labels"]={ - ["cz"]="NSN", + ["cs"]="NSN", ["en"]="lcm", ["es"]="MCM", ["hr"]="nzv", - ["mk"]="НЗС", + ["mk"]="НЗС", ["nl"]="kgv", ["sk"]="NSN", + ["sr"]="НЗС", + ["sr-latn"]="NZS", }, }, ["lg"]={ ["labels"]={ - ["cz"]="log", + ["cs"]="log", ["en"]="lg", ["es"]="log", - ["mk"]="lg", + ["mk"]="lg", ["sk"]="log", + ["sr"]="lg", + ["sr-latn"]="lg", }, }, ["lim"]={ ["labels"]={ - ["cz"]="lim", + ["cs"]="lim", ["en"]="lim", ["es"]="lím", - ["mk"]="lim", + ["mk"]="lim", ["sk"]="lim", + ["sr"]="lim", + ["sr-latn"]="lim", }, }, ["liminf"]={ ["labels"]={ - ["cz"]="lim\\sixperemspace inf", + ["cs"]="lim\\sixperemspace inf", ["en"]="lim\\sixperemspace inf", ["es"]="lím\\sixperemspace inf", - ["mk"]="lim\\sixperemspace inf", + ["mk"]="lim\\sixperemspace inf", ["sk"]="lim\\sixperemspace inf", + ["sr"]="lim\\sixperemspace inf", + ["sr-latn"]="lim\\sixperemspace inf", }, }, ["limsup"]={ ["labels"]={ - ["cz"]="lim\\sixperemspace sup", + ["cs"]="lim\\sixperemspace sup", ["en"]="lim\\sixperemspace sup", ["es"]="lím\\sixperemspace sup", - ["mk"]="lim\\sixperemspace sup", + ["mk"]="lim\\sixperemspace sup", ["sk"]="lim\\sixperemspace sup", + ["sr"]="lim\\sixperemspace sup", + ["sr-latn"]="lim\\sixperemspace sup", }, }, ["ln"]={ ["labels"]={ - ["cz"]="ln", + ["cs"]="ln", ["en"]="ln", ["es"]="ln", - ["mk"]="ln", + ["mk"]="ln", ["sk"]="ln", + ["sr"]="ln", + ["sr-latn"]="ln", }, }, ["log"]={ ["labels"]={ - ["cz"]="log", + ["cs"]="log", ["en"]="log", ["es"]="log", - ["mk"]="log", + ["mk"]="log", ["sk"]="log", + ["sr"]="log", + ["sr-latn"]="log", }, }, ["max"]={ ["labels"]={ - ["cz"]="max", + ["cs"]="max", ["en"]="max", ["es"]="máx", - ["mk"]="max", + ["mk"]="max", ["sk"]="max", + ["sr"]="max", + ["sr-latn"]="max", }, }, ["median"]={ ["labels"]={ - ["cz"]="\\tilde", + ["cs"]="\\tilde", ["en"]="median", ["es"]="Mediana", ["sk"]="\\tilde", + ["sr"]="median", + ["sr-latn"]="median", }, }, ["min"]={ ["labels"]={ - ["cz"]="min", + ["cs"]="min", ["en"]="min", ["es"]="mín", - ["mk"]="min", + ["mk"]="min", ["sk"]="min", + ["sr"]="min", + ["sr-latn"]="min", }, }, ["mod"]={ ["labels"]={ - ["cz"]="mod", + ["cs"]="mod", ["en"]="mod", ["es"]="mod", - ["mk"]="mod", + ["mk"]="mod", ["sk"]="mod", + ["sr"]="mod", + ["sr-latn"]="mod", }, }, ["projlim"]={ ["labels"]={ - ["cz"]="proj\\sixperemspace lim", + ["cs"]="proj\\sixperemspace lim", ["en"]="proj\\sixperemspace lim", ["es"]="lím\\sixperemspace proy", ["sk"]="proj\\sixperemspace lim", + ["sr"]="proj\\sixperemspace lim", + ["sr-latn"]="proj\\sixperemspace lim", }, }, ["sec"]={ ["labels"]={ - ["cz"]="sec", + ["cs"]="sec", ["en"]="sec", ["es"]="sec", - ["mk"]="sec", + ["mk"]="sec", ["sk"]="sec", + ["sr"]="sec", + ["sr-latn"]="sec", }, }, ["sin"]={ ["labels"]={ - ["cz"]="sin", + ["cs"]="sin", ["en"]="sin", ["es"]="sen", - ["mk"]="sin", + ["mk"]="sin", ["sk"]="sin", + ["sr"]="sin", + ["sr-latn"]="sin", }, }, ["sinh"]={ ["labels"]={ - ["cz"]="sinh", + ["cs"]="sinh", ["en"]="sinh", ["es"]="senh", - ["mk"]="sinh", + ["mk"]="sinh", ["sk"]="sinh", + ["sr"]="sinh", + ["sr-latn"]="sinh", }, }, ["sup"]={ ["labels"]={ - ["cz"]="sup", + ["cs"]="sup", ["en"]="sup", ["es"]="sup", - ["mk"]="sup", + ["mk"]="sup", ["sk"]="sup", + ["sr"]="sup", + ["sr-latn"]="sup", }, }, ["tan"]={ ["labels"]={ - ["cz"]="tg", + ["cs"]="tg", ["en"]="tan", ["es"]="tan", ["hr"]="tg", ["mk"]="tg", ["pl"]="tg", ["sk"]="tg", + ["sr"]="tg", + ["sr-latn"]="tg", }, }, ["tanh"]={ ["labels"]={ - ["cz"]="tgh", + ["cs"]="tgh", ["en"]="tanh", ["es"]="tanh", - ["mk"]="tgh", + ["mk"]="tgh", ["sk"]="tgh", + ["sr"]="tgh", + ["sr-latn"]="tgh", }, }, }, ["texts"]={ - ["following:singular"]={ - ["labels"]={ - ["en"]="f.", - ["fr"]=hairspace .. "sq", - }, - }, - ["following:plural"]={ - ["labels"]={ - ["en"]="ff.", - ["fr"]=hairspace .. "sqq", - }, - }, ["and"]={ ["labels"]={ ["af"]="", @@ -727,6 +875,7 @@ data.labels={ ["ru"]="", ["sk"]=" a ", ["sl"]="", + ["sr"]=" и ", ["sv"]="", ["tk"]="", ["tr"]="", @@ -739,6 +888,7 @@ data.labels={ ["labels"]={ ["af"]="Bylae ", ["ar"]="ملحق ", + ["be"]="Апендыцыт", ["ca"]="Apèndix ", ["cn"]="附录", ["cs"]="Příloha ", @@ -768,6 +918,8 @@ data.labels={ ["ru"]="", ["sk"]="Príloha ", ["sl"]="Dodatek ", + ["sr"]="Додатак ", + ["sr-latn"]="Dodatak ", ["sv"]="", ["tk"]="Goşmaça", ["tr"]="", @@ -781,6 +933,8 @@ data.labels={ ["ar"]="أبريل", ["ar-dz"]="أفريل", ["ar-sy"]="نيسان", + ["be"]="красавіка", + ["bg"]="април", ["ca"]="abril", ["cn"]="四月", ["cs"]="dubna", @@ -799,8 +953,8 @@ data.labels={ ["kr"]="4", ["la"]="Aprilis", ["lt"]="balandžio", - ["nb"]="april", ["mk"]="април", + ["nb"]="april", ["nl"]="april", ["nn"]="april", ["pe"]="آوریل", @@ -810,6 +964,8 @@ data.labels={ ["ru"]="апреля", ["sk"]="apríla", ["sl"]="april", + ["sr"]="aприл", + ["sr-latn"]="april", ["sv"]="april", ["tk"]="aprel", ["tr"]="nisan", @@ -851,6 +1007,8 @@ data.labels={ ["ru"]="", ["sk"]="apr.", ["sl"]="", + ["sr"]="апр.", + ["sr-latn"]="apr.", ["sv"]="", ["tk"]="", ["tr"]="", @@ -888,6 +1046,8 @@ data.labels={ ["ru"]="на странице ", ["sk"]="na strane ", ["sl"]="na strani ", + ["sr"]="на страници ", + ["sr-latn"]="na stranici ", ["sv"]="på sida ", ["tk"]="", ["tr"]="", @@ -902,6 +1062,8 @@ data.labels={ ["ar-dz"]="أوت", ["ar-ma"]="غشت", ["ar-sy"]="آب", + ["be"]="жнівня", + ["bg"]="август", ["ca"]="agost", ["cn"]="八月", ["cs"]="srpna", @@ -931,6 +1093,8 @@ data.labels={ ["ru"]="августа", ["sk"]="augusta", ["sl"]="avgust", + ["sr"]="август", + ["sr-latn"]="avgust", ["sv"]="augusti", ["tk"]="awgust", ["tr"]="ağustos", @@ -972,6 +1136,8 @@ data.labels={ ["ru"]="", ["sk"]="aug.", ["sl"]="", + ["sr"]="авг.", + ["sr-latn"]="avg.", ["sv"]="", ["tk"]="", ["tr"]="", @@ -984,6 +1150,8 @@ data.labels={ ["labels"]={ ["af"]="Hoofstuk ", ["ar"]="باب ", + ["be"]="Глава ", + ["bg"]="Eпизод ", ["ca"]="Capítol ", ["cn"]={ "第", "章" }, ["cs"]="Kapitola ", @@ -1013,6 +1181,9 @@ data.labels={ ["ru"]="", ["sk"]="Kapitola ", ["sl"]="Poglavje ", + ["sr"]="Поглавље ", + ["sr"]="Глава ", + ["sr-latn"]="Glava ", ["sv"]="", ["tk"]="Bap", ["tr"]="", @@ -1023,6 +1194,8 @@ data.labels={ ["continued"]={ ["labels"]={ ["af"]="", + ["be"]=" (працяг)", + ["bg"]=" (продължение)", ["ca"]="", ["cs"]=" (pokračování)", ["da"]="", @@ -1049,6 +1222,9 @@ data.labels={ ["ru"]="", ["sk"]=" (pokračovanie)", ["sl"]="", + ["sr"]=" (наставио)", + ["sr"]=" (наставак)", + ["sr-latn"]=" (nastavak)", ["sv"]="", ["tk"]="", ["tr"]="", @@ -1058,12 +1234,15 @@ data.labels={ }, ["day"]={ ["labels"]={ + ["bg"]="ден", ["en"]="day", ["et"]="päev", ["kr"]="일", ["mk"]="ден", ["nl"]="dag", ["pe"]="روز", + ["sr"]="дан", + ["sr-latn"]="dan", }, }, ["december"]={ @@ -1072,6 +1251,8 @@ data.labels={ ["ar"]="ديسمبر", ["ar-ma"]="دجنبر", ["ar-sy"]="كانون الأول", + ["be"]="снежня", + ["bg"]="декември", ["ca"]="desembre", ["cn"]="十二月", ["cs"]="prosince", @@ -1090,8 +1271,8 @@ data.labels={ ["kr"]="12", ["la"]="December", ["lt"]="gruodžio", - ["nb"]="desember", ["mk"]="декември", + ["nb"]="desember", ["nl"]="december", ["nn"]="desember", ["pe"]="دسامبر", @@ -1101,6 +1282,8 @@ data.labels={ ["ru"]="декабря", ["sk"]="decembra", ["sl"]="december", + ["sr"]="децембар", + ["sr-latn"]="decembar", ["sv"]="december", ["tk"]="dekabr", ["tr"]="aralık", @@ -1142,6 +1325,8 @@ data.labels={ ["ru"]="", ["sk"]="dec.", ["sl"]="", + ["sr"]="дец.", + ["sr-latn"]="dec.", ["sv"]="", ["tk"]="", ["tr"]="", @@ -1155,6 +1340,8 @@ data.labels={ ["ar"]="فبراير", ["ar-dz"]="فيفري", ["ar-sy"]="شباط", + ["be"]="лютага", + ["bg"]="февруари", ["ca"]="febrer", ["cn"]="二月", ["cs"]="února", @@ -1184,6 +1371,8 @@ data.labels={ ["ru"]="февраля", ["sk"]="februára", ["sl"]="februar", + ["sr"]="фебруар", + ["sr-latn"]="februar", ["sv"]="februari", ["tk"]="fewral", ["tr"]="Şubat", @@ -1225,6 +1414,8 @@ data.labels={ ["ru"]="", ["sk"]="feb.", ["sl"]="", + ["sr"]="феб.", + ["sr-latn"]="feb.", ["sv"]="", ["tk"]="", ["tr"]="", @@ -1236,6 +1427,8 @@ data.labels={ ["labels"]={ ["af"]="Figuur ", ["ar"]="شكل ", + ["be"]="Малюнак", + ["bg"]="Фигура", ["ca"]="Figura ", ["cn"]="图", ["cs"]="Obrázek ", @@ -1265,6 +1458,8 @@ data.labels={ ["ru"]="Рисунок ", ["sk"]="Obrázok ", ["sl"]="Slika ", + ["sr"]="Слика ", + ["sr-latn"]="Slika ", ["sv"]="Figur ", ["tk"]="Surat", ["tr"]="Şekil ", @@ -1272,6 +1467,18 @@ data.labels={ ["vi"]="Hình ", }, }, + ["following:plural"]={ + ["labels"]={ + ["en"]="ff.", + ["fr"]=hairspace .. "sqq", + }, + }, + ["following:singular"]={ + ["labels"]={ + ["en"]="f.", + ["fr"]=hairspace .. "sq", + }, + }, ["followingpage"]={ ["labels"]={ ["en"]="on a following page", @@ -1279,12 +1486,16 @@ data.labels={ ["mk"]="на следната страница", ["nl"]="op een volgende bladzijde", ["pe"]="در صفحات آینده", + ["sr"]="на следећој страници", + ["sr-latn"]="na sledećoj stranici", }, }, ["friday"]={ ["labels"]={ ["af"]="vrydag", ["ar"]="الجمعة", + ["be"]="пятніца", + ["bg"]="петък", ["ca"]="divendres", ["cn"]="星期五", ["cs"]="pátek", @@ -1314,6 +1525,8 @@ data.labels={ ["ru"]="пятница", ["sk"]="piatok", ["sl"]="petek", + ["sr"]="петак", + ["sr-latn"]="petak", ["sv"]="fredag", ["tk"]="bäşinji gün", ["tr"]="cuma", @@ -1321,10 +1534,20 @@ data.labels={ ["vi"]="thứ sáu", }, }, + ["friday:mnem"]={ + ["labels"]={ + ["de"]="Fr.", + ["en"]="fri", + ["sr"]="пет.", + ["sr-latn"]="pet.", + }, + }, ["graphic"]={ ["labels"]={ ["af"]="Grafiek ", ["ar"]="رسم ", + ["be"]="Графіка ", + ["bg"]="Графичен ", ["ca"]="Gràfica ", ["cn"]="插图", ["cs"]="Graf ", @@ -1353,6 +1576,8 @@ data.labels={ ["ru"]="График ", ["sk"]="Graf ", ["sl"]="Slika ", + ["sr"]="График ", + ["sr-latn"]="Grafik ", ["sv"]="Grafik ", ["tk"]="Grafik", ["tr"]="Grafik", @@ -1364,6 +1589,7 @@ data.labels={ ["labels"]={ ["af"]="", ["ar"]="كما وضحنا سابقا", + ["be"]="Графіка", ["ca"]="", ["cs"]="viz výše", ["da"]="se foroven", @@ -1391,6 +1617,9 @@ data.labels={ ["ru"]="см. выше", ["sk"]="pozri hore", ["sl"]="glej zgoraj", + ["sr"]="види горе", + ["sr"]="као што је показано изнад", + ["sr-latn"]="kao što je pokazano iznad", ["sv"]="se ovan", ["tk"]="", ["tr"]="", @@ -1402,6 +1631,8 @@ data.labels={ ["labels"]={ ["af"]="", ["ar"]="كما نوضح لاحقا", + ["be"]="гл. вышэй", + ["bg"]="ў далейшым", ["ca"]="", ["cs"]="viz níže", ["da"]="se forneden", @@ -1429,6 +1660,9 @@ data.labels={ ["ru"]="см. ниже", ["sk"]="pozri ďalej", ["sl"]="glej spodaj", + ["sr"]="види доле", + ["sr"]="као што је показано ниже", + ["sr-latn"]="kao što je pokazano niže", ["sv"]="se nedan", ["tk"]="", ["tr"]="", @@ -1440,6 +1674,8 @@ data.labels={ ["labels"]={ ["af"]="Intermezzo ", ["ar"]="فسحة ", + ["be"]="Устаўка", + ["bg"]="Aнтракт ", ["ca"]="Intermedi ", ["cn"]="퉣", ["cs"]="Intermezzo ", @@ -1468,6 +1704,9 @@ data.labels={ ["ru"]="Вставка ", ["sk"]="Intermezzo ", ["sl"]="Intermezzo ", + ["sr"]="Интермеззо ", + ["sr"]="Дигресија ", + ["sr-latn"]="Digresija ", ["sv"]="Intermezzo ", ["tk"]="Arakesme", ["tr"]="", @@ -1481,6 +1720,8 @@ data.labels={ ["ar"]="يناير", ["ar-dz"]="جانفي", ["ar-sy"]="كانون الثاني", + ["be"]="студзеня", + ["bg"]="януари", ["ca"]="gener", ["cn"]="一月", ["cs"]="ledna", @@ -1510,6 +1751,8 @@ data.labels={ ["ru"]="января", ["sk"]="januára", ["sl"]="januar", + ["sr"]="јануар", + ["sr-latn"]="januar", ["sv"]="januari", ["tk"]="ýanwar", ["tr"]="ocak", @@ -1551,6 +1794,8 @@ data.labels={ ["ru"]="", ["sk"]="jan.", ["sl"]="", + ["sr"]="јан.", + ["sr-latn"]="jan.", ["sv"]="", ["tk"]="", ["tr"]="", @@ -1565,6 +1810,8 @@ data.labels={ ["ar-dz"]="جويلة", ["ar-ma"]="يوليوز", ["ar-sy"]="تموز", + ["be"]="ліпня", + ["bg"]="юли", ["ca"]="juliol", ["cn"]="七月", ["cs"]="července", @@ -1594,6 +1841,8 @@ data.labels={ ["ru"]="июля", ["sk"]="júla", ["sl"]="julij", + ["sr"]="jул", + ["sr-latn"]="jul", ["sv"]="juli", ["tk"]="iýul", ["tr"]="temmuz", @@ -1635,6 +1884,8 @@ data.labels={ ["ru"]="", ["sk"]="júla", ["sl"]="", + ["sr"]="јул.", + ["sr-latn"]="jul.", ["sv"]="", ["tk"]="", ["tr"]="", @@ -1648,6 +1899,8 @@ data.labels={ ["ar"]="يونيو", ["ar-dz"]="جوان", ["ar-sy"]="حزيران", + ["be"]="чэрвня", + ["bg"]="юни", ["ca"]="juny", ["cn"]="六月", ["cs"]="června", @@ -1677,6 +1930,8 @@ data.labels={ ["ru"]="июня", ["sk"]="júna", ["sl"]="junij", + ["sr"]="јун", + ["sr-latn"]="jun", ["sv"]="juni", ["tk"]="iýun", ["tr"]="haziran", @@ -1718,6 +1973,8 @@ data.labels={ ["ru"]="", ["sk"]="júna", ["sl"]="", + ["sr"]="јун", + ["sr-latn"]="jun", ["sv"]="", ["tk"]="", ["tr"]="", @@ -1729,6 +1986,8 @@ data.labels={ ["labels"]={ ["af"]="reël ", ["ar"]="سطر ", + ["be"]="радок ", + ["bg"]="ред ", ["ca"]="línia ", ["cn"]="行", ["cs"]="řádek ", @@ -1758,6 +2017,8 @@ data.labels={ ["ru"]="строка ", ["sk"]="riadok ", ["sl"]="vrstica ", + ["sr"]="линија ", + ["sr-latn"]="linija ", ["sv"]="rad ", ["tk"]="setir", ["tr"]="satır ", @@ -1769,6 +2030,8 @@ data.labels={ ["labels"]={ ["af"]="reëls ", ["ar"]="السطور ", + ["be"]="радкi ", + ["bg"]="редове ", ["ca"]="línies ", ["cn"]="行", ["cs"]="řádky ", @@ -1798,6 +2061,8 @@ data.labels={ ["ru"]="строки ", ["sk"]="riadky ", ["sl"]="vrstice ", + ["sr"]="линије ", + ["sr-latn"]="linije ", ["sv"]="rader ", ["tk"]="setirler", ["tr"]="satırlar ", @@ -1810,6 +2075,8 @@ data.labels={ ["af"]="maart", ["ar"]="مارس", ["ar-sy"]="آذار", + ["be"]="сакавіка", + ["bg"]="март", ["ca"]="març", ["cn"]="三月", ["cs"]="března", @@ -1839,6 +2106,8 @@ data.labels={ ["ru"]="марта", ["sk"]="marca", ["sl"]="marec", + ["sr"]="март", + ["sr-latn"]="mart", ["sv"]="mars", ["tk"]="mart", ["tr"]="mart", @@ -1880,6 +2149,8 @@ data.labels={ ["ru"]="", ["sk"]="mar.", ["sl"]="", + ["sr"]="мар.", + ["sr-latn"]="mar.", ["sv"]="", ["tk"]="", ["tr"]="", @@ -1894,6 +2165,8 @@ data.labels={ ["ar-dz"]="ماي", ["ar-ma"]="ماي", ["ar-sy"]="أيار", + ["be"]="мая", + ["bg"]="маӣ", ["ca"]="maig", ["cn"]="五月", ["cs"]="května", @@ -1923,6 +2196,8 @@ data.labels={ ["ru"]="мая", ["sk"]="mája", ["sl"]="maj", + ["sr"]="мај", + ["sr-latn"]="maj", ["sv"]="maj", ["tk"]="maý", ["tr"]="mayıs", @@ -1964,6 +2239,8 @@ data.labels={ ["ru"]="", ["sk"]="mája", ["sl"]="", + ["sr"]="мај", + ["sr-latn"]="maj", ["sv"]="", ["tk"]="", ["tr"]="", @@ -1971,52 +2248,12 @@ data.labels={ ["vi"]="", }, }, - ["monday:mnem"]={ - ["labels"]={ - ["en"]="mon", - ["de"]="Mo.", - }, - }, - ["tuesday:mnem"]={ - ["labels"]={ - ["en"]="tue", - ["de"]="Di.", - }, - }, - ["wednesday:mnem"]={ - ["labels"]={ - ["en"]="wed", - ["de"]="Mi.", - }, - }, - ["thursday:mnem"]={ - ["labels"]={ - ["en"]="thu", - ["de"]="Do.", - }, - }, - ["friday:mnem"]={ - ["labels"]={ - ["en"]="fri", - ["de"]="Fr.", - }, - }, - ["saturday:mnem"]={ - ["labels"]={ - ["en"]="sat", - ["de"]="Sa.", - }, - }, - ["sunday:mnem"]={ - ["labels"]={ - ["en"]="sun", - ["de"]="So.", - }, - }, ["monday"]={ ["labels"]={ ["af"]="maandag", ["ar"]="الاثنين", + ["be"]="панядзелак", + ["bg"]="понеделник", ["ca"]="dilluns", ["cn"]="星期一", ["cs"]="pondělí", @@ -2046,6 +2283,8 @@ data.labels={ ["ru"]="понедельник", ["sk"]="pondelok", ["sl"]="ponedeljek", + ["sr"]="понедељак", + ["sr-latn"]="ponedeljak", ["sv"]="måndag", ["tk"]="birinji gün", ["tr"]="pazartesi", @@ -2053,14 +2292,26 @@ data.labels={ ["vi"]="thứ hai", }, }, + ["monday:mnem"]={ + ["labels"]={ + ["de"]="Mo.", + ["en"]="mon", + ["sr"]="пон.", + ["sr-latn"]="pon.", + }, + }, ["month"]={ ["labels"]={ + ["be"]="месяц", + ["bg"]="месец", ["en"]="month", ["et"]="kuu", ["kr"]="월", ["mk"]="месец", ["nl"]="maand", ["pe"]="ماه", + ["sr"]="месец", + ["sr-latn"]="mesec", }, }, ["november"]={ @@ -2069,6 +2320,8 @@ data.labels={ ["ar"]="نوفمبر", ["ar-ma"]="نونبر", ["ar-sy"]="تشرين الثاني", + ["be"]="лістапада", + ["bg"]="ноември", ["ca"]="novembre", ["cn"]="十一月", ["cs"]="listopadu", @@ -2098,6 +2351,8 @@ data.labels={ ["ru"]="ноября", ["sk"]="novembra", ["sl"]="november", + ["sr"]="новембар", + ["sr-latn"]="novembar", ["sv"]="november", ["tk"]="noýabr", ["tr"]="kasım", @@ -2139,6 +2394,8 @@ data.labels={ ["ru"]="", ["sk"]="nov.", ["sl"]="", + ["sr"]="нов.", + ["sr-latn"]="nov.", ["sv"]="", ["tk"]="", ["tr"]="", @@ -2151,6 +2408,8 @@ data.labels={ ["af"]="oktober", ["ar"]="أكتوبر", ["ar-sy"]="تشرين الأول", + ["be"]="кастрычніка", + ["bg"]="октомври", ["ca"]="octubre", ["cn"]="十月", ["cs"]="října", @@ -2180,6 +2439,8 @@ data.labels={ ["ru"]="октября", ["sk"]="októbra", ["sl"]="oktober", + ["sr"]="октобар", + ["sr-latn"]="oktobar", ["sv"]="oktober", ["tk"]="oktýabr", ["tr"]="ekim", @@ -2221,6 +2482,8 @@ data.labels={ ["ru"]="", ["sk"]="okt.", ["sl"]="", + ["sr"]="окт.", + ["sr-latn"]="okt.", ["sv"]="", ["tk"]="", ["tr"]="", @@ -2232,6 +2495,8 @@ data.labels={ ["labels"]={ ["af"]="", ["ar"]="صفحة ", + ["be"]="старонка ", + ["bg"]="страна", ["ca"]="", ["cs"]="strana ", ["da"]="Side ", @@ -2259,6 +2524,8 @@ data.labels={ ["ru"]="страница ", ["sk"]="strana ", ["sl"]="stran ", + ["sr"]="страница ", + ["sr-latn"]="stranica ", ["sv"]="Sida ", ["tk"]="", ["tr"]="", @@ -2270,6 +2537,8 @@ data.labels={ ["labels"]={ ["af"]="Deel ", ["ar"]="جزء ", + ["be"]="Частка ", + ["bg"]="Частка ", ["ca"]="Part ", ["cn"]={ "第", "部分" }, ["cs"]="Část ", @@ -2299,6 +2568,8 @@ data.labels={ ["ru"]="Часть ", ["sk"]="Časť ", ["sl"]="Del ", + ["sr"]="Део ", + ["sr-latn"]="Deo ", ["sv"]="Del ", ["tk"]="Bölüm", ["tr"]="Cilt ", @@ -2313,12 +2584,16 @@ data.labels={ ["mk"]="на претходната страница", ["nl"]="op een voorgaande bladzijde", ["pe"]="در صفحات گذشته", + ["sr"]="на претходној страници", + ["sr-latn"]="na prethodnoj stranici", }, }, ["saturday"]={ ["labels"]={ ["af"]="saterdag", ["ar"]="السبت", + ["be"]="субота", + ["bg"]="сряда", ["ca"]="dissabte", ["cn"]="星期六", ["cs"]="sobota", @@ -2348,6 +2623,8 @@ data.labels={ ["ru"]="суббота", ["sk"]="sobota", ["sl"]="sobota", + ["sr"]="субота", + ["sr-latn"]="subota", ["sv"]="lördag", ["tk"]="altynjy gün", ["tr"]="cumartesi", @@ -2355,11 +2632,20 @@ data.labels={ ["vi"]="thứ bảy", }, }, + ["saturday:mnem"]={ + ["labels"]={ + ["de"]="Sa.", + ["en"]="sat", + ["sr"]="суб.", + ["sr-latn"]="sub.", + }, + }, ["section"]={ ["hidden"]=true, ["labels"]={ ["af"]="Paragraaf ", ["ar"]="فصل ", + ["bg"]="Cекция ", ["ca"]="Secció ", ["cn"]={ "第", "节" }, ["cs"]="Sekce ", @@ -2378,8 +2664,8 @@ data.labels={ ["kr"]={ "제", "절" }, ["la"]="", ["lt"]="", - ["nb"]="", ["mk"]="Поглавје ", + ["nb"]="", ["nl"]="", ["nn"]="", ["pe"]="بخش ", @@ -2389,6 +2675,8 @@ data.labels={ ["ru"]="", ["sk"]="Sekcia ", ["sl"]="", + ["sr"]="Одељак ", + ["sr-latn"]="Odeljak ", ["sv"]="", ["tk"]="", ["tr"]="", @@ -2400,6 +2688,8 @@ data.labels={ ["labels"]={ ["af"]="", ["ar"]="انظر ", + ["be"]="гл. ", + ["bg"]="погледни", ["ca"]="", ["cs"]="viz ", ["da"]="se ", @@ -2427,6 +2717,8 @@ data.labels={ ["ru"]="см. ", ["sk"]="pozri ", ["sl"]="glej ", + ["sr"]="види ", + ["sr-latn"]="vidi ", ["sv"]="se ", ["tk"]="", ["tr"]="", @@ -2440,6 +2732,8 @@ data.labels={ ["ar"]="سبتمبر", ["ar-ma"]="شتنبر", ["ar-sy"]="أيلول", + ["be"]="верасня", + ["bg"]="септември", ["ca"]="setembre", ["cn"]="九月", ["cs"]="září", @@ -2469,6 +2763,8 @@ data.labels={ ["ru"]="сентября", ["sk"]="septembra", ["sl"]="september", + ["sr"]="септембар", + ["sr-latn"]="septembar", ["sv"]="september", ["tk"]="sentýabr", ["tr"]="eylül", @@ -2510,6 +2806,8 @@ data.labels={ ["ru"]="", ["sk"]="sept.", ["sl"]="", + ["sr"]="сеп.", + ["sr-latn"]="sep.", ["sv"]="", ["tk"]="", ["tr"]="", @@ -2522,6 +2820,7 @@ data.labels={ ["labels"]={ ["af"]="", ["ar"]="فصل أدنى ", + ["bg"]="Подсекция ", ["ca"]="Subsecció ", ["cn"]="", ["cs"]="Podsekce ", @@ -2550,6 +2849,8 @@ data.labels={ ["ru"]="", ["sk"]="Podsekcia ", ["sl"]="", + ["sr"]="Пододељак ", + ["sr-latn"]="Pododeljak ", ["sv"]="", ["tk"]="", ["tr"]="", @@ -2562,6 +2863,7 @@ data.labels={ ["labels"]={ ["af"]="", ["ar"]="فصل أدنى أدنى ", + ["bg"]="Подподсекция ", ["ca"]="Subsubsecció ", ["cn"]="", ["cs"]="Podpodsekce ", @@ -2590,6 +2892,8 @@ data.labels={ ["ru"]="", ["sk"]="Podpodsekcia ", ["sl"]="", + ["sr"]="Подпододељак ", + ["sr-latn"]="Podpododeljak ", ["sv"]="", ["tk"]="", ["tr"]="", @@ -2602,6 +2906,7 @@ data.labels={ ["labels"]={ ["af"]="", ["ar"]="فصل أدنى أدنى أدنى ", + ["bg"]="Подподподсекция ", ["ca"]="Subsubsubsecció ", ["cn"]="", ["cs"]="Podpodpodsekce ", @@ -2630,6 +2935,8 @@ data.labels={ ["ru"]="", ["sk"]="Podpodpodsekcia ", ["sl"]="", + ["sr"]="Подподпододељак ", + ["sr-latn"]="Podpodpododeljak ", ["sv"]="", ["tk"]="", ["tr"]="", @@ -2641,6 +2948,8 @@ data.labels={ ["labels"]={ ["af"]="sondag", ["ar"]="الأحد", + ["be"]="нядзеля", + ["bg"]="неделя", ["ca"]="diumenge", ["cn"]="星期日", ["cs"]="neděle", @@ -2670,6 +2979,8 @@ data.labels={ ["ru"]="воскресенье", ["sk"]="nedeľa", ["sl"]="nedelja", + ["sr"]="недеља", + ["sr-latn"]="nedelja", ["sv"]="söndag", ["tk"]="dynç gün", ["tr"]="pazar", @@ -2677,10 +2988,20 @@ data.labels={ ["vi"]="chủ nhật", }, }, + ["sunday:mnem"]={ + ["labels"]={ + ["de"]="So.", + ["en"]="sun", + ["sr"]="нед.", + ["sr-latn"]="ned.", + }, + }, ["table"]={ ["labels"]={ ["af"]="Tabel", ["ar"]="جدول ", + ["be"]="Табліца ", + ["bg"]="Таблица ", ["ca"]="Taula ", ["cn"]="表", ["cs"]="Tabulka ", @@ -2710,6 +3031,8 @@ data.labels={ ["ru"]="Таблица ", ["sk"]="Tabuľka ", ["sl"]="Tabela ", + ["sr"]="Табела ", + ["sr-latn"]="Tabela ", ["sv"]="Tabell ", ["tk"]="Tablisa", ["tr"]="Tablo ", @@ -2721,6 +3044,8 @@ data.labels={ ["labels"]={ ["af"]="donderdag", ["ar"]="الخميس", + ["be"]="чацвер", + ["bg"]="четвъртък", ["ca"]="dijous", ["cn"]="星期四", ["cs"]="čtvrtek", @@ -2750,6 +3075,8 @@ data.labels={ ["ru"]="четверг", ["sk"]="štvrtok", ["sl"]="četrtek", + ["sr"]="четвртак", + ["sr-latn"]="četvrtak", ["sv"]="torsdag", ["tk"]="dördünji gün", ["tr"]="perşembe", @@ -2757,10 +3084,20 @@ data.labels={ ["vi"]="thứ năm", }, }, + ["thursday:mnem"]={ + ["labels"]={ + ["de"]="Do.", + ["en"]="thu", + ["sr"]="чет.", + ["sr-latn"]="čet.", + }, + }, ["tuesday"]={ ["labels"]={ ["af"]="dinsdag", ["ar"]="الثلاثاء", + ["be"]="аўторак", + ["bg"]="вторник", ["ca"]="dimarts", ["cn"]="星期二", ["cs"]="úterý", @@ -2790,6 +3127,8 @@ data.labels={ ["ru"]="вторник", ["sk"]="utorok", ["sl"]="torek", + ["sr"]="уторак", + ["sr-latn"]="utorak", ["sv"]="tisdag", ["tk"]="ikinji gün", ["tr"]="salı", @@ -2797,10 +3136,20 @@ data.labels={ ["vi"]="thứ ba", }, }, + ["tuesday:mnem"]={ + ["labels"]={ + ["de"]="Di.", + ["en"]="tue", + ["sr"]="уто.", + ["sr-latn"]="uto.", + }, + }, ["wednesday"]={ ["labels"]={ ["af"]="woensdag", ["ar"]="الأربعاء", + ["be"]="серада", + ["bg"]="сряда", ["ca"]="dimecres", ["cn"]="星期三", ["cs"]="středa", @@ -2830,6 +3179,8 @@ data.labels={ ["ru"]="среда", ["sk"]="streda", ["sl"]="sreda", + ["sr"]="среда", + ["sr-latn"]="sreda", ["sv"]="onsdag", ["tk"]="üçünji", ["tr"]="çarşamba", @@ -2837,14 +3188,25 @@ data.labels={ ["vi"]="thứ tư", }, }, + ["wednesday:mnem"]={ + ["labels"]={ + ["de"]="Mi.", + ["en"]="wed", + ["sr"]="сре.", + ["sr-latn"]="sre.", + }, + }, ["year"]={ ["labels"]={ + ["bg"]="година", ["en"]="year", ["et"]="aasta", ["kr"]="년", ["mk"]="година", ["nl"]="jaar", ["pe"]="سال", + ["sr"]="година", + ["sr-latn"]="godina", }, }, }, @@ -2853,6 +3215,8 @@ data.labels={ ["labels"]={ ["af"]="Afkortings", ["ar"]="الاختصارات", + ["be"]="Спіс скарачэнняў", + ["bg"]="Съкращения", ["ca"]="Abreviacions", ["cn"]="缩略语", ["cs"]="Zkratky", @@ -2882,6 +3246,8 @@ data.labels={ ["ru"]="Список сокращений", ["sk"]="Skratky", ["sl"]="Kratice", + ["sr"]="Скраћенице", + ["sr-latn"]="Skraćenice", ["sv"]="Förkortningar", ["tk"]="Gysgaltmalar", ["tr"]="Kısaltmalar", @@ -2893,6 +3259,8 @@ data.labels={ ["labels"]={ ["af"]="Inhoud", ["ar"]="المحتويات", + ["be"]="Змест", + ["bg"]="Съдържание", ["ca"]="Índex de continguts", ["cn"]="目录", ["cs"]="Obsah", @@ -2922,6 +3290,8 @@ data.labels={ ["ru"]="Содержание", ["sk"]="Obsah", ["sl"]="Kazalo", + ["sr"]="Садржај", + ["sr-latn"]="Sadržaj", ["sv"]="Innehåll", ["tk"]="Mazmuny", ["tr"]="Fihrist", @@ -2933,6 +3303,7 @@ data.labels={ ["labels"]={ ["af"]="Figure", ["ar"]="الأشكال", + ["be"]="Спіс ілюстрацый", ["ca"]="Figures", ["cn"]="图形", ["cs"]="Seznam obrázků", @@ -2962,6 +3333,8 @@ data.labels={ ["ru"]="Список иллюстраций", ["sk"]="Zoznam obrázkov", ["sl"]="Slike", + ["sr"]="Слике", + ["sr-latn"]="Slike", ["sv"]="Figurer", ["tk"]="Suratlar", ["tr"]="Şekiller", @@ -2973,6 +3346,7 @@ data.labels={ ["labels"]={ ["af"]="Grafieke", ["ar"]="الرسوم", + ["be"]="Графiка", ["ca"]="Gràfiques", ["cn"]="图", ["cs"]="Seznam grafů", @@ -3002,6 +3376,8 @@ data.labels={ ["ru"]="Список графиков", ["sk"]="Zoznam grafov", ["sl"]="Slike", + ["sr"]="Графици", + ["sr-latn"]="Grafici", ["sv"]="Grafik", ["tk"]="Grafikler", ["tr"]="Grafikler", @@ -3013,6 +3389,8 @@ data.labels={ ["labels"]={ ["af"]="Indeks", ["ar"]="الفهرس", + ["be"]="Алфавітны паказальнік", + ["bg"]="Индэкс", ["ca"]="Índex alfabètic", ["cn"]="索引", ["cs"]="Rejstřík", @@ -3042,6 +3420,9 @@ data.labels={ ["ru"]="Алфавитный указатель", ["sk"]="Zoznam", ["sl"]="Stvarno kazalo", + ["sr"]="Индекс", + ["sr"]="Индекс појмова", + ["sr-latn"]="Indeks pojmova", ["sv"]="Sakregister", ["tk"]="Indeks", ["tr"]="İndex", @@ -3053,6 +3434,7 @@ data.labels={ ["labels"]={ ["af"]="Intermezzos", ["ar"]="فسح", + ["be"]="Спіс уставак", ["ca"]="Intermedis", ["cn"]="퉣", ["cs"]="Intermezza", @@ -3081,6 +3463,9 @@ data.labels={ ["ru"]="Список вставок", ["sk"]="Intermezzá", ["sl"]="Intermezzi", + ["sr"]="Интермеззи", + ["sr"]="Списак дигресија", + ["sr-latn"]="Spisak digresija", ["sv"]="Intermezzon", ["tk"]="Arakesmeler", ["tr"]="", @@ -3092,6 +3477,8 @@ data.labels={ ["labels"]={ ["af"]="Logos", ["ar"]="الشعارات", + ["be"]="Лагатыпы", + ["bg"]="Логотипи", ["ca"]="Logotips", ["cn"]="徽贬", ["cs"]="Loga", @@ -3121,6 +3508,8 @@ data.labels={ ["ru"]="Логотипы", ["sk"]="Logá", ["sl"]="Logotipi", + ["sr"]="Логотипи", + ["sr-latn"]="Logotipi", ["sv"]="Loggor", ["tk"]="Logolar", ["tr"]="Logolar", @@ -3158,6 +3547,8 @@ data.labels={ ["ru"]="", ["sk"]="Literatúra", ["sl"]="Literatura", + ["sr"]="Литература", + ["sr-latn"]="Literatura", ["sv"]="", ["tk"]="", ["tr"]="", @@ -3169,6 +3560,7 @@ data.labels={ ["labels"]={ ["af"]="Tabelle", ["ar"]="الجداول", + ["be"]="Спіс табліц", ["ca"]="Taules", ["cn"]="表格", ["cs"]="Seznam tabulek", @@ -3198,6 +3590,8 @@ data.labels={ ["ru"]="Список таблиц", ["sk"]="Zoznam tabuliek", ["sl"]="Tabele", + ["sr"]="Табеле", + ["sr-latn"]="Tabele", ["sv"]="Tabeller", ["tk"]="Tablisalar", ["tr"]="Tablolar", @@ -3209,6 +3603,8 @@ data.labels={ ["labels"]={ ["af"]="Eenhede", ["ar"]="الوحدات", + ["be"]="Адзінкі вымярэння", + ["bg"]="Адзінкі", ["ca"]="Unitats", ["cn"]="计量单位", ["cs"]="Jednotky", @@ -3238,6 +3634,8 @@ data.labels={ ["ru"]="Единицы измерения", ["sk"]="Jednotky", ["sl"]="Enote", + ["sr"]="Јединице", + ["sr-latn"]="Jedinice", ["sv"]="Enheter", ["tk"]="Birlikler", ["tr"]="Birimler", diff --git a/tex/context/base/mkiv/luat-cbk.lua b/tex/context/base/mkiv/luat-cbk.lua index d3184e1af..9fd55f3ec 100644 --- a/tex/context/base/mkiv/luat-cbk.lua +++ b/tex/context/base/mkiv/luat-cbk.lua @@ -333,7 +333,7 @@ nodes (in this case 121049).

The following code is kind of experimental. In the documents that describe the development of we report -on speed tests. One observation is thta it sometimes helps to +on speed tests. One observation is that it sometimes helps to restart the collector. Okay, experimental code has been removed, because messing aroudn with the gc is too unpredictable.

--ldx]]-- @@ -347,6 +347,8 @@ local garbagecollector = utilities.garbagecollector garbagecollector.enabled = false -- could become a directive garbagecollector.criterium = 4*1024*1024 +-- garbagecollector.enabled = true + -- Lua allocates up to 12 times the amount of memory needed for -- handling a string, and for large binary chunks (like chinese otf -- files) we get a prominent memory consumption. Even when a variable diff --git a/tex/context/base/mkiv/luat-sto.lua b/tex/context/base/mkiv/luat-sto.lua index bd52e9fe5..feb546400 100644 --- a/tex/context/base/mkiv/luat-sto.lua +++ b/tex/context/base/mkiv/luat-sto.lua @@ -94,22 +94,6 @@ if environment.initex then end --- to be tested with otf caching: - -function lua.collectgarbage(threshold) - local current = collectgarbage("count") - local threshold = threshold or 256 * 1024 - while true do - collectgarbage("collect") - local previous = collectgarbage("count") - if current - previous < threshold then - break - else - current = previous - end - end -end - statistics.register("stored bytecode data", function() local nofbytecodes = CONTEXTLMTXMODE > 0 and status.luastate.bytecodes or status.luabytecodes local nofmodules = (storage.nofmodules > 0 and storage.nofmodules) or (nofbytecodes - lua.firstbytecode - 1) diff --git a/tex/context/base/mkiv/meta-imp-txt.mkiv b/tex/context/base/mkiv/meta-imp-txt.mkiv index c814d2cb0..2c28acf72 100644 --- a/tex/context/base/mkiv/meta-imp-txt.mkiv +++ b/tex/context/base/mkiv/meta-imp-txt.mkiv @@ -80,16 +80,17 @@ \unexpanded\def\adaptparshape {\def\docommand##1% - {\ifcase\scratchcounter - \expandafter\appendtoks\space##1 \to\scratchtoks - \else - \advance\scratchcounter\minusone - \fi}% + {\doifsomething{##1}% + {\ifcase\scratchcounter\relax + \expandafter\appendtoks\space##1 \to\scratchtoks + \else + \advance\scratchcounter\minusone + \fi}}% \scratchcounter\prevgraf \doglobal\decrement(\totalparlines,\scratchcounter)% \multiply\scratchcounter\plustwo \scratchtoks\emptytoks - \expanded{\processseparatedlist[\the\partoks][\space]}\docommand + \expanded{\processseparatedlist[\the\partoks][\space]}\docommand % we can have two spaces \global\partoks\scratchtoks \parshape\totalparlines\the\partoks\relax} diff --git a/tex/context/base/mkiv/mult-sys.mkiv b/tex/context/base/mkiv/mult-sys.mkiv index b4c006234..7e9792720 100644 --- a/tex/context/base/mkiv/mult-sys.mkiv +++ b/tex/context/base/mkiv/mult-sys.mkiv @@ -34,6 +34,7 @@ \definesystemconstant {hans} \definesystemconstant {taco} +\definesystemconstant {wolfgang} %D First we define some system constants used for both the multi||lingual %D interface and multi||linguag typesetting. @@ -46,6 +47,7 @@ \definesystemconstant {ancientgreek} \definesystemconstant {agr} \definesystemconstant {ancientlatin} \definesystemconstant {ala} \definesystemconstant {arabic} \definesystemconstant {ar} +\definesystemconstant {belarussian} \definesystemconstant {be} \definesystemconstant {bokmal} \definesystemconstant {nb} \definesystemconstant {catalan} \definesystemconstant {ca} \definesystemconstant {chinese} \definesystemconstant {cn} @@ -71,6 +73,7 @@ \definesystemconstant {latin} \definesystemconstant {la} \definesystemconstant {lithuanian} \definesystemconstant {lt} \definesystemconstant {malayalam} \definesystemconstant {ml} +\definesystemconstant {macedonian} \definesystemconstant {mk} \definesystemconstant {norwegian} \definesystemconstant {no} \definesystemconstant {nynorsk} \definesystemconstant {nn} \definesystemconstant {persian} \definesystemconstant {pe} @@ -80,6 +83,7 @@ \definesystemconstant {russian} \definesystemconstant {ru} \definesystemconstant {slovak} \definesystemconstant {sk} \definesystemconstant {slovenian} \definesystemconstant {sl} +\definesystemconstant {serbian} \definesystemconstant {sr} \definesystemconstant {spanish} \definesystemconstant {es} \definesystemconstant {swedish} \definesystemconstant {sv} \definesystemconstant {thai} \definesystemconstant {th} % mojca mentioned it at BT2013 but we need more info diff --git a/tex/context/base/mkiv/node-nut.lua b/tex/context/base/mkiv/node-nut.lua index c73397305..9909194e7 100644 --- a/tex/context/base/mkiv/node-nut.lua +++ b/tex/context/base/mkiv/node-nut.lua @@ -200,7 +200,6 @@ nuts.unset_attribute = direct.unset_attribute nuts.usedlist = direct.usedlist nuts.uses_font = direct.uses_font nuts.vpack = direct.vpack -nuts.writable_spec = direct.writable_spec nuts.write = direct.write nuts.mlist_to_hlist = direct.mlist_to_hlist nuts.has_dimensions = direct.has_dimensions diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index ac7f9a639..b1533b02b 100644 Binary files a/tex/context/base/mkiv/status-files.pdf and b/tex/context/base/mkiv/status-files.pdf differ diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf index 6d34b7e13..a2c0ea9a5 100644 Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf differ diff --git a/tex/context/base/mkiv/syst-aux.lua b/tex/context/base/mkiv/syst-aux.lua index 2e50a9e5c..85604a232 100644 --- a/tex/context/base/mkiv/syst-aux.lua +++ b/tex/context/base/mkiv/syst-aux.lua @@ -130,115 +130,14 @@ local sentinel = spaces * (nohash^1 / "\\%0") local sargument = (single * digit)^1 local dargument = (double * digit)^1 --- first variant: --- --- local texpreamble = nil --- local usespaces = nil --- --- local pattern = Cs( -- ^-1 --- ( P("spaces") / function() usespaces = true return "" end )^0 --- * spaces --- * ( P("nospaces") / function() usespaces = false return "" end )^0 --- * spaces --- * ( P("global") / "\\global" )^0 --- * spaces --- * ( P("unexpanded") / "\\unexpanded" )^0 --- * spaces --- * Cc("\\expandafter\\") --- * spaces --- * ( P("expanded") / "e" )^0 --- * spaces --- * ( P((1-S(" #"))^1) / "def\\csname %0\\endcsname" ) --- * spaces --- * ( --- -- (double * digit)^1 * sentinel^-1 * double^-1 --- -- + (single * digit)^1 * sentinel^-1 * single^-1 --- ( P("[") * dargument * P("]") + dargument)^1 * sentinel^-1 * double^-1 --- + ( P("[") * sargument * P("]") + sargument)^1 * sentinel^-1 * single^-1 --- + sentinel^-1 * (double+single)^-1 --- ) --- ) --- --- local ctx_dostarttexdefinition = context.dostarttexdefinition --- --- local function texdefinition_one(str) --- usespaces = nil --- texpreamble = lpegmatch(pattern,str) --- if usespaces == true then --- setcatcode(32,10) -- space --- setcatcode(13, 5) -- endofline --- elseif usespaces == false then --- setcatcode(32, 9) -- ignore --- setcatcode(13, 9) -- ignore --- else --- -- this is default --- -- setcatcode(32,10) -- space --- -- setcatcode(13, 9) -- ignore --- end --- ctx_dostarttexdefinition() --- end --- --- local function texdefinition_two() --- context(texpreamble) --- end - --- second variant: --- --- -- default: --- -- --- -- setcatcode(32,10) -- space --- -- setcatcode(13, 9) -- ignore --- --- local function catcodes_s() --- setcatcode(32,10) -- space --- setcatcode(13, 5) -- endofline --- return "" --- end --- --- local function catcodes_n() --- setcatcode(32, 9) -- ignore --- setcatcode(13, 9) -- ignore --- return "" --- end --- --- local pattern = Cs( -- ^-1 --- ( P("spaces") * space / catcodes_s )^0 --- * spaces * ( P("nospaces") * space / catcodes_n )^0 --- * spaces * ( P("global") * space / "\\global" )^0 --- * spaces * ( P("unexpanded") * space / "\\unexpanded" )^0 --- * spaces * Cc("\\expandafter\\") --- * spaces * ( P("expanded") / "e" )^0 --- * spaces * ( P((1-S(" #["))^1) / "def\\csname %0\\endcsname" ) --- * spaces * ( --- -- (double * digit)^1 * sentinel^-1 * double^-1 --- -- + (single * digit)^1 * sentinel^-1 * single^-1 --- ( P("[") * dargument * P("]") + dargument)^1 * sentinel^-1 * double^-1 --- + ( P("[") * sargument * P("]") + sargument)^1 * sentinel^-1 * single^-1 --- + sentinel^-1 * (double+single)^-1 --- ) --- ) --- --- local texpreamble = nil --- --- local ctx_dostarttexdefinition = context.dostarttexdefinition --- --- local function texdefinition_one(str) --- texpreamble = lpegmatch(pattern,str) --- ctx_dostarttexdefinition() --- end --- --- local function texdefinition_two() --- context(texpreamble) --- end - -- third variant: -local global = nil -local unexpanded = nil -local expanded = nil -local optional = nil -local csname = nil -local rest = nil +local global = nil +local protected = nil +local expanded = nil +local optional = nil +local csname = nil +local rest = nil local function catcodes_s() setcatcode(32,10) -- space @@ -262,28 +161,6 @@ local option = ( + P("sixtuple") ) * (P("empty") + P("argument")) --- local pattern = ( --- ( P("spaces") * space / catcodes_s )^0 --- * spaces * ( P("nospaces") * space / catcodes_n )^0 --- * spaces * ( P("global") * space * Cc(true) + Cc(false) ) --- * spaces * ( P("unexpanded") * space * Cc(true) + Cc(false) ) --- * spaces * ( P("expanded") * space * Cc(true) + Cc(false) ) --- * spaces * ( C(option) * space + Cc(false) ) --- * spaces * ( C((1-S(" #["))^1) ) --- * spaces * Cs( --- ( P("[") * dargument * P("]") + dargument)^1 * sentinel^-1 * double^-1 --- + ( P("[") * sargument * P("]") + sargument)^1 * sentinel^-1 * single^-1 --- + sentinel^-1 * (double+single)^-1 --- ) --- ) --- --- local ctx_dostarttexdefinition = context.dostarttexdefinition --- --- local function texdefinition_one(str) --- global, unexpanded, expanded, optional, csname, rest = lpegmatch(pattern,str) --- ctx_dostarttexdefinition() --- end - local pattern = ( ( spaces * ( @@ -313,10 +190,10 @@ local pattern = ( local ctx_dostarttexdefinition = context.dostarttexdefinition local function texdefinition_one(str) - global = false - unexpanded = false - expanded = false - optional = false + global = false + protected = false + expanded = false + optional = false csname, rest = lpegmatch(pattern,str) ctx_dostarttexdefinition() end @@ -324,7 +201,7 @@ end local function texdefinition_two() if optional then context ( - (unexpanded and [[\unexpanded]] or "") .. + (protected and [[\protected]] or "") .. [[\expandafter]] .. (global and [[\xdef]] or [[\edef]]) .. [[\csname ]] .. csname .. [[\endcsname{\expandafter\noexpand\expandafter\do]] .. optional .. [[\csname _do_]] .. csname .. [[_\endcsname}\expandafter]] .. (global and [[\gdef]] or [[\edef]]) .. @@ -333,7 +210,7 @@ local function texdefinition_two() ) else context ( - (unexpanded and [[\unexpanded]] or "") .. + (protected and [[\protected]] or "") .. [[\expandafter]] .. (global and (expanded and [[\xdef]] or [[\gdef]]) or (expanded and [[\edef]] or [[\def]])) .. [[\csname ]] .. csname .. [[\endcsname ]] .. rest diff --git a/tex/context/base/mkxl/attr-col.lmt b/tex/context/base/mkxl/attr-col.lmt new file mode 100644 index 000000000..9c542a942 --- /dev/null +++ b/tex/context/base/mkxl/attr-col.lmt @@ -0,0 +1,666 @@ +if not modules then modules = { } end modules ['attr-col'] = { + version = 1.001, + comment = "companion to attr-col.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- this module is being reconstructed and code will move to other places +-- we can also do the nsnone via a metatable and then also se index 0 + +-- list could as well refer to the tables (instead of numbers that +-- index into another table) .. depends on what we need + +local type, tonumber = type, tonumber +local concat = table.concat +local min, max, floor, mod = math.min, math.max, math.floor, math.mod + +local attributes = attributes +local nodes = nodes +local utilities = utilities +local logs = logs +local backends = backends +local storage = storage +local context = context +local tex = tex + +local variables = interfaces.variables +local v_yes = variables.yes +local v_no = variables.no + +local p_split_comma = lpeg.tsplitat(",") +local p_split_colon = lpeg.splitat(":") +local lpegmatch = lpeg.match + +local allocate = utilities.storage.allocate +local setmetatableindex = table.setmetatableindex + +local report_attributes = logs.reporter("attributes","colors") +local report_colors = logs.reporter("colors","support") +local report_transparencies = logs.reporter("transparencies","support") + +-- todo: document this but first reimplement this as it reflects the early +-- days of luatex / mkiv and we have better ways now + +-- nb: attributes: color etc is much slower than normal (marks + literals) but ... +-- nb. too many "0 g"s + +local states = attributes.states +local nodeinjections = backends.nodeinjections +local registrations = backends.registrations +local unsetvalue = attributes.unsetvalue + +local enableaction = nodes.tasks.enableaction +local setaction = nodes.tasks.setaction + +local registerstorage = storage.register +local formatters = string.formatters + +local interfaces = interfaces +local implement = interfaces.implement + +local texgetattribute = tex.getattribute + +-- We can distinguish between rules and glyphs but it's not worth the trouble. A +-- first implementation did that and while it saves a bit for glyphs and rules, it +-- costs more resourses for transparencies. So why bother. + +-- +-- colors +-- + +-- we can also collapse the two attributes: n, n+1, n+2 and then +-- at the tex end add 0, 1, 2, but this is not faster and less +-- flexible (since sometimes we freeze color attribute values at +-- the lua end of the game) +-- +-- we also need to store the colorvalues because we need then in mp +-- +-- This is a compromis between speed and simplicity. We used to store the +-- values and data in one array, which made in neccessary to store the +-- converters that need node constructor into strings and evaluate them +-- at runtime (after reading from storage). Think of: +-- +-- colors.strings = colors.strings or { } +-- +-- if environment.initex then +-- colors.strings[color] = "return colors." .. colorspace .. "(" .. concat({...},",") .. ")" +-- end +-- +-- registerstorage("attributes/colors/data", colors.strings, "attributes.colors.data") -- evaluated +-- +-- We assume that only processcolors are defined in the format. + +attributes.colors = attributes.colors or { } +local colors = attributes.colors + +local a_color = attributes.private('color') +local a_selector = attributes.private('colormodel') + +colors.data = allocate() +colors.values = colors.values or { } +colors.registered = colors.registered or { } +colors.weightgray = true +colors.attribute = a_color +colors.selector = a_selector +colors.default = 1 +colors.main = nil +colors.triggering = true +colors.supported = true +colors.model = "all" + +local data = colors.data +local values = colors.values +local registered = colors.registered + +local cmykrgbmode = 0 -- only for testing, already defined colors are not affected + +local numbers = attributes.numbers +local list = attributes.list + +registerstorage("attributes/colors/values", values, "attributes.colors.values") +registerstorage("attributes/colors/registered", registered, "attributes.colors.registered") + +directives.register("colors.cmykrgbmode", function(v) cmykrgbmode = tonumber(v) or 0 end) + +local f_colors = { + rgb = formatters["r:%s:%s:%s"], + cmyk = formatters["c:%s:%s:%s:%s"], + gray = formatters["s:%s"], + spot = formatters["p:%s:%s:%s:%s"], +} + +local models = { + [interfaces.variables.none] = unsetvalue, + black = unsetvalue, + bw = unsetvalue, + all = 1, + gray = 2, + rgb = 3, + cmyk = 4, +} + +local function rgbtocmyk(r,g,b) -- we could reduce + if not r then + return 0, 0, 0 + else + return 1-r, 1-g, 1-b, 0 + end +end + +local function cmyktorgb(c,m,y,k) + if not c then + return 0, 0, 0, 1 + elseif cmykrgbmode == 1 then + local d = 1.0 - k + return 1.0 - min(1.0,c*d+k), 1.0 - min(1.0,m*d+k), 1.0 - min(1.0,y*d+k) + else + return 1.0 - min(1.0,c +k), 1.0 - min(1.0,m +k), 1.0 - min(1.0,y +k) + end +end + +local function rgbtogray(r,g,b) + if not r then + return 0 + end + local w = colors.weightgray + if w == true then + return .30*r + .59*g + .11*b + elseif not w then + return r/3 + g/3 + b/3 + else + return w[1]*r + w[2]*g + w[3]*b + end +end + +local function cmyktogray(c,m,y,k) + return rgbtogray(cmyktorgb(c,m,y,k)) +end + +-- http://en.wikipedia.org/wiki/HSI_color_space +-- http://nl.wikipedia.org/wiki/HSV_(kleurruimte) + +-- h /= 60; // sector 0 to 5 +-- i = floor( h ); +-- f = h - i; // factorial part of h + +local function hsvtorgb(h,s,v) + if s > 1 then + s = 1 + elseif s < 0 then + s = 0 + elseif s == 0 then + return v, v, v + end + if v > 1 then + s = 1 + elseif v < 0 then + v = 0 + end + if h < 0 then + h = 0 + elseif h >= 360 then + h = mod(h,360) + end + local hd = h / 60 + local hi = floor(hd) + local f = hd - hi + local p = v * (1 - s) + local q = v * (1 - f * s) + local t = v * (1 - (1 - f) * s) + if hi == 0 then + return v, t, p + elseif hi == 1 then + return q, v, p + elseif hi == 2 then + return p, v, t + elseif hi == 3 then + return p, q, v + elseif hi == 4 then + return t, p, v + elseif hi == 5 then + return v, p, q + else + print("error in hsv -> rgb",h,s,v) + return 0, 0, 0 + end +end + +local function rgbtohsv(r,g,b) + local offset, maximum, other_1, other_2 + if r >= g and r >= b then + offset, maximum, other_1, other_2 = 0, r, g, b + elseif g >= r and g >= b then + offset, maximum, other_1, other_2 = 2, g, b, r + else + offset, maximum, other_1, other_2 = 4, b, r, g + end + if maximum == 0 then + return 0, 0, 0 + end + local minimum = other_1 < other_2 and other_1 or other_2 + if maximum == minimum then + return 0, 0, maximum + end + local delta = maximum - minimum + return (offset + (other_1-other_2)/delta)*60, delta/maximum, maximum +end + +local function graytorgb(s) -- unweighted + return 1-s, 1-s, 1-s +end + +local function hsvtogray(h,s,v) + return rgb_to_gray(hsv_to_rgb(h,s,v)) +end + +local function graytohsv(s) + return 0, 0, s +end + +local function hwbtorgb(hue,black,white) + local r, g, b = hsvtorgb(hue,1,.5) + local f = 1 - white - black + return f * r + white, f * g + white , f * b + white +end + +colors.rgbtocmyk = rgbtocmyk +colors.rgbtogray = rgbtogray +colors.cmyktorgb = cmyktorgb +colors.cmyktogray = cmyktogray +colors.rgbtohsv = rgbtohsv +colors.hsvtorgb = hsvtorgb +colors.hwbtorgb = hwbtorgb +colors.hsvtogray = hsvtogray +colors.graytohsv = graytohsv + +-- we can share some *data by using s, rgb and cmyk hashes, but +-- normally the amount of colors is not that large; storing the +-- components costs a bit of extra runtime, but we expect to gain +-- some back because we have them at hand; the number indicates the +-- default color space + +function colors.gray(s) + return { 2, s, s, s, s, 0, 0, 0, 1-s } +end + +function colors.rgb(r,g,b) + local s = rgbtogray(r,g,b) + local c, m, y, k = rgbtocmyk(r,g,b) + return { 3, s, r, g, b, c, m, y, k } +end + +function colors.cmyk(c,m,y,k) + local s = cmyktogray(c,m,y,k) + local r, g, b = cmyktorgb(c,m,y,k) + return { 4, s, r, g, b, c, m, y, k } +end + +--~ function colors.spot(parent,f,d,p) +--~ return { 5, .5, .5, .5, .5, 0, 0, 0, .5, parent, f, d, p } +--~ end + +function colors.spot(parent,f,d,p) + -- inspect(parent) inspect(f) inspect(d) inspect(p) + if type(p) == "number" then + local n = list[numbers.color][parent] -- hard coded ref to color number + if n then + local v = values[n] + if v then + -- the via cmyk hack is dirty, but it scales better + local c, m, y, k = p*v[6], p*v[7], p*v[8], p*v[9] + local r, g, b = cmyktorgb(c,m,y,k) + local s = cmyktogray(c,m,y,k) + return { 5, s, r, g, b, c, m, y, k, parent, f, d, p } + end + end + else + -- todo, multitone (maybe p should be a table) + local ps = lpegmatch(p_split_comma,p) + local ds = lpegmatch(p_split_comma,d) + local c, m, y, k = 0, 0, 0, 0 + local done = false + for i=1,#ps do + local p = tonumber(ps[i]) + local d = ds[i] + if p and d then + local n = list[numbers.color][d] -- hard coded ref to color number + if n then + local v = values[n] + if v then + c = c + p*v[6] + m = m + p*v[7] + y = y + p*v[8] + k = k + p*v[9] + done = true + end + end + end + end + if done then + local r, g, b = cmyktorgb(c,m,y,k) + local s = cmyktogray(c,m,y,k) + local f = tonumber(f) + return { 5, s, r, g, b, c, m, y, k, parent, f, d, p } + end + end + return { 5, .5, .5, .5, .5, 0, 0, 0, .5, parent, f, d, p } +end + +local function graycolor(...) graycolor = nodeinjections.graycolor return graycolor(...) end +local function rgbcolor (...) rgbcolor = nodeinjections.rgbcolor return rgbcolor (...) end +local function cmykcolor(...) cmykcolor = nodeinjections.cmykcolor return cmykcolor(...) end +local function spotcolor(...) spotcolor = nodeinjections.spotcolor return spotcolor(...) end + +local function extender(colors,key) + if colors.supported and key == "none" then + local d = graycolor(0) + colors.none = d + return d + end +end + +local function reviver(data,n) + if colors.supported then + local v = values[n] + local d + if not v then + local gray = graycolor(0) + d = { gray, gray, gray, gray } + report_attributes("unable to revive color %a",n) + else + local model = colors.forcedmodel(v[1]) + if model == 2 then + local gray = graycolor(v[2]) + d = { gray, gray, gray, gray } + elseif model == 3 then + local gray = graycolor(v[2]) + local rgb = rgbcolor(v[3],v[4],v[5]) + local cmyk = cmykcolor(v[6],v[7],v[8],v[9]) + d = { rgb, gray, rgb, cmyk } + elseif model == 4 then + local gray = graycolor(v[2]) + local rgb = rgbcolor(v[3],v[4],v[5]) + local cmyk = cmykcolor(v[6],v[7],v[8],v[9]) + d = { cmyk, gray, rgb, cmyk } + elseif model == 5 then + local spot = spotcolor(v[10],v[11],v[12],v[13]) + -- d = { spot, gray, rgb, cmyk } + d = { spot, spot, spot, spot } + end + end + data[n] = d + return d + end +end + +setmetatableindex(colors, extender) +setmetatableindex(colors.data, reviver) + +function colors.filter(n) + return concat(data[n],":",5) +end + +-- unweighted (flat) gray could be another model but a bit work as we need to check: +-- +-- attr-col colo-ini colo-run +-- grph-inc grph-wnd +-- lpdf-col lpdf-fmt lpdf-fld lpdf-grp +-- meta-pdf meta-pdh mlib-pps +-- +-- but as we never needed it we happily delay that. + +function colors.setmodel(name,weightgray) + if weightgray == true or weightgray == v_yes then + weightgray = true + elseif weightgray == false or weightgray == v_no then + weightgray = false + else + local r, g, b = lpegmatch(p_split_colon,weightgray) + if r and g and b then + weightgray = { r, g, b } + else + weightgray = true + end + end + local default = models[name] or 1 + + colors.model = name -- global, not useful that way + colors.default = default -- global + colors.weightgray = weightgray -- global + + -- avoid selective checking is no need for it + + local forced = colors.forced + + if forced == nil then + -- unset + colors.forced = default + elseif forced == false then + -- assumed mixed + elseif forced ~= default then + -- probably mixed + colors.forced = false + else + -- stil the same + end + return default +end + +function colors.register(name, colorspace, ...) -- passing 9 vars is faster (but not called that often) + local stamp = f_colors[colorspace](...) + local color = registered[stamp] + if not color then + color = #values + 1 + values[color] = colors[colorspace](...) + registered[stamp] = color + -- colors.reviver(color) + end + if name then + list[a_color][name] = color -- not grouped, so only global colors + end + return registered[stamp] +end + +function colors.value(id) + return values[id] +end + +attributes.colors.handler = nodes.installattributehandler { + name = "color", + namespace = colors, + initializer = states.initialize, + finalizer = states.finalize, + processor = states.selective, + resolver = function() return colors.main end, +} + +function colors.enable(value) + setaction("shipouts","attributes.colors.handler",not (value == false or not colors.supported)) +end + +function colors.forcesupport(value) -- can move to attr-div + colors.supported = value + report_colors("color is %ssupported",value and "" or "not ") + colors.enable(value) +end + +function colors.toattributes(name) + local mc = list[a_color][name] + local mm = texgetattribute(a_selector) + return (mm == unsetvalue and 1) or mm or 1, mc or list[a_color][1] or unsetvalue +end + +-- transparencies + +local a_transparency = attributes.private('transparency') + +attributes.transparencies = attributes.transparencies or { } +local transparencies = attributes.transparencies +transparencies.registered = transparencies.registered or { } +transparencies.data = allocate() +transparencies.values = transparencies.values or { } +transparencies.triggering = true +transparencies.attribute = a_transparency +transparencies.supported = true + +local registered = transparencies.registered -- we could use a 2 dimensional table instead +local data = transparencies.data +local values = transparencies.values +local f_transparency = formatters["%s:%s"] + +registerstorage("attributes/transparencies/registered", registered, "attributes.transparencies.registered") +registerstorage("attributes/transparencies/values", values, "attributes.transparencies.values") + +local function inject_transparency(...) + inject_transparency = nodeinjections.transparency + return inject_transparency(...) +end + +local function register_transparency(...) + register_transparency = registrations.transparency + return register_transparency(...) +end + +function transparencies.register(name,a,t,force) -- name is irrelevant here (can even be nil) + -- Force needed here for metapost converter. We could always force + -- but then we'd end up with transparencies resources even if we + -- would not use transparencies (but define them only). This is + -- somewhat messy. + local stamp = f_transparency(a,t) + local n = registered[stamp] + if not n then + n = #values + 1 + values[n] = { a, t } + registered[stamp] = n + if force then + register_transparency(n,a,t) + end + elseif force and not data[n] then + register_transparency(n,a,t) + end + if name then + list[a_transparency][name] = n -- not grouped, so only global transparencies + end + return registered[stamp] +end + +local function extender(transparencies,key) + if colors.supported and key == "none" then + local d = inject_transparency(0) + transparencies.none = d + return d + end +end + +local function reviver(data,n) + if n and transparencies.supported then + local v = values[n] + local d + if not v then + d = inject_transparency(0) + else + d = inject_transparency(n) + register_transparency(n,v[1],v[2]) + end + data[n] = d + return d + else + return "" + end +end + +setmetatableindex(transparencies,extender) +setmetatableindex(transparencies.data,reviver) -- register if used + +-- check if there is an identity + +function transparencies.value(id) + return values[id] +end + +attributes.transparencies.handler = nodes.installattributehandler { + name = "transparency", + namespace = transparencies, + initializer = states.initialize, + finalizer = states.finalize, + processor = states.process, +} + +function transparencies.enable(value) -- nil is enable + setaction("shipouts","attributes.transparencies.handler",not (value == false or not transparencies.supported)) +end + +function transparencies.forcesupport(value) -- can move to attr-div + transparencies.supported = value + report_transparencies("transparency is %ssupported",value and "" or "not ") + transparencies.enable(value) +end + +function transparencies.toattribute(name) + return list[a_transparency][name] or unsetvalue +end + +--- colorintents: overprint / knockout + +attributes.colorintents = attributes.colorintents or { } +local colorintents = attributes.colorintents +colorintents.data = allocate() -- colorintents.data or { } +colorintents.attribute = attributes.private('colorintent') + +colorintents.registered = allocate { + overprint = 1, + knockout = 2, +} + +local data, registered = colorintents.data, colorintents.registered + +local function extender(colorintents,key) + if key == "none" then + local d = data[2] + colorintents.none = d + return d + end +end + +local function reviver(data,n) + if n == 1 then + local d = nodeinjections.overprint() -- called once + data[1] = d + return d + elseif n == 2 then + local d = nodeinjections.knockout() -- called once + data[2] = d + return d + end +end + +setmetatableindex(colorintents, extender) +setmetatableindex(colorintents.data, reviver) + +function colorintents.register(stamp) + return registered[stamp] or registered.overprint +end + +colorintents.handler = nodes.installattributehandler { + name = "colorintent", + namespace = colorintents, + initializer = states.initialize, + finalizer = states.finalize, + processor = states.process, +} + +function colorintents.enable() + enableaction("shipouts","attributes.colorintents.handler") +end + +-- interface + +implement { name = "enablecolor", onlyonce = true, actions = colors.enable } +implement { name = "enabletransparency", onlyonce = true, actions = transparencies.enable } +implement { name = "enablecolorintents", onlyonce = true, actions = colorintents.enable } + +--------- { name = "registercolor", actions = { colors .register, context }, arguments = "string" } +--------- { name = "registertransparency", actions = { transparencies.register, context }, arguments = "string" } +implement { name = "registercolorintent", actions = { colorintents .register, context }, arguments = "string" } diff --git a/tex/context/base/mkxl/attr-col.mkxl b/tex/context/base/mkxl/attr-col.mkxl index c75f448e9..0c23f2ce3 100644 --- a/tex/context/base/mkxl/attr-col.mkxl +++ b/tex/context/base/mkxl/attr-col.mkxl @@ -13,7 +13,7 @@ \writestatus{loading}{ConTeXt Attribute Macros / Color} -\registerctxluafile{attr-col}{} +\registerctxluafile{attr-col}{autosuffix} \unprotect diff --git a/tex/context/base/mkxl/cont-log.mkxl b/tex/context/base/mkxl/cont-log.mkxl index f35c6f169..4df509f60 100644 --- a/tex/context/base/mkxl/cont-log.mkxl +++ b/tex/context/base/mkxl/cont-log.mkxl @@ -139,20 +139,27 @@ \def\syst_logos_meta_hyphen % there is no hyphenchar in this font {\discretionary{\vrule\s!height.33\emwidth\s!depth-.27\emwidth\s!width.33\emwidth}{}{}} -\frozen\instance\protected\def\MetaFont +\frozen\instance\protected\def\MetaFontLogo {\dontleavehmode \begingroup \setMFPfont META\syst_logos_meta_hyphen FONT% \endgroup} -% \protected\def\MetaPost +\protected\def\MetaPostLogo + {\dontleavehmode + \begingroup + \setMFPfont META\syst_logos_meta_hyphen POST% + \endgroup} + +% \protected\def\MetaFunLogo % {\dontleavehmode % \begingroup -% \setMFPfont META\syst_logos_meta_hyphen POST% +% \setMFPfont META\syst_logos_meta_hyphen FUN% % \endgroup} -% + % As decided on the ConText Meeting 2013 the logo has been simplified: +\instance\protected\def\MetaFont{MetaFont} \instance\protected\def\MetaPost{MetaPost} \instance\protected\def\MetaFun {MetaFun} diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index 9447d0f35..26de0b443 100644 --- a/tex/context/base/mkxl/cont-new.mkxl +++ b/tex/context/base/mkxl/cont-new.mkxl @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2021.02.20 16:46} +\newcontextversion{2021.02.23 17:41} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl index 8a983dd9f..f72721c9c 100644 --- a/tex/context/base/mkxl/context.mkxl +++ b/tex/context/base/mkxl/context.mkxl @@ -29,7 +29,7 @@ %D {YYYY.MM.DD HH:MM} format. \immutable\edef\contextformat {\jobname} -\immutable\edef\contextversion{2021.02.20 16:46} +\immutable\edef\contextversion{2021.02.23 17:41} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error diff --git a/tex/context/base/mkxl/driv-shp.lmt b/tex/context/base/mkxl/driv-shp.lmt index 945d3c963..7bbe0a8e9 100644 --- a/tex/context/base/mkxl/driv-shp.lmt +++ b/tex/context/base/mkxl/driv-shp.lmt @@ -8,7 +8,6 @@ if not modules then modules = { } end modules ['driv-shp'] = { } local type, next = type, next -local round = math.round local setmetatableindex = table.setmetatableindex local formatters = string.formatters @@ -16,7 +15,11 @@ local concat = table.concat local keys = table.keys local sortedhash = table.sortedhash local splitstring = string.split +local find = string.find +local stripstring = string.strip local idiv = number.idiv +local sequenced = table.sequenced +local round = math.round local extract = bit32.extract local nuts = nodes.nuts @@ -1312,7 +1315,8 @@ do ----- tonut = nodes.tonut local properties = nodes.properties.data - local flush = texio.write_nl + local flush = texio.write + local flushline = texio.write_nl local periods = utilities.strings.newrepeater(".") @@ -1321,12 +1325,22 @@ do if p then local done = false for k, v in sortedhash(p) do - if done then - flush("\n") - else - done = true + local t = type(v) +-- if done then +-- flushline("\n") +-- else +-- done = true +-- end + if t == "string" then + if find(v,"[\n\r]") then + v = "\n" .. stripstring(v) .. "\n" + end + elseif t == "table" then + v = sequenced(v) + elseif t ~= "number" and t ~= "boolean" then + v = "<" .. tostring(v) .. ">" end - flush(periods[l+1] .. " " .. k .. " = " .. tostring(v)) + flushline(periods[l+1] .. " " .. k .. " = " .. v) end end end @@ -1338,7 +1352,7 @@ do callback.register("show_whatsit",function(n,l) local s = nodes.whatsitcodes[n.subtype] - texio.write(" [" .. s .. "]") + flush(" [" .. s .. "]") local w = whatsittracers[s] if w then w(n,l) diff --git a/tex/context/base/mkxl/font-mps.lmt b/tex/context/base/mkxl/font-mps.lmt index d6bf888c1..8cab9cf5c 100644 --- a/tex/context/base/mkxl/font-mps.lmt +++ b/tex/context/base/mkxl/font-mps.lmt @@ -280,7 +280,7 @@ local s_nothing = "(origin scaled 10)" local sc = 10 local fc = number.dimenfactors.bp -function metapost.glyph(kind,font,char,advance,shift,ex) +local function glyph(kind,font,char,advance,shift,ex) local character = characters[font][char] if character then local index = character.index @@ -312,6 +312,8 @@ function metapost.glyph(kind,font,char,advance,shift,ex) end end +metapost.glyph = glyph + local kind = "" local buffer = { } local b = 0 @@ -323,7 +325,7 @@ end local function flushcharacter(current, pos_h, pos_v, pod_r, font, char) local char, font = isglyph(current) - local code = metapost.glyph(kind,font,char,pos_h*fc,pos_v*fc,getexpansion(current)) + local code = glyph(kind,font,char,pos_h*fc,pos_v*fc,getexpansion(current)) if code then b = b + 1 buffer[b] = code @@ -333,7 +335,7 @@ end local function flushrule(current, pos_h, pos_v, pos_r, size_h, size_v, subtype) if subtype == normalrule_code then b = b + 1 - buffer[b] = f_rule("f",pos_h*fc,pos_v*fc,size_h*fc,size_v*fc) + buffer[b] = f_rule(kind,pos_h*fc,pos_v*fc,size_h*fc,size_v*fc) elseif subtype == outlinerule_code then b = b + 1 buffer[b] = f_rule("d",pos_h*fc,pos_v*fc,size_h*fc,size_v*fc) @@ -350,11 +352,11 @@ local function flushrule(current, pos_h, pos_v, pos_r, size_h, size_v, subtype) end local function flushsimplerule(pos_h, pos_v, pos_r, size_h, size_v) - flush_rule(false,pos_h,pos_v,pos_r,size_h,size_v,normalrule_code) + flushrule(false,pos_h,pos_v,pos_r,size_h,size_v,normalrule_code) end local function flushspecialrule(pos_h, pos_v, pos_r, w, h, d, l, outline) - flush_rule(false,pos_h,pos_v-d,pos_r,w,h+d,outline and outlinerule_code or normalrule_code) + flushrule(false,pos_h,pos_v-d,pos_r,w,h+d,outline and outlinerule_code or normalrule_code) end -- installer @@ -373,6 +375,7 @@ drivers.install { local ury = bb[4] * fc b = b + 1 buffer[b] = f_bounds(llx,lly,urx,ury) + -- inspect(buffer) end, }, flushers = { diff --git a/tex/context/base/mkxl/grph-trf.mkxl b/tex/context/base/mkxl/grph-trf.mkxl index 356b4a8f8..c7e0f5e2f 100644 --- a/tex/context/base/mkxl/grph-trf.mkxl +++ b/tex/context/base/mkxl/grph-trf.mkxl @@ -560,7 +560,7 @@ \def\grph_scale_fast_yes#1% {\edef\finalscaleboxxscale{\withoutpt\the\dimexpr#1\onepoint/1000\relax}% brrr \let\finalscaleboxyscale\finalscaleboxxscale - \dowithnextboxcs\grph_scale_fast_finish\hbox} + \dowithnextboxcs\grph_scale_fast_finish\hbox} % container ? \def\grph_scale_fast_finish {\grph_scale_apply @@ -571,7 +571,7 @@ {\bgroup \edef\p_sx{#1}% \edef\p_sy{#2}% - \dowithnextboxcs\grph_scale_fast_sx_xy_finish\hbox} + \dowithnextboxcs\grph_scale_fast_sx_xy_finish\hbox} % container? \def\grph_scale_fast_sx_xy_finish {\grph_scale_check_sx_sy @@ -656,13 +656,13 @@ \wd\nextbox\zeropoint \ht\nextbox\zeropoint \dp\nextbox\zeropoint - \setbox\nextbox\hcontainer + \setbox\nextbox\naturalhpack {\advance\scratchwidth \dimexpr\clippingparameter\c!leftoffset +\clippingparameter\c!rightoffset\relax \advance\scratchheight\dimexpr\clippingparameter\c!bottomoffset+\clippingparameter\c!topoffset \relax \dostartclipping{\clippingparameter\c!mp}\scratchwidth\scratchheight \box\nextbox \dostopclipping}% - \setbox\nextbox\naturalhpack + \setbox\nextbox\hcontainer {\hskip-\clippingparameter\c!leftoffset \lower \clippingparameter\c!bottomoffset \box\nextbox}% diff --git a/tex/context/base/mkxl/lang-def.mkxl b/tex/context/base/mkxl/lang-def.mkxl index f74fb5339..85c1f3ac7 100644 --- a/tex/context/base/mkxl/lang-def.mkxl +++ b/tex/context/base/mkxl/lang-def.mkxl @@ -309,8 +309,55 @@ \c!date={\v!day,\space,\v!month,\space,\v!year}, \s!patterns=\s!uk] -\installlanguage [\s!russian] [\s!ru] -\installlanguage [\s!ukrainian] [\s!ua] +\installlanguage + [\s!be] + [\s!lefthyphenmin=2, + \s!righthyphenmin=2, + \c!spacing=\v!packed, + \c!leftsentence=\leftguillemot, + \c!rightsentence=\rightguillemot, + \c!leftsubsentence=\lowerleftdoubleninequote, + \c!rightsubsentence=\upperrightdoublesixquote, + \c!leftquote=\lowerleftdoubleninequote, + \c!rightquote=\upperrightdoublesixquote, + \c!leftquotation=\leftguillemot, + \c!rightquotation=\rightguillemot, + \c!date={\v!day,\space,\v!month,\space,\v!year}] + + \installlanguage + [\s!sr] + [\c!spacing=\v!packed, + \c!leftsentence=\hbox{\endash\space}, + \c!rightsentence=\hbox{\space\endash}, + \c!leftsubsentence=\endash, + \c!rightsubsentence=\endash, + \c!leftquote=\upperrightsingleninequote, + \c!rightquote=\upperrightsingleninequote, + \c!leftquotation=\lowerleftdoubleninequote, + \c!rightquotation=\upperleftdoubleninequote, + \c!date={\v!day,{.},\space,\v!month,\space,\v!year}] + +\installlanguage + [\s!mk] + [\c!spacing=\v!packed, + \c!leftsentence=\endash, + \c!rightsentence=\endash, + \c!leftsubsentence=\endash, + \c!rightsubsentence=\endash, + \c!leftquote=\upperleftsingleninequote, + \c!rightquote=\upperrightsinglesixquote, + \c!leftquotation=\lowerleftdoubleninequote, + \c!rightquotation=\upperrightdoublesixquote, + \c!date={\v!day,\space,\v!month,\space,\v!year}] + +\installlanguage [\s!russian] [\s!ru] +\installlanguage [\s!ukrainian] [\s!ua] +\installlanguage [\s!belarussian][\s!be] +\installlanguage [\s!serbian] [\s!sr] +\installlanguage [\s!sr-latn] [\s!sr] +\installlanguage [\s!sr-cyrl] [\s!sr] +\installlanguage [\s!macedonian] [\s!mk] + % Uralic Languages: Cheremiss, Estonian, Finnish, Karelian, Laap, % Mordvinian, Permian tongues, Hungarian, Ostyak, Vogul, Samoyed diff --git a/tex/context/base/mkxl/luat-cbk.lmt b/tex/context/base/mkxl/luat-cbk.lmt new file mode 100644 index 000000000..744d12e27 --- /dev/null +++ b/tex/context/base/mkxl/luat-cbk.lmt @@ -0,0 +1,287 @@ +if not modules then modules = { } end modules ['luat-cbk'] = { + version = 1.001, + comment = "companion to luat-lib.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local insert, remove, concat = table.insert, table.remove, table.concat +local find, format = string.find, string.format +local collectgarbage, type, next = collectgarbage, type, next +local round = math.round +local sortedhash, sortedkeys, tohash = table.sortedhash, table.sortedkeys, table.tohash + +--[[ldx-- +

Callbacks are the real asset of . They permit you to hook +your own code into the engine. Here we implement a few handy +auxiliary functions.

+--ldx]]-- + +callbacks = callbacks or { } +local callbacks = callbacks + +--[[ldx-- +

When you (temporarily) want to install a callback function, and after a +while wants to revert to the original one, you can use the following two +functions. This only works for non-frozen ones.

+--ldx]]-- + +local trace_callbacks = false trackers.register("system.callbacks", function(v) trace_callbacks = v end) +local trace_calls = false -- only used when analyzing performance and initializations +local trace_checking = false trackers.register("memory.checking", function(v) trace_checking = v end) + +local report_system = logs.reporter("system") +local report_callbacks = logs.reporter("system","callbacks") +local report_memory = logs.reporter("system","memory") + +local register_callback = callback.register +local find_callback = callback.find +local list_callbacks = callback.list +local register_usercall = false +local original_register = register_callback + +local frozen = { } +local stack = { } +local list = callbacks.list +local permit_overloads = false +local block_overloads = false + +--[[ldx-- +

By now most callbacks are frozen and most provide a way to plug in your own code. For instance +all node list handlers provide before/after namespaces and the file handling code can be extended +by adding schemes and if needed I can add more hooks. So there is no real need to overload a core +callback function. It might be ok for quick and dirty testing but anyway you're on your own if +you permanently overload callback functions.

+--ldx]]-- + +-- This might become a configuration file only option when it gets abused too much. + +directives.register("system.callbacks.permitoverloads", function(v) + if block_overloads or permit_overloads then + -- once bad news, always bad news + elseif v then + permit_overloads = { } + report_system() + report_system("The callback system has been brought in an unprotected state. As a result of directly") + report_system("setting of callbacks subsystems of ConTeXt can stop working. There is no support for") + report_system("bugs resulting from this state. It's better to use the official extension mechanisms.") + report_system() + end +end) + +sandbox.initializer { + category = "functions", + action = function() + block_overloads = true + end +} + +if not list then -- otherwise counters get reset + + list = utilities.storage.allocate(list_callbacks()) + + local supported = { } + + for k in next, list do + list[k] = 0 + supported[k] = true + end + + callbacks.list = list + callbacks.supported = supported + +end + +local delayed = tohash { + "buildpage_filter", +} + +if trace_calls then + + local functions = { } + + register_callback = function(name,func) + if type(func) == "function" then + if functions[name] then + functions[name] = func + return find_callback(name) + else + functions[name] = func + local cnuf = function(...) + list[name] = list[name] + 1 + return functions[name](...) + end + return original_register(name,cnuf) + end + else + return original_register(name,func) + end + end + +end + +-- temporary, not public: + +callbacks.functions = { } + +-- till here + +local reported = { } + +local function register_usercall(what,name,func) + if list[name] then + if trace_callbacks or not reported[name] then + report_system() + report_system("disabling core code by %s user function into callback '%s' (reported only once)",what,name) + report_system() + reported[name] = true + end + permit_overloads[name] = true + return original_register(name,function(...) + if trace_callbacks then + report_callbacks("calling user function from '%s'",name) + end + return func(...) + end) + else + report_callbacks("not %s function into invalid callback '%s'",name) + return nil, format("unknown callback '%s'",name) + end +end + +local function frozen_callback(name) + report_callbacks("not %s frozen %a","registering",name) + return nil, format("callback '%s' is frozen",name) -- no formatter yet +end + +local function state(name) + local f = find_callback(name) + if f == false then + return "disabled" + elseif f then + return "enabled" + else + return "undefined" + end +end + +function callbacks.known(name) + return list[name] +end + +function callbacks.report() + for name, _ in sortedhash(list) do + local str = frozen[name] + if str then + report_callbacks("%s: %s -> %s",state(name),name,str) + else + report_callbacks("%s: %s",state(name),name) + end + end +end + +function callbacks.freeze(name,freeze) + if not permit_overloads then + freeze = type(freeze) == "string" and freeze + if find(name,"*",1,true) then + local pattern = name + for name, _ in next, list do + if find(name,pattern) then + frozen[name] = freeze or frozen[name] or "frozen" + end + end + else + frozen[name] = freeze or frozen[name] or "frozen" + end + end +end + +function callbacks.register(name,func,freeze) + if frozen[name] then + if permit_overloads then + return register_usercall("registering",name,func) + else + return frozen_callback(name) + end + elseif freeze then + frozen[name] = type(freeze) == "string" and freeze or "registered" + end + if delayed[name] and environment.initex then + return nil + end + return register_callback(name,func) +end + +function callback.register(name,func) -- original + if not frozen[name] then + return register_callback(name,func) + elseif permit_overloads then + return register_usercall("registering",name,func) + else + return frozen_callback(name) + end +end + +function callbacks.push(name,func) + if not frozen[name] or permit_overloads then + local sn = stack[name] + if not sn then + sn = { } + stack[name] = sn + end + insert(sn,find_callback(name)) + if permit_overloads then + register_usercall("pushing",name,func) + else + register_callback(name,func) + end + else + report_callbacks("not %s frozen %a","pushing",name) + end +end + +function callbacks.pop(name) + if not frozen[name] or permit_overloads then + local sn = stack[name] + if not sn or #sn == 0 then + -- some error + register_callback(name,nil) -- ! really needed + else + -- this fails: register_callback(name, remove(stack[name])) + local func = remove(sn) + register_callback(name,func) + end + end +end + +if trace_calls then + statistics.register("callback details", function() + local t = { } -- todo: pass function to register and quit at nil + for name, n in sortedhash(list) do + if n > 0 then + t[#t+1] = format("%s -> %s",name,n) + end + end + return concat(t," ") + end) +end + +statistics.register("callbacks overloaded by user", function() + if permit_overloads then + return concat(sortedkeys(permit_overloads)," ") + end +end) + +-- this will move to a module + +commands = commands or { } + +function commands.showcallbacks() + local NC, NR, verbatim = context.NC, context.NR, context.type + context.starttabulate { "|l|l|p|" } + for name, _ in sortedhash(list) do + NC() verbatim(name) NC() verbatim(state(name)) NC() context(frozen[name] or "") NC() NR() + end + context.stoptabulate() +end diff --git a/tex/context/base/mkxl/luat-lib.mkxl b/tex/context/base/mkxl/luat-lib.mkxl index 24020b9a6..61f9ccfd0 100644 --- a/tex/context/base/mkxl/luat-lib.mkxl +++ b/tex/context/base/mkxl/luat-lib.mkxl @@ -71,7 +71,7 @@ \registerctxluafile{data-use}{} \registerctxluafile{data-aux}{} -\registerctxluafile{luat-cbk}{} +\registerctxluafile{luat-cbk}{autosuffix} \registerctxluafile{luat-run}{} \registerctxluafile{luat-fio}{autosuffix} \registerctxluafile{luat-cnf}{} diff --git a/tex/context/base/mkxl/mlib-ctx.lmt b/tex/context/base/mkxl/mlib-ctx.lmt index 24b02f6f6..558553921 100644 --- a/tex/context/base/mkxl/mlib-ctx.lmt +++ b/tex/context/base/mkxl/mlib-ctx.lmt @@ -233,17 +233,6 @@ implement { arguments = { "integer", "integer", "integer", "integer" } } -implement { - name = "mpflushreset", - actions = function() metapost.flushreset() end -- not yet implemented -} - -implement { - name = "mpflushliteral", - actions = function(str) metapost.flushliteral(str) end, -- not yet implemented - arguments = "string", -} - -- this has to become a codeinjection function metapost.getclippath(specification) -- why not a special instance for this diff --git a/tex/context/base/mkxl/mlib-fio.lmt b/tex/context/base/mkxl/mlib-fio.lmt index 15d993d92..bc890a37d 100644 --- a/tex/context/base/mkxl/mlib-fio.lmt +++ b/tex/context/base/mkxl/mlib-fio.lmt @@ -82,14 +82,22 @@ local function findmpfile(name,ftype) return nil end -finders.file = function(specification,name,mode,ftype) - return findmpfile(name,ftype) +local function finder(name,mode,kind) + if mode == "r" then + return findmpfile(name,kind) + elseif file.is_writable(name) then + return name + else + return nil + end end -local function finder(name,mode,kind) - return findmpfile(name,kind) +finders.file = function(specification,name,mode,ftype) + -- finder(name,mode,kind) + return finder(name,mode,ftype) end + local findtexfile = resolvers.findtexfile local opentexfile = resolvers.opentexfile local splitlines = string.splitlines @@ -182,6 +190,7 @@ local function fileopener() -- report_metapost("opening terminal") return terminal elseif mode == "w" then + -- we need an extra check here for permissions local f = io.open(name,"wb") if f then -- report_metapost("opening file %a for writing",full) diff --git a/tex/context/base/mkxl/mlib-lmt.lmt b/tex/context/base/mkxl/mlib-lmt.lmt index e44674d13..b7c869c3b 100644 --- a/tex/context/base/mkxl/mlib-lmt.lmt +++ b/tex/context/base/mkxl/mlib-lmt.lmt @@ -20,6 +20,7 @@ local scannumeric = scan.numeric local scanpath = scan.path local injectpath = mp.inject.path +local injectcolor = mp.inject.color local getparameter = metapost.getparameter local registerscript = metapost.registerscript @@ -188,3 +189,11 @@ registerscript("scrutenized", function() -- injectpath(t) end) +-- A goodie, mostly a side effect of updating the metafun manual. + + +local labtorgb = attributes.colors.labtorgb + +registerscript("labtorgb", function() + injectcolor(labtorgb(scannumeric(),scannumeric(),scannumeric())) +end) diff --git a/tex/context/base/mkxl/mlib-pdf.lmt b/tex/context/base/mkxl/mlib-pdf.lmt index acd04e9e9..c383d52de 100644 --- a/tex/context/base/mkxl/mlib-pdf.lmt +++ b/tex/context/base/mkxl/mlib-pdf.lmt @@ -41,8 +41,6 @@ metapost.flushers.pdf = pdfflusher metapost.n = 0 -local experiment = true -- uses context(node) that already does delayed nodes -local savedliterals = nil -- needs checking local mpsliteral = nodes.pool.originliteral local f_f = formatters["%.6N"] @@ -89,62 +87,27 @@ function metapost.convert(specification,result) return true -- done end -function metapost.flushliteral(d) - if savedliterals then - write_node(mpsliteral(savedliterals[d])) - else - report_metapost("problem flushing literal %a",d) - end -end - -function metapost.flushreset() -- will become obsolete and internal - savedliterals = nil -end - -function pdfflusher.comment(message) +function pdfflusher.tocomment(message) if message then - message = formatters["%% mps graphic %s: %s"](metapost.n,message) - if experiment then - context(mpsliteral(message)) - elseif savedliterals then - local last = #savedliterals + 1 - savedliterals[last] = message - context.MPLIBtoPDF(last) - else - savedliterals = { message } - context.MPLIBtoPDF(1) - end + return formatters["%% mps graphic %s: %s"](metapost.n,message) + else + return formatters["%% mps graphic %s"](metapost.n) end end function pdfflusher.startfigure(n,llx,lly,urx,ury,message) - savedliterals = nil metapost.n = metapost.n + 1 context.startMPLIBtoPDF(f_f(llx),f_f(lly),f_f(urx),f_f(ury)) - if message then pdfflusher.comment(message) end end function pdfflusher.stopfigure(message) - if message then pdfflusher.comment(message) end context.stopMPLIBtoPDF() - context.MPLIBflushreset() -- maybe just at the beginning end function pdfflusher.flushfigure(pdfliterals) -- table if #pdfliterals > 0 then pdfliterals = concat(pdfliterals,"\n") - if experiment then - context(mpsliteral(pdfliterals)) - else - if savedliterals then - local last = #savedliterals + 1 - savedliterals[last] = pdfliterals - context.MPLIBtoPDF(last) - else - savedliterals = { pdfliterals } - context.MPLIBtoPDF(1) - end - end + context(mpsliteral(pdfliterals)) end end @@ -391,10 +354,6 @@ local function popproperties() metapost.properties = remove(stack) end -local function nocomment() end - -metapost.comment = nocomment - function metapost.flush(specification,result) if result then local flusher = specification.flusher @@ -412,7 +371,7 @@ function metapost.flush(specification,result) local flushfigure = flusher.flushfigure local textfigure = flusher.textfigure -- local processspecial = flusher.processspecial or metapost.processspecial - metapost.comment = flusher.comment or nocomment + local tocomment = flusher.tocomment for index=1,#figures do local figure = figures[index] local properties = pushproperties(figure) @@ -431,6 +390,9 @@ function metapost.flush(specification,result) if urx < llx then -- invalid startfigure(properties.number,0,0,0,0,"invalid",figure) + if tocomment then + result[#result+1] = tocomment("invalid") + end stopfigure() else @@ -439,6 +401,9 @@ function metapost.flush(specification,result) local groupstack = { } local function processfigure() + if tocomment then + result[#result+1] = tocomment("begin") + end result[#result+1] = "q" if objects then -- resetplugins(result) -- we should move the colorinitializer here @@ -687,6 +652,9 @@ function metapost.flush(specification,result) end end result[#result+1] = "Q" + if tocomment then + result[#result+1] = tocomment("end") + end flushfigure(result) end startfigure(properties.number,llx,lly,urx,ury,"begin",figure) @@ -696,7 +664,6 @@ function metapost.flush(specification,result) processfigure() end stopfigure("end") - end if askedfig ~= "all" then break @@ -704,7 +671,6 @@ function metapost.flush(specification,result) end popproperties() end - metapost.comment = nocomment resetplugins(result) -- we should move the colorinitializer here end end diff --git a/tex/context/base/mkxl/mlib-pdf.mkxl b/tex/context/base/mkxl/mlib-pdf.mkxl index 03bc44f79..6ded23514 100644 --- a/tex/context/base/mkxl/mlib-pdf.mkxl +++ b/tex/context/base/mkxl/mlib-pdf.mkxl @@ -88,8 +88,6 @@ % MPLIB specific: -\permanent\def\MPLIBtoPDF{\clf_mpflushliteral} % expanded - \permanent\protected\def\startMPLIBtoPDF#1#2#3#4% {\meta_process_graphic_figure_start \dostarttagged\t!mpgraphic\empty @@ -108,9 +106,6 @@ \dostoptagged \meta_process_graphic_figure_stop} -\permanent\protected\def\MPLIBflushreset % This can (will) move to the Lua end. - {\clf_mpflushreset} - %D Kind of special: % % test.mp: diff --git a/tex/context/base/mkxl/mult-sys.mkxl b/tex/context/base/mkxl/mult-sys.mkxl index 4a86fb21e..64cedbfad 100644 --- a/tex/context/base/mkxl/mult-sys.mkxl +++ b/tex/context/base/mkxl/mult-sys.mkxl @@ -47,6 +47,7 @@ \definesystemconstant {ancientgreek} \definesystemconstant {agr} \definesystemconstant {ancientlatin} \definesystemconstant {ala} \definesystemconstant {arabic} \definesystemconstant {ar} +\definesystemconstant {belarussian} \definesystemconstant {be} \definesystemconstant {bokmal} \definesystemconstant {nb} \definesystemconstant {catalan} \definesystemconstant {ca} \definesystemconstant {chinese} \definesystemconstant {cn} @@ -72,6 +73,7 @@ \definesystemconstant {latin} \definesystemconstant {la} \definesystemconstant {lithuanian} \definesystemconstant {lt} \definesystemconstant {malayalam} \definesystemconstant {ml} +\definesystemconstant {macedonian} \definesystemconstant {mk} \definesystemconstant {norwegian} \definesystemconstant {no} \definesystemconstant {nynorsk} \definesystemconstant {nn} \definesystemconstant {persian} \definesystemconstant {pe} @@ -81,6 +83,7 @@ \definesystemconstant {russian} \definesystemconstant {ru} \definesystemconstant {slovak} \definesystemconstant {sk} \definesystemconstant {slovenian} \definesystemconstant {sl} +\definesystemconstant {serbian} \definesystemconstant {sr} \definesystemconstant {spanish} \definesystemconstant {es} \definesystemconstant {swedish} \definesystemconstant {sv} \definesystemconstant {thai} \definesystemconstant {th} % mojca mentioned it at BT2013 but we need more info diff --git a/tex/context/base/mkxl/node-fin.lmt b/tex/context/base/mkxl/node-fin.lmt index 3f88c59fe..2ca7491a1 100644 --- a/tex/context/base/mkxl/node-fin.lmt +++ b/tex/context/base/mkxl/node-fin.lmt @@ -199,6 +199,7 @@ local function process(attribute,head,inheritance,default) -- one attribute local outer if subtype == container_code then check = true +current = 0 end if getorientation(stack) then outer = getattr(stack,attribute) @@ -315,6 +316,7 @@ local function simple(attribute,head) elseif id == hlist_code or id == vlist_code then if subtype == container_code then check = true +current = 0 end if getorientation(stack) then local outer = getattr(stack,attribute) @@ -394,6 +396,7 @@ end -- -- tricky checking -- if subtype == container_code then -- check = true +-- current = 0 -- end -- local outer -- if getorientation(stack) then @@ -519,6 +522,7 @@ local function selective(attribute,head,inheritance,default) -- two attributes -- tricky checking if subtype == container_code then check = true +current = 0 end local outer, s if getorientation(stack) then @@ -658,6 +662,7 @@ local function stacked(attribute,head,default) -- no triggering, no inheritance, local list if subtype == container_code then check = true +current = 0 end if nslistwise then local a = getattr(stack,attribute) @@ -749,6 +754,7 @@ end -- local list -- if subtype == container_code then -- check = true +-- current = 0 -- end -- if nslistwise then -- local a = getattr(current,attribute) @@ -843,6 +849,7 @@ local function stacker(attribute,head,default) -- no triggering, no inheritance, local list if subtype == container_code then check = true +-- attrib = default or unsetvalue -- or just umsetvalue end if nslistwise then local a = getattr(current,attribute) diff --git a/tex/context/base/mkxl/node-nut.lmt b/tex/context/base/mkxl/node-nut.lmt index 5a487eaea..7ef087178 100644 --- a/tex/context/base/mkxl/node-nut.lmt +++ b/tex/context/base/mkxl/node-nut.lmt @@ -241,7 +241,6 @@ local nuts = { usedlist = direct.usedlist, uses_font = direct.uses_font, vpack = direct.vpack, - writable_spec = direct.writable_spec, write = direct.write, append = direct.append, has_glyph_option = direct.has_glyph_option, diff --git a/tex/context/base/mkxl/strc-sec.mkxl b/tex/context/base/mkxl/strc-sec.mkxl index 8648848bc..7c4a8fc24 100644 --- a/tex/context/base/mkxl/strc-sec.mkxl +++ b/tex/context/base/mkxl/strc-sec.mkxl @@ -473,8 +473,8 @@ \to \everyredefinehead \appendtoks - \frozen\instance\setuevalue{\e!start\currenthead}{\strc_sectioning_start[\currenthead]}% - \frozen\instance\setuevalue{\e!stop \currenthead}{\strc_sectioning_stop [\currenthead]}% + \frozen\instance\protected\edefcsname\e!start\currenthead\endcsname{\strc_sectioning_start[\currenthead]}% + \frozen\instance\protected\edefcsname\e!stop \currenthead\endcsname{\strc_sectioning_stop [\currenthead]}% \to \everydefinehead % so \subject as well as \section will need two commands when ownnumber @@ -484,8 +484,8 @@ \appendtoks \ifempty\currenthead \else \doifelse{\headparameter\c!ownnumber}\v!yes - {\instance\setuevalue\currenthead{\strc_sectioning_handle_own[\currenthead]}} - {\instance\setuevalue\currenthead{\strc_sectioning_handle_nop[\currenthead]}}% + {\instance\protected\edefcsname\currenthead\endcsname{\strc_sectioning_handle_own[\currenthead]}} + {\instance\protected\edefcsname\currenthead\endcsname{\strc_sectioning_handle_nop[\currenthead]}}% \fi \to \everysetuphead @@ -543,10 +543,10 @@ \permanent\def\xthenamedheadlevel#1% {\namedsectionlevel{#1}{\sectionheadsection{\sectionheadcoupling{#1}}}} -\setvalue{\??headlevel\v!block}{0} -\setvalue{\??headlevel\v!none }{-1} -\setvalue{\??headlevel\v!text }{-2} -\setvalue{\??headlevel\v!head }{-3} +\defcsname\??headlevel\v!block\endcsname{0} +\defcsname\??headlevel\v!none \endcsname{-1} +\defcsname\??headlevel\v!text \endcsname{-2} +\defcsname\??headlevel\v!head \endcsname{-3} \newtoks\everydefinesection @@ -686,10 +686,10 @@ \newconditional\headisdisplay % public \newconditional\headissomewhere % public -\setvalue{\??headincrement\v!yes }{\settrue \c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list} -\setvalue{\??headincrement\v!no }{\setfalse\c_strc_sectioning_increment\setfalse\c_strc_sectioning_to_list} -\setvalue{\??headincrement\v!list }{\setfalse\c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list} -\setvalue{\??headincrement\s!empty}{\settrue \c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list} +\defcsname\??headincrement\v!yes \endcsname{\settrue \c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list} +\defcsname\??headincrement\v!no \endcsname{\setfalse\c_strc_sectioning_increment\setfalse\c_strc_sectioning_to_list} +\defcsname\??headincrement\v!list \endcsname{\setfalse\c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list} +\defcsname\??headincrement\s!empty\endcsname{\settrue \c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list} \protected\def\strc_sectioning_initialize_increment {\edef\currentheadincrement{\headparameter\c!incrementnumber}% @@ -708,31 +708,31 @@ % use : \currentheadincrement as spec \fi} -\setvalue{\??headplace\v!yes}% +\defcsname\??headplace\v!yes\endcsname {\setfalse\c_strc_sectioning_empty \settrue \c_strc_sectioning_place \setfalse\c_strc_sectioning_hidden \setfalse\c_strc_sectioning_section} -\setvalue{\??headplace\v!empty}% +\defcsname\??headplace\v!empty\endcsname {\settrue \c_strc_sectioning_empty \settrue \c_strc_sectioning_place \setfalse\c_strc_sectioning_hidden \setfalse\c_strc_sectioning_section} -\setvalue{\??headplace\v!no}% +\defcsname\??headplace\v!no\endcsname {\settrue \c_strc_sectioning_empty \setfalse\c_strc_sectioning_place \setfalse\c_strc_sectioning_hidden \setfalse\c_strc_sectioning_section} -\setvalue{\??headplace\v!hidden}% +\defcsname\??headplace\v!hidden\endcsname {\settrue \c_strc_sectioning_empty \setfalse\c_strc_sectioning_place \settrue \c_strc_sectioning_hidden \setfalse\c_strc_sectioning_section} -\setvalue{\??headplace\v!section}% +\defcsname\??headplace\v!section\endcsname {\settrue \c_strc_sectioning_empty \setfalse\c_strc_sectioning_place \settrue \c_strc_sectioning_hidden @@ -1086,13 +1086,13 @@ % pagebreaks -\letvalue{\??headmarknop\v!page }\donothing -\setvalue{\??headmarknop\v!reset }{\resetcurrentstructuremarks} -\letvalue{\??headmarknop\s!unknown}\donothing +\letcsname\??headmarknop\v!page \endcsname\donothing +\defcsname\??headmarknop\v!reset \endcsname{\resetcurrentstructuremarks} +\letcsname\??headmarknop\s!unknown\endcsname\donothing -\letvalue{\??headmarkyes\v!page }\donothing % to be checked: {\resetcurrentstructuremarks} -\setvalue{\??headmarkyes\v!reset }{\resetcurrentstructuremarks} -\letvalue{\??headmarkyes\s!unknown}\donothing +\letcsname\??headmarkyes\v!page \endcsname\donothing % to be checked: {\resetcurrentstructuremarks} +\defcsname\??headmarkyes\v!reset \endcsname{\resetcurrentstructuremarks} +\letcsname\??headmarkyes\s!unknown\endcsname\donothing \def\strc_sectioning_check_layout {\edef\p_page{\headparameter\c!page}% diff --git a/tex/context/base/mkxl/supp-box.mkxl b/tex/context/base/mkxl/supp-box.mkxl index ee6ef97e6..e52ea90b8 100644 --- a/tex/context/base/mkxl/supp-box.mkxl +++ b/tex/context/base/mkxl/supp-box.mkxl @@ -1150,7 +1150,9 @@ {% we could also split in \LUA \splitatcomma{#2}\m_syst_boxes_left\m_syst_boxes_right \limitated + \ifempty\m_syst_boxes_left\else left \m_syst_boxes_left + \fi \ifempty\m_syst_boxes_right\else right \m_syst_boxes_right \fi diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 3b0a7991a..7952d615c 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date : 2021-02-20 16:46 +-- merge date : 2021-02-23 17:41 do -- begin closure to overcome local limits and interference -- cgit v1.2.3