From 6886903c0725dfc1804ddb17065f95b42138635a Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Thu, 9 Dec 2010 12:11:00 +0100 Subject: beta 2010.12.09 12:11 --- scripts/context/lua/mtxrun.lua | 2 +- scripts/context/stubs/mswin/mtxrun.lua | 2 +- scripts/context/stubs/unix/mtxrun | 2 +- tex/context/base/anch-pos.lua | 70 +- tex/context/base/anch-pos.mkiv | 37 +- tex/context/base/attr-col.lua | 23 +- tex/context/base/attr-col.mkiv | 61 +- tex/context/base/attr-eff.lua | 47 +- tex/context/base/attr-eff.mkiv | 36 +- tex/context/base/attr-ini.lua | 10 +- tex/context/base/attr-ini.mkiv | 4 +- tex/context/base/attr-neg.lua | 50 +- tex/context/base/attr-neg.mkiv | 11 +- tex/context/base/buff-ver.lua | 31 +- tex/context/base/colo-ext.mkiv | 2 +- tex/context/base/colo-ini.lua | 64 +- tex/context/base/colo-ini.mkiv | 64 +- tex/context/base/cont-new.tex | 2 +- tex/context/base/context.mkii | 4 +- tex/context/base/context.mkiv | 1 - tex/context/base/context.tex | 2 +- tex/context/base/core-def.mkiv | 2 +- tex/context/base/core-ini.mkiv | 3 +- tex/context/base/font-ini.mkiv | 134 +- tex/context/base/font-otf.lua | 3 +- tex/context/base/l-lpeg.lua | 2 +- tex/context/base/l-pdfview.lua | 6 +- tex/context/base/m-pictex.tex | 2 +- tex/context/base/node-mig.mkiv | 2 +- tex/context/base/regi-ini.lua | 70 +- tex/context/base/regi-ini.mkiv | 2 +- tex/context/base/regi-syn.mkii | 73 + tex/context/base/regi-syn.tex | 73 - tex/context/base/strc-mar.lua | 17 + tex/context/base/strc-mar.mkiv | 36 +- tex/context/base/strc-not.mkiv | 1 + tex/context/base/symb-cow.mkii | 132 + tex/context/base/symb-cow.mkiv | 130 + tex/context/base/symb-cow.tex | 132 - tex/context/base/symb-eur.mkii | 64 + tex/context/base/symb-eur.tex | 64 - tex/context/base/symb-glm.mkii | 79 + tex/context/base/symb-glm.tex | 79 - tex/context/base/symb-ini.mkii | 11 +- tex/context/base/symb-ini.mkiv | 47 +- tex/context/base/symb-jmn.mkii | 199 ++ tex/context/base/symb-jmn.mkiv | 196 ++ tex/context/base/symb-jmn.tex | 204 -- tex/context/base/symb-mis.mkii | 139 + tex/context/base/symb-mis.mkiv | 55 + tex/context/base/symb-mis.tex | 139 - tex/context/base/symb-mvs.mkii | 217 ++ tex/context/base/symb-mvs.mkiv | 263 ++ tex/context/base/symb-mvs.tex | 217 -- tex/context/base/symb-nav.mkii | 122 + tex/context/base/symb-nav.mkiv | 129 + tex/context/base/symb-nav.tex | 126 - tex/context/base/symb-run.mkiv | 75 +- tex/context/base/symb-uni.mkii | 1123 ++++++++ tex/context/base/symb-uni.tex | 1123 -------- tex/context/base/symb-was.mkii | 205 ++ tex/context/base/symb-was.tex | 205 -- tex/context/base/thrd-pic.mkii | 3694 +++++++++++++++++++++++++++ tex/context/base/thrd-pic.tex | 3694 --------------------------- tex/context/base/thrd-tab.mkii | 2006 +++++++++++++++ tex/context/base/thrd-tab.tex | 2006 --------------- tex/context/base/type-otf.mkiv | 2 +- tex/context/base/v-tex.lua | 101 +- tex/generic/context/luatex-fonts-merged.lua | 7 +- 69 files changed, 9512 insertions(+), 8424 deletions(-) create mode 100644 tex/context/base/regi-syn.mkii delete mode 100644 tex/context/base/regi-syn.tex create mode 100644 tex/context/base/symb-cow.mkii create mode 100644 tex/context/base/symb-cow.mkiv delete mode 100644 tex/context/base/symb-cow.tex create mode 100644 tex/context/base/symb-eur.mkii delete mode 100644 tex/context/base/symb-eur.tex create mode 100644 tex/context/base/symb-glm.mkii delete mode 100644 tex/context/base/symb-glm.tex create mode 100644 tex/context/base/symb-jmn.mkii create mode 100644 tex/context/base/symb-jmn.mkiv delete mode 100644 tex/context/base/symb-jmn.tex create mode 100644 tex/context/base/symb-mis.mkii create mode 100644 tex/context/base/symb-mis.mkiv delete mode 100644 tex/context/base/symb-mis.tex create mode 100644 tex/context/base/symb-mvs.mkii create mode 100644 tex/context/base/symb-mvs.mkiv delete mode 100644 tex/context/base/symb-mvs.tex create mode 100644 tex/context/base/symb-nav.mkii create mode 100644 tex/context/base/symb-nav.mkiv delete mode 100644 tex/context/base/symb-nav.tex create mode 100644 tex/context/base/symb-uni.mkii delete mode 100644 tex/context/base/symb-uni.tex create mode 100644 tex/context/base/symb-was.mkii delete mode 100644 tex/context/base/symb-was.tex create mode 100644 tex/context/base/thrd-pic.mkii delete mode 100644 tex/context/base/thrd-pic.tex create mode 100644 tex/context/base/thrd-tab.mkii delete mode 100644 tex/context/base/thrd-tab.tex diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index 354fe6392..d8a8e89e5 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -184,7 +184,7 @@ lpeg.patterns = lpeg.patterns or { } -- so that we can share local patterns = lpeg.patterns local P, R, S, V, match = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.match -local Ct, C, Cs, Cc, Cf, Cg = lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Cf, lpeg.Cg +local Ct, C, Cs, Cc = lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc local lpegtype = lpeg.type local utfcharacters = string.utfcharacters diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua index 354fe6392..d8a8e89e5 100644 --- a/scripts/context/stubs/mswin/mtxrun.lua +++ b/scripts/context/stubs/mswin/mtxrun.lua @@ -184,7 +184,7 @@ lpeg.patterns = lpeg.patterns or { } -- so that we can share local patterns = lpeg.patterns local P, R, S, V, match = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.match -local Ct, C, Cs, Cc, Cf, Cg = lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Cf, lpeg.Cg +local Ct, C, Cs, Cc = lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc local lpegtype = lpeg.type local utfcharacters = string.utfcharacters diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun index 354fe6392..d8a8e89e5 100755 --- a/scripts/context/stubs/unix/mtxrun +++ b/scripts/context/stubs/unix/mtxrun @@ -184,7 +184,7 @@ lpeg.patterns = lpeg.patterns or { } -- so that we can share local patterns = lpeg.patterns local P, R, S, V, match = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.match -local Ct, C, Cs, Cc, Cf, Cg = lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Cf, lpeg.Cg +local Ct, C, Cs, Cc = lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc local lpegtype = lpeg.type local utfcharacters = string.utfcharacters diff --git a/tex/context/base/anch-pos.lua b/tex/context/base/anch-pos.lua index d47109891..f31880278 100644 --- a/tex/context/base/anch-pos.lua +++ b/tex/context/base/anch-pos.lua @@ -25,7 +25,7 @@ local jobpositions = { job.positions = jobpositions -_plib_, _ptbs_, _pcol_ = jobpositions, tobesaved, collected -- global +_ptbs_, _pcol_ = tobesaved, collected -- global local dx, dy = "0pt", "0pt" @@ -50,18 +50,27 @@ function jobpositions.replace(name,...) collected[name] = {...} end -function jobpositions.doifelse(name) - commands.testcase(collected[name] or tobesaved[name]) +function jobpositions.page(id) + local jpi = collected[id] or tobesaved[id] + context(jpi and jpi[1] or '0') end -function jobpositions.MPp(id) local jpi = collected[id] or tobesaved[id] context(jpi and jpi[1] or '0' ) end -function jobpositions.MPx(id) local jpi = collected[id] or tobesaved[id] context(jpi and jpi[2] or '0pt') end -function jobpositions.MPy(id) local jpi = collected[id] or tobesaved[id] context(jpi and jpi[3] or '0pt') end -function jobpositions.MPw(id) local jpi = collected[id] or tobesaved[id] context(jpi and jpi[4] or '0pt') end -function jobpositions.MPh(id) local jpi = collected[id] or tobesaved[id] context(jpi and jpi[5] or '0pt') end -function jobpositions.MPd(id) local jpi = collected[id] or tobesaved[id] context(jpi and jpi[6] or '0pt') end +function jobpositions.width(id) + local jpi = collected[id] or tobesaved[id] + context(jpi and jpi[4] or '0pt') +end + +function jobpositions.height(id) + local jpi = collected[id] or tobesaved[id] + context(jpi and jpi[5] or '0pt') +end -function jobpositions.MPx(id) +function jobpositions.depth(id) + local jpi = collected[id] or tobesaved[id] + context(jpi and jpi[6] or '0pt') +end + +function jobpositions.x(id) local jpi = collected[id] or tobesaved[id] local x = jpi and jpi[2] if x then @@ -71,7 +80,7 @@ function jobpositions.MPx(id) end end -function jobpositions.MPy(id) +function jobpositions.y(id) local jpi = collected[id] or tobesaved[id] local y = jpi and jpi[3] if y then @@ -85,7 +94,7 @@ end -- can be writes and no format needed any more -function jobpositions.MPxy(id) +function jobpositions.xy(id) local jpi = collected[id] or tobesaved[id] if jpi then context('(%s-%s,%s-%s)',jpi[2],dx,jpi[3],dy) @@ -94,7 +103,7 @@ function jobpositions.MPxy(id) end end -function jobpositions.MPll(id) +function jobpositions.lowerleft(id) local jpi = collected[id] or tobesaved[id] if jpi then context('(%s-%s,%s-%s-%s)',jpi[2],dx,jpi[3],jpi[6],dy) @@ -103,7 +112,7 @@ function jobpositions.MPll(id) end end -function jobpositions.MPlr(id) +function jobpositions.lowerright(id) local jpi = collected[id] or tobesaved[id] if jpi then context('(%s+%s-%s,%s-%s-%s)',jpi[2],jpi[4],dx,jpi[3],jpi[6],dy) @@ -112,7 +121,7 @@ function jobpositions.MPlr(id) end end -function jobpositions.MPur(id) +function jobpositions.upperright(id) local jpi = collected[id] or tobesaved[id] if jpi then context('(%s+%s-%s,%s+%s-%s)',jpi[2],jpi[4],dx,jpi[3],jpi[5],dy) @@ -121,7 +130,7 @@ function jobpositions.MPur(id) end end -function jobpositions.MPul(id) +function jobpositions.upperleft(id) local jpi = collected[id] or tobesaved[id] if jpi then context('(%s-%s,%s+%s-%s)',jpi[2],dx,jpi[3],jpi[5],dy) @@ -130,7 +139,7 @@ function jobpositions.MPul(id) end end -function jobpositions.MPpos(id) +function jobpositions.position(id) local jpi = collected[id] or tobesaved[id] if jpi then context(concat(jpi,',',1,6)) @@ -141,7 +150,7 @@ end local splitter = lpeg.Ct(lpeg.splitat(",")) -function jobpositions.MPplus(id,n,default) +function jobpositions.pardata(id,n,default) local jpi = collected[id] or tobesaved[id] if not jpi then context(default) @@ -155,7 +164,30 @@ function jobpositions.MPplus(id,n,default) end end -function jobpositions.MPrest(id,default) +function jobpositions.extradata(id,default) local jpi = collected[id] or tobesaved[id] context(jpi and jpi[7] or default) end + +-- interface + +commands.replacepospxywhd = jobpositions.replace +commands.copyposition = jobpositions.copy +commands.MPp = jobpositions.page +commands.MPx = jobpositions.x +commands.MPy = jobpositions.y +commands.MPw = jobpositions.width +commands.MPh = jobpositions.height +commands.MPd = jobpositions.depth +commands.MPxy = jobpositions.xy +commands.MPll = jobpositions.lowerleft +commands.MPlr = jobpositions.lowerright +commands.MPur = jobpositions.upperright +commands.MPul = jobpositions.upperleft +commands.MPpos = jobpositions.position +commands.MPplus = jobpositions.pardata +commands.MPrest = jobpositions.extradata + +function commands.doifelse(name) + commands.testcase(collected[name] or tobesaved[name]) +end diff --git a/tex/context/base/anch-pos.mkiv b/tex/context/base/anch-pos.mkiv index e19cab0c2..d136dbc0a 100644 --- a/tex/context/base/anch-pos.mkiv +++ b/tex/context/base/anch-pos.mkiv @@ -35,7 +35,6 @@ % at some point (when we no longer share code) we will move to numbers % do that we have less garbage collection and hashing % -% the global table _plib_ is equivalent to job.positions % the global table _ptbs_ is equivalent to job.positions.tobesaved % the global table _pcol_ is equivalent to job.positions.collected % @@ -121,7 +120,7 @@ \def\lastsavedpositiony {\the\dimexpr\pdflastypos\scaledpoint\relax} \let\savecurrentposition\pdfsavepos -\def\dosetposition#1% +\def\dosetposition#1% will become commands.setposition {\savecurrentposition \normalexpanded{\ctxlatelua{_ptbs_['#1']={% \noexpand\realfolio,"\noexpand\lastsavedpositionx","\noexpand\lastsavedpositiony"}}}} @@ -163,7 +162,7 @@ %D Sometimes we want to trick the position handler a bit: -\def\replacepospxywhd#1#2#3#4#5#6#7{\ctxlua{_plib_.replace('#1',\number#2,"\the\dimexpr#3\relax","\the\dimexpr#4\relax","\the\dimexpr#5\relax","\the\dimexpr#6\relax","\the\dimexpr#7\relax")}} +\def\replacepospxywhd#1#2#3#4#5#6#7{\ctxlua{commands.replacepospxywhd('#1',\number#2,"\the\dimexpr#3\relax","\the\dimexpr#4\relax","\the\dimexpr#5\relax","\the\dimexpr#6\relax","\the\dimexpr#7\relax")}} %D For postprocessing purposes, we save the number of %D positions. @@ -208,18 +207,18 @@ % \the\dimexpr\noexpand\lastsavedpositionx\ifnum\positionanchormode=\plusone-\MPx\pageanchor\fi\relax % \the\dimexpr\noexpand\lastsavedpositiony\ifnum\positionanchormode=\plusone-\MPx\pageanchor\fi\relax -\def\MPp #1{\ctxlua{_plib_.MPp("#1")}} -\def\MPx #1{\ctxlua{_plib_.MPx("#1")}} -\def\MPy #1{\ctxlua{_plib_.MPy("#1")}} -\def\MPw #1{\ctxlua{_plib_.MPw("#1")}} -\def\MPh #1{\ctxlua{_plib_.MPh("#1")}} -\def\MPd #1{\ctxlua{_plib_.MPd("#1")}} -\def\MPxy #1{\ctxlua{_plib_.MPxy("#1")}} -\def\MPll #1{\ctxlua{_plib_.MPll("#1")}} -\def\MPlr #1{\ctxlua{_plib_.MPlr("#1")}} -\def\MPur #1{\ctxlua{_plib_.MPur("#1")}} -\def\MPul #1{\ctxlua{_plib_.MPul("#1")}} -\def\MPpos#1{\ctxlua{_plib_.MPpos("#1")}} +\def\MPp #1{\ctxlua{commands.MPp("#1")}} +\def\MPx #1{\ctxlua{commands.MPx("#1")}} +\def\MPy #1{\ctxlua{commands.MPy("#1")}} +\def\MPw #1{\ctxlua{commands.MPw("#1")}} +\def\MPh #1{\ctxlua{commands.MPh("#1")}} +\def\MPd #1{\ctxlua{commands.MPd("#1")}} +\def\MPxy #1{\ctxlua{commands.MPxy("#1")}} +\def\MPll #1{\ctxlua{commands.MPll("#1")}} +\def\MPlr #1{\ctxlua{commands.MPlr("#1")}} +\def\MPur #1{\ctxlua{commands.MPur("#1")}} +\def\MPul #1{\ctxlua{commands.MPul("#1")}} +\def\MPpos#1{\ctxlua{commands.MPpos("#1")}} %D \macros %D {MPplus, MPrest, MPv, MPvv} @@ -241,8 +240,8 @@ %D %D The extra parameters are not treated. -\def\MPplus#1#2#3{\ctxlua{_plib_.MPplus("#1",#2,"#3")}} \let\MPv \MPplus -\def\MPrest #1#2{\ctxlua{_plib_.MPrest("#1","#2")}} \let\MPvv\MPrest +\def\MPplus#1#2#3{\ctxlua{commands.MPplus("#1",#2,"#3")}} \let\MPv \MPplus +\def\MPrest #1#2{\ctxlua{commands.MPrest("#1","#2")}} \let\MPvv\MPrest %D \macros %D {MPanchor} @@ -403,7 +402,7 @@ %D %D Again, this is a global action. -\def\copyposition#1#2{\ctxlua{_plib_.copy('#1','#2')}} +\def\copyposition#1#2{\ctxlua{commands.copyposition('#1','#2')}} %D The fact that handling positions is a two pass operation, is %D one of the reasons why we need to be able to test for @@ -413,7 +412,7 @@ %D \doifpositionelse {identifier} {found action} {not found action} %D \stoptyping -\def\doifpositionelse#1{\ctxlua{_plib_.doifelse('#1')}} +\def\doifpositionelse#1{\ctxlua{commands.doifpositionelse('#1')}} %D We have now arrived at a few macros that would make sense as %D support macros, but ended up in the core. diff --git a/tex/context/base/attr-col.lua b/tex/context/base/attr-col.lua index 24c76ae6d..0a60ba52a 100644 --- a/tex/context/base/attr-col.lua +++ b/tex/context/base/attr-col.lua @@ -64,15 +64,14 @@ local unsetvalue = attributes.unsetvalue -- We assume that only processcolors are defined in the format. attributes.colors = attributes.colors or { } -local colors = attributes.colors _clib_ = colors -- fast access (less tokens too) - -colors.data = allocate() -colors.values = colors.values or { } -colors.registered = colors.registered 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 @@ -350,7 +349,7 @@ end -- transparencies attributes.transparencies = attributes.transparencies or { } -local transparencies = attributes.transparencies _tlib_ = transparencies -- fast access (less tokens too) +local transparencies = attributes.transparencies transparencies.registered = transparencies.registered or { } transparencies.data = allocate() transparencies.values = transparencies.values or { } @@ -493,7 +492,7 @@ function colorintents.register(stamp) return registered[stamp] or registered.overprint end -attributes.colorintents.handler = nodes.installattributehandler { +colorintents.handler = nodes.installattributehandler { name = "colorintent", namespace = colorintents, initializer = states.initialize, @@ -504,3 +503,13 @@ attributes.colorintents.handler = nodes.installattributehandler { function colorintents.enable() tasks.enableaction("shipouts","attributes.colorintents.handler") end + +-- interface + +commands.enablecolor = colors.enable +commands.enabletransparency = transparencies.enable +commands.enablecolorintent = colorintents.enable + +function commands.registercolor (...) context(colors .register(...)) end +function commands.registertransparency(...) context(transparencies.register(...)) end +function commands.registercolorintent (...) context(colorintents .register(...)) end diff --git a/tex/context/base/attr-col.mkiv b/tex/context/base/attr-col.mkiv index 5dc0e477e..5b09bf38b 100644 --- a/tex/context/base/attr-col.mkiv +++ b/tex/context/base/attr-col.mkiv @@ -24,47 +24,46 @@ % % We could combine this in one attribute but this is not faster and also % less flexible because sometimes we want to freeze the attribute bit. -% -% Watch out: real color support will be implemented later. - -\newcount\currentcolormodel - -\def\dosetcolormodel#1% - {\currentcolormodel\ctxlua{tex.print(_clib_.setmodel('#1'))}% - \attribute\colormodelattribute\currentcolormodel} - -\dosetcolormodel{all} - -\appendtoks - \dosetcolormodel{all}% redundant? -\to \everyjob - -\def\registerrgbcolor #1#2#3#4{\ctxlua{_clib_.register('#1','rgb' ,#2,#3,#4)}} -\def\registercmykcolor#1#2#3#4#5{\ctxlua{_clib_.register('#1','cmyk',#2,#3,#4,#5)}} -\def\registergraycolor #1#2{\ctxlua{_clib_.register('#1','gray',#2)}} - -% transparency - -\def\registertransparency#1#2#3% - {\setevalue{(ts:#1)}{\attribute\transparencyattribute\ctxlua{tex.write(_tlib_.register(#2,#3))} }} - -\def\sometransparencyswitch#1{\csname(ts:#1)\endcsname} -\def\sometransparencyswitch - {\ctxlua{_tlib_.enable()}% - \gdef\sometransparencyswitch##1{\csname(ts:##1)\endcsname}% - \sometransparencyswitch} +% % color (layer on top) +% +% \def\dosetcolormodel#1% overloaded later +% {\ctxlua{commands.setcolormodel('#1')}} % sets attribute +% +% \dosetcolormodel{all} +% +% \def\registerrgbcolor#1#2#3#4% not used +% {\setevalue{(cs:#1)}{\attribute\colorattribute\ctxlua{commands.registercolor('#1','rgb' ,#2,#3,#4)}}} +% +% \def\registercmykcolor#1#2#3#4#5% not used +% {\setevalue{(cs:#1)}{\attribute\colorattribute\ctxlua{commands.registercolor('#1','cmyk',#2,#3,#4,#5)}}} +% +% \def\registergraycolor#1#2% not used +% {\setevalue{(cs:#1)}{\attribute\colorattribute\ctxlua{commands.registercolor('#1','gray',#2)}}} +% % transparency (layer on top) +% +% \def\registertransparency#1#2#3% +% {\setevalue{(ts:#1)}{\attribute\transparencyattribute\ctxlua{commands.registertransparency(#2,#3)} }} +% +% \def\sometransparencyswitch#1% +% {\csname(ts:#1)\endcsname} +% +% \def\sometransparencyswitch +% {\ctxlua{commands.enabletransparency()}% +% \gdef\sometransparencyswitch##1{\csname(ts:##1)\endcsname}% +% \sometransparencyswitch} +% % \registertransparency {one} {1} {.5} % \registertransparency {two} {1} {.6} % overprint \def\registercolorintent#1#2% - {\setevalue{(os:#1)}{\attribute\colorintentattribute\ctxlua{tex.write(attributes.colorintents.register('#2'))} }} + {\setevalue{(os:#1)}{\attribute\colorintentattribute\ctxlua{commands.registercolorintent('#2')} }} \def\dotriggercolorintent - {\ctxlua{attributes.colorintents.enable()}% + {\ctxlua{commands.enablecolorintents()}% \gdef\dotriggercolorintent##1{\csname(os:##1)\endcsname}% \dotriggercolorintent} diff --git a/tex/context/base/attr-eff.lua b/tex/context/base/attr-eff.lua index 53610cbff..6ed64f201 100644 --- a/tex/context/base/attr-eff.lua +++ b/tex/context/base/attr-eff.lua @@ -12,16 +12,20 @@ local allocate = utilities.storage.allocate local attributes, nodes = attributes, nodes -local states = attributes.states -local tasks = nodes.tasks -local nodeinjections = backends.nodeinjections +local states = attributes.states +local tasks = nodes.tasks +local nodeinjections = backends.nodeinjections +local settexattribute = tex.setattribute attributes.effects = attributes.effects or { } local effects = attributes.effects + +local a_effect = attributes.private('effect') + effects.data = allocate() effects.values = effects.values or { } effects.registered = effects.registered or { } -effects.attribute = attributes.private("effect") +effects.attribute = a_effect storage.register("attributes/effects/registered", effects.registered, "attributes.effects.registered") storage.register("attributes/effects/values", effects.values, "attributes.effects.values") @@ -52,7 +56,15 @@ end setmetatable(effects, { __index = extender }) setmetatable(effects.data, { __index = reviver }) -function effects.register(effect,stretch,rulethickness) +effects.handler = nodes.installattributehandler { + name = "effect", + namespace = effects, + initializer = states.initialize, + finalizer = states.finalize, + processor = states.process, +} + +local function register(effect,stretch,rulethickness) local stamp = format(template,effect,stretch,rulethickness) local n = registered[stamp] if not n then @@ -63,14 +75,21 @@ function effects.register(effect,stretch,rulethickness) return n end -attributes.effects.handler = nodes.installattributehandler { - name = "effect", - namespace = effects, - initializer = states.initialize, - finalizer = states.finalize, - processor = states.process, -} - -function effects.enable() +local function enable() tasks.enableaction("shipouts","attributes.effects.handler") end + +effects.register = register +effects.enable = enable + +-- interface + +local enabled = false + +function commands.triggereffect(effect,stretch,rulethickness) + if not enabled then + enable() + enabled = true + end + settexattribute(a_effect,register(effect,stretch,rulethickness)) +end diff --git a/tex/context/base/attr-eff.mkiv b/tex/context/base/attr-eff.mkiv index ea2dfcd4b..1b9adf718 100644 --- a/tex/context/base/attr-eff.mkiv +++ b/tex/context/base/attr-eff.mkiv @@ -15,20 +15,25 @@ \registerctxluafile{attr-eff}{1.001} -% more will move to the lua end (old code, early luatex approach) - \unprotect -\def\registereffect#1#2#3% #2=stretch #3=rulethickness - {\setxvalue{(es:#1:#2:\number\dimexpr#3\relax)}% - {\attribute\effectattribute\ctxlua{tex.write(attributes.effects.register('#1',#2,\number\dimexpr#3\relax))}\relax}} - -\def\dotriggereffect - {\ctxlua{attributes.effects.enable()}% - \gdef\dotriggereffect##1##2##3% - {\ifcsname(es:##1:##2:\number\dimexpr##3\relax)\endcsname\else\registereffect{##1}{##2}{##3}\fi - \csname(es:##1:##2:\number\dimexpr##3\relax)\endcsname}% - \dotriggereffect} +% \def\registereffect#1#2#3% #2=stretch #3=rulethickness +% {\setxvalue{(es:#1:#2:\number\dimexpr#3\relax)}% todo: set attribute at lua end +% {\attribute\effectattribute\ctxlua{commands.registereffect('#1',#2,\number\dimexpr#3\relax)}\relax}} +% +% \def\dotriggereffect +% {\ctxlua{commands.enableeffect()}% can then move to caller +% \gdef\dotriggereffect##1##2##3% +% {\ifcsname(es:##1:##2:\number\dimexpr##3\relax)\endcsname\else\registereffect{##1}{##2}{##3}\fi +% \csname(es:##1:##2:\number\dimexpr##3\relax)\endcsname}% +% \dotriggereffect} +% +% \def\registereffect#1#2#3% #2=stretch #3=rulethickness +% {\setxvalue{(es:#1:#2:\number\dimexpr#3\relax)}% todo: set attribute at lua end +% {\attribute\effectattribute\ctxlua{commands.registereffect('#1',#2,\number\dimexpr#3\relax)}\relax}} + +\gdef\dotriggereffect#1#2#3% + {\ctxlua{commands.triggereffect('#1',#2,\number\dimexpr#3\relax)}} \unexpanded\def\setupeffect {\dodoubleargument\dosetupeffect} @@ -43,12 +48,15 @@ {\getparameters[\??et#1][\c!method=\v!none,\c!stretch=0,\c!rulethickness=\zeropoint,\c!alternative=\v!normal,#2]% \doif{\getvalue{\??et#1\c!method}}\v!command {\setugvalue{\e!start#1}{\starteffect[#1]}% - \setugvalue{\e!stop #1}{\stopeffect }}} + \setugvalue{\e!stop #1}{\stopeffect}}} % yes or no grouped \unexpanded\def\starteffect[#1]% - {\dotriggereffect{\getvalue{\??et#1\c!alternative}}{\getvalue{\??et#1\c!stretch}}{\getvalue{\??et#1\c!rulethickness}}} + {\dotriggereffect + {\csname\??et#1\c!alternative \endcsname}% + {\csname\??et#1\c!stretch \endcsname}% + {\csname\??et#1\c!rulethickness\endcsname}} \unexpanded\def\stopeffect % can be special {\dotriggereffect\v!normal0\zeropoint} diff --git a/tex/context/base/attr-ini.lua b/tex/context/base/attr-ini.lua index 2a1879c9a..6c281d643 100644 --- a/tex/context/base/attr-ini.lua +++ b/tex/context/base/attr-ini.lua @@ -58,7 +58,7 @@ function attributes.private(name) -- at the lua end (hidden from user) return number end --- new +-- new (actually a tracer) function attributes.ofnode(n) local a = n.attr @@ -71,3 +71,11 @@ function attributes.ofnode(n) end end end + +-- interface + +commands.defineattribute = attributes.define + +function commands.getprivateattribute(name) + context(attributes.private(name)) +end diff --git a/tex/context/base/attr-ini.mkiv b/tex/context/base/attr-ini.mkiv index c3d33ddb5..eccb5ffbc 100644 --- a/tex/context/base/attr-ini.mkiv +++ b/tex/context/base/attr-ini.mkiv @@ -43,7 +43,7 @@ {\expandafter\newattribute\csname @attr@#1\endcsname \expandafter\newconstant \csname :attr:#1\endcsname \csname :attr:#1\endcsname\lastallocatedattribute - \ctxlua{attributes.define("#1",\number\lastallocatedattribute)}% + \ctxlua{commands.defineattribute("#1",\number\lastallocatedattribute)}% %\writestatus\m!systems{defining attribute #1 with number \number\lastallocatedattribute}% \doifnotinset\s!global{#2}{\appendetoks\csname @attr@#1\endcsname\attributeunsetvalue\to\attributesresetlist}% \doifinset \s!public{#2}{\expandafter\let\csname#1attribute\expandafter\endcsname\csname :attr:#1\endcsname}} @@ -52,7 +52,7 @@ {\dodoubleempty\dodefinesystemattribute} \def\dodefinesystemattribute[#1][#2]% alternatively we can let lua do the housekeeping - {\scratchcounter\ctxlua{tex.print(attributes.private("#1"))}\relax + {\scratchcounter\ctxlua{commands.getprivateattribute("#1")}\relax \expandafter\attributedef\csname @attr@#1\endcsname\scratchcounter \expandafter\newconstant \csname :attr:#1\endcsname \csname :attr:#1\endcsname\scratchcounter diff --git a/tex/context/base/attr-neg.lua b/tex/context/base/attr-neg.lua index ba95382ce..c8f294c71 100644 --- a/tex/context/base/attr-neg.lua +++ b/tex/context/base/attr-neg.lua @@ -13,20 +13,25 @@ local format = string.format local attributes, nodes = attributes, nodes -local states = attributes.states -local tasks = nodes.tasks -local nodeinjections = backends.nodeinjections +local states = attributes.states +local tasks = nodes.tasks +local nodeinjections = backends.nodeinjections +local settexattribute = tex.setattribute +local variables = interfaces.variables --- negative / positive -attributes.negatives = attributes.negatives or { } -local negatives = attributes.negatives -negatives.data = negatives.data or { } -negatives.attribute = attributes.private("negative") +attributes.negatives = attributes.negatives or { } +local negatives = attributes.negatives + +local a_negative = attributes.private("negative") + +negatives.data = negatives.data or { } +negatives.attribute = a_negative negatives.registered = { - positive = 1, - negative = 2, + [variables.positive] = 1, + [variables.negative] = 2, } local data, registered = negatives.data, negatives.registered @@ -54,11 +59,7 @@ end setmetatable(negatives, { __index = extender }) setmetatable(negatives.data, { __index = reviver }) -function negatives.register(stamp) - return registered[stamp] or registered.positive -end - -attributes.negatives.handler = nodes.installattributehandler { +negatives.handler = nodes.installattributehandler { name = "negative", namespace = negatives, initializer = states.initialize, @@ -66,6 +67,25 @@ attributes.negatives.handler = nodes.installattributehandler { processor = states.process, } -function negatives.enable() +local function register(stamp) + return registered[stamp] or registered.positive +end + +local function enable() tasks.enableaction("shipouts","attributes.negatives.handler") end + +negatives.register = register +negatives.enable = enable + +-- interface + +local enabled = false + +function commands.triggernegative(stamp) + if not enabled then + enable() + enabled = true + end + settexattribute(a_negative,register(stamp)) +end diff --git a/tex/context/base/attr-neg.mkiv b/tex/context/base/attr-neg.mkiv index 7ffd7ae19..402af0bf5 100644 --- a/tex/context/base/attr-neg.mkiv +++ b/tex/context/base/attr-neg.mkiv @@ -17,16 +17,9 @@ \unprotect -\def\registernegative#1#2% - {\setevalue{(ns:#1)}{\attribute\negativeattribute\ctxlua{tex.write(attributes.negatives.register('#2'))}\relax}} +% positive and negative are preregistered -\def\dotriggernegative - {\ctxlua{attributes.negatives.enable()}% - \gdef\dotriggernegative##1{\csname(ns:##1)\endcsname}% - \dotriggernegative} - -\registernegative{positive}{positive} -\registernegative{negative}{negative} +\def\dotriggernegative#1{\ctxlua{commands.triggernegative('#1'))}} \unexpanded\def\startnegative{\dotriggernegative\v!negative} \unexpanded\def\stopnegative {\dotriggernegative\v!positive} diff --git a/tex/context/base/buff-ver.lua b/tex/context/base/buff-ver.lua index 2cc8d6df9..d62d31df7 100644 --- a/tex/context/base/buff-ver.lua +++ b/tex/context/base/buff-ver.lua @@ -156,6 +156,15 @@ function visualizers.newgrammar(name,t) return t end +local function getvisualizer(method,nature) + local m = specifications[method] or specifications.default + if nature then + return m and (m[nature] or m.parser) or nil + else + return m and m.parser or nil + end +end + local fallback = context.verbatim local function makepattern(visualizer,kind,pattern) @@ -172,8 +181,19 @@ local function makepattern(visualizer,kind,pattern) end end -visualizers.pattern = makepattern +local function makenested(handler,how,start,stop) + local b, e, f = P(start), P(stop), how + if type(how) == "string" then + f = function(s) getvisualizer(how,"direct")(s) end + end + return makepattern(handler,"name",b) + * ((1-e)^1/f) + * makepattern(handler,"name",e) +end + +visualizers.pattern = makepattern visualizers.makepattern = makepattern +visualizers.makenested = makenested function visualizers.load(name) if rawget(specifications,name) == nil then @@ -258,15 +278,6 @@ function visualizers.register(name,specification) return specification end -local function getvisualizer(method,nature) - local m = specifications[method] or specifications.default - if nature then - return m and (m[nature] or m.parser) or nil - else - return m and m.parser or nil - end -end - local escapepatterns = { } visualizers.escapepatterns = escapepatterns local function texmethod(s) diff --git a/tex/context/base/colo-ext.mkiv b/tex/context/base/colo-ext.mkiv index bc1c2fc41..c1e338469 100644 --- a/tex/context/base/colo-ext.mkiv +++ b/tex/context/base/colo-ext.mkiv @@ -105,7 +105,7 @@ \def\dododefineintermediatecolor[#1][#2,#3,#4][#5]% {\ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi - \ctxlua{_clib_.defineintermediatecolor("#1","#2", + \ctxlua{commands.defineintermediatecolor("#1","#2", \thecolorattribute{#3},\thecolorattribute{#4}, \thetransparencyattribute{#3},\thetransparencyattribute{#4}, "#5",false,\iffreezecolors true\else false\fi)}% not global diff --git a/tex/context/base/colo-ini.lua b/tex/context/base/colo-ini.lua index 238693bd0..b12e383c6 100644 --- a/tex/context/base/colo-ini.lua +++ b/tex/context/base/colo-ini.lua @@ -20,14 +20,17 @@ local attributes, context, commands = attributes, context, commands local settings_to_hash_strict = utilities.parsers.settings_to_hash_strict -local colors = attributes.colors -local transparencies = attributes.transparencies -local registrations = backends.registrations - -local a_color = attributes.private('color') -local a_transparency = attributes.private('transparency') -local a_colorspace = attributes.private('colormodel') -local a_background = attributes.private('background') +local colors = attributes.colors +local transparencies = attributes.transparencies +local colorintents = attributes.colorintents +local registrations = backends.registrations +local settexattribute = tex.setattribute +local gettexattribute = tex.getattribute + +local a_color = attributes.private('color') +local a_transparency = attributes.private('transparency') +local a_colorspace = attributes.private('colormodel') +local a_background = attributes.private('background') local register_color = colors.register local attributes_list = attributes.list @@ -410,7 +413,7 @@ function colors.definemultitonecolor(name,multispec,colorspec,selfspec) end end -function colors.mp(model,ca,ta,default) -- will move to mlib-col +function colors.mpcolor(model,ca,ta,default) -- will move to mlib-col local cv = colors.supported and colors.value(ca) -- faster when direct colors.values[ca] if cv then local tv = transparencies.supported and transparencies.value(ta) @@ -586,3 +589,46 @@ function colors.defineintermediatecolor(name,fraction,c_one,c_two,a_one,a_two,sp definetransparent(name,transparencies.register(name,ta,tt),global) end end + +-- interface + +local setcolormodel = colors.setmodel + +function commands.setcolormodel(model,weight) + settexattribute(a_colorspace,setcolormodel(model,weight)) +end + +function commands.setrastercolor(name,s) + settexattribute(a_color,colors.definesimplegray(name,s)) +end + +function commands.registermaintextcolor(a) + colors.main = a +end + +commands.defineprocesscolor = colors.defineprocesscolor +commands.definespotcolor = colors.definespotcolor +commands.definemultitonecolor = colors.definemultitonecolor +commands.definetransparency = colors.definetransparency +commands.defineintermediatecolor = colors.defineintermediatecolor + +function commands.spotcolorname (a) context(colors.spotcolorname (a)) end +function commands.spotcolorparent (a) context(colors.spotcolorparent (a)) end +function commands.spotcolorvalue (a) context(colors.spotcolorvalue (a)) end +function commands.colorcomponents (a) context(colors.colorcomponents (a)) end +function commands.transparencycomponents(a) context(colors.transparencycomponents(a)) end +function commands.formatcolor (a) context(colors.formatcolor (a)) end +function commands.formatgray (a) context(colors.formatgray (a)) end + +function commands.mpcolor(model,ca,ta,default) + context(colors.mpcolor(model,ca,ta,default)) +end + +function commands.doifblackelse(a) + commands.doifelse(colors.isblack(a)) +end + +function commands.doifdrawingblackelse() + commands.doifelse(colors.isblack(gettexattribute(a_color))) +end + diff --git a/tex/context/base/colo-ini.mkiv b/tex/context/base/colo-ini.mkiv index af3c1ebf4..d6ded253c 100644 --- a/tex/context/base/colo-ini.mkiv +++ b/tex/context/base/colo-ini.mkiv @@ -714,19 +714,15 @@ % draw btex test etex withprescript \mptexcolor{blue} ; % \stopMPpage -\ifx\currentcolormodel\undefined \newcount\currentcolormodel \fi +% \ifx\currentcolormodel\undefined \newcount\currentcolormodel \fi -% \def\setcolormodel#1% -% {\showcolormessage\m!colors1{#1}% -% \dosetcolormodel{#1}} +\def\currentcolormodel{\attribute\colormodelattribute} \def\dosetcolormodel#1% no message - {\currentcolormodel\ctxlua{tex.print(_clib_.setmodel('#1',\ifweightGRAY true\else false\fi))}% - \attribute\colormodelattribute\currentcolormodel} + {\ctxlua{commands.setcolormodel('#1',\ifweightGRAY true\else false\fi)}} % sets attribute \dosetcolormodel{all} - \def\dosetupcolormodel {\ifincolor \ifRGBsupported @@ -787,7 +783,7 @@ \def\doactivatecolor {\ifproductionrun - \ctxlua{_clib_.enable() _tlib_.enable()}% not that efficient but at least robust + \ctxlua{commands.enablecolor() commands.enabletransparency()}% not that efficient but at least robust \let\doactivatecolor\normaldoactivatecolor \expandafter\doactivatecolor \else @@ -806,44 +802,45 @@ \setfalse\collectcolorsinlist \def\collectcolorinlist#1{\doglobal\addtocommalist{#1}\colorlist} -\def\doregistercolor#1#2{\ctxlua{_clib_.defineprocesscolor("#1","#2",false,\iffreezecolors true\else false\fi)}} +\def\doregistercolor#1#2% + {\ctxlua{commands.defineprocesscolor("#1","#2",false,\iffreezecolors true\else false\fi)}} \def\dodefinecolor[#1][#2]% {\ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi - \ctxlua{_clib_.defineprocesscolor("#1","#2",false,\iffreezecolors true\else false\fi)}% + \ctxlua{commands.defineprocesscolor("#1","#2",false,\iffreezecolors true\else false\fi)}% \dodefinecolorcommand\setvalue{#1}} \def\dodefineglobalcolor[#1][#2]% {\ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi - \ctxlua{_clib_.defineprocesscolor("#1","#2",true,\iffreezecolors true\else false\fi)}% + \ctxlua{commands.defineprocesscolor("#1","#2",true,\iffreezecolors true\else false\fi)}% \dodefinecolorcommand\setgvalue{#1}} \def\dodefinenamedcolor[#1][#2]% {\ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi - \ctxlua{_clib_.defineprocesscolor("#1","#2",false,\iffreezecolors true\else false\fi)}% + \ctxlua{commands.defineprocesscolor("#1","#2",false,\iffreezecolors true\else false\fi)}% \dodefinecolorcommand\setvalue{#1}} \def\dodefinespotcolor[#1][#2][#3]% {\ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi - \ctxlua{_clib_.definespotcolor("#1","#2","#3",true)}% + \ctxlua{commands.definespotcolor("#1","#2","#3",true)}% \dodefinecolorcommand\setxvalue{#1}} \def\dodefinemultitonecolor[#1][#2][#3][#4]% - {\ctxlua{_clib_.definemultitonecolor("#1","#2","#3","#4",true)}% + {\ctxlua{commands.definemultitonecolor("#1","#2","#3","#4",true)}% \dodefinecolorcommand\setxvalue{#1}} \def\dodefinetransparency[#1][#2]% - {\ctxlua{_clib_.definetransparency("#1",#2)}} + {\ctxlua{commands.definetransparency("#1",#2)}} \def\dosetrastercolor#1% slow, we need a fast one {\edef\@@rastervalue{#1}% \ifx\@@rastervalue\empty \let\@@rastervalue\@@rsscreen \fi - \attribute\colorattribute\ctxlua{tex.sprint(_clib_.definesimplegray("_raster_",\@@rastervalue))}\relax} + \ctxlua{commands.setrastercolor("_raster_",\@@rastervalue))}} % sets attribute \def\dodefinefastcolor[#1][#2]% still not fast but ok - {\ctxlua{_clib_.defineprocesscolor("#1","#2",false,\iffreezecolors true\else false\fi)}% + {\ctxlua{commands.defineprocesscolor("#1","#2",false,\iffreezecolors true\else false\fi)}% \dodefinecolorcommand\setvalue{#1}} %D \macros @@ -877,7 +874,7 @@ %D A bit like \type {\definedfont}: \unexpanded\def\colored[#1]% - {\ctxlua{_clib_.defineprocesscolor("@colored@","#1",false,false)}% + {\ctxlua{commands.defineprocesscolor("@colored@","#1",false,false)}% \groupedcommand{\doactivatecolor{@colored@}}{}} %D \macros @@ -917,7 +914,8 @@ \ifx\maintextcolor\empty\else\doactivatecolor\maintextcolor\fi \to \everybeforeoutput -\def\registermaintextcolor{\ctxlua{_clib_.main = \thecolorattribute\maintextcolor}} +\def\registermaintextcolor + {\ctxlua{commands.registermaintextcolor(\thecolorattribute\maintextcolor)}} \unexpanded\def\starttextcolor[#1]% {\doifsomething{#1} @@ -964,7 +962,7 @@ %D Low level defs: \def\colordefalc#1#2{\setevalue{(ca:#1)}{#2}\setvalue {(cs:#1)}{\attribute\colorattribute #2 }} -\def\colordefagc#1#2{\setxvalue{(ca:#1)}{#2}\setvalue {(cs:#1)}{\attribute\colorattribute #2 }} +\def\colordefagc#1#2{\setxvalue{(ca:#1)}{#2}\setgvalue{(cs:#1)}{\attribute\colorattribute #2 }} % was not g \def\colordefalt#1#2{\setevalue{(ta:#1)}{#2}\setvalue {(ts:#1)}{\attribute\transparencyattribute#2 }} \def\colordefagt#1#2{\setxvalue{(ta:#1)}{#2}\setgvalue{(ts:#1)}{\attribute\transparencyattribute#2 }} @@ -997,28 +995,28 @@ %D \getbuffer %D \stopvoorbeeld -\def\colorformatseparator{ } - -\def\MPcolor#1{\ctxlua{tex.sprint(_clib_.mp(\number\currentcolormodel,\number\doinheritca{#1},\number\doinheritta{#1}))}} - \let\currentcolorname\s!black % todo \let\outercolorname \s!black % todo +\let\colorformatseparator\space + +\def\MPcolor #1{\ctxlua{commands.mpcolor(\number\currentcolormodel,\number\doinheritca{#1},\number\doinheritta{#1})}} + \def\thecolorattribute #1{\number\csname(ca:\ifcsname(ca:\currentpalet#1)\endcsname\currentpalet#1\else\ifcsname(ca:#1)\endcsname#1\fi\fi)\endcsname} \def\thetransparencyattribute#1{\number\csname(ta:\ifcsname(ta:\currentpalet#1)\endcsname\currentpalet#1\else\ifcsname(ta:#1)\endcsname#1\fi\fi)\endcsname} -\def\internalspotcolorname #1{\ctxlua{tex.sprint(_clib_.spotcolorname (\thecolorattribute{#1}))}} -\def\internalspotcolorparent#1{\ctxlua{tex.sprint(_clib_.spotcolorparent(\thecolorattribute{#1}))}} -\def\internalspotcolorsize #1{\ctxlua{tex.sprint(_clib_.spotcolorvalue (\thecolorattribute{#1}))}} +\def\internalspotcolorname #1{\ctxlua{commands.spotcolorname(\thecolorattribute{#1})}} +\def\internalspotcolorparent #1{\ctxlua{commands.spotcolorparent(\thecolorattribute{#1})}} +\def\internalspotcolorsize #1{\ctxlua{commands.spotcolorvalue(\thecolorattribute{#1})}} -\def\colorcomponents #1{\ctxlua{tex.sprint(_clib_.colorcomponents (\thecolorattribute {#1}))}} -\def\transparencycomponents#1{\ctxlua{tex.sprint(_clib_.transparencycomponents(\thetransparencyattribute{#1}))}} +\def\colorcomponents #1{\ctxlua{commands.colorcomponents(\thecolorattribute{#1})}} +\def\transparencycomponents #1{\ctxlua{commands.transparencycomponents(\thetransparencyattribute{#1})}} -\def\colorvalue#1{\ctxlua{tex.sprint(_clib_.formatcolor(\thecolorattribute{#1},"\colorformatseparator"))}} -\def\grayvalue #1{\ctxlua{tex.sprint(_clib_.formatgray (\thecolorattribute{#1},"\colorformatseparator"))}} +\def\colorvalue #1{\ctxlua{commands.formatcolor(\thecolorattribute{#1},"\colorformatseparator")}} +\def\grayvalue #1{\ctxlua{commands.formatgray (\thecolorattribute{#1},"\colorformatseparator")}} -\def\doifblackelse #1{\ctxlua{commands.doifelse(_clib_.isblack(\thecolorattribute{#1}))}} -\def\doifdrawingblackelse {\ctxlua{commands.doifelse(_clib_.isblack(tex.attribute[attributes.numbers['color']]))}} +\def\doifblackelse #1{\ctxlua{commands.doifblackelse(\thecolorattribute{#1})}} +\def\doifdrawingblackelse {\ctxlua{commands.doifdrawingblackelse()}} %D \macros %D {forcecolorhack} diff --git a/tex/context/base/cont-new.tex b/tex/context/base/cont-new.tex index d46a8d45c..480b99dff 100644 --- a/tex/context/base/cont-new.tex +++ b/tex/context/base/cont-new.tex @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2010.12.07 00:30} +\newcontextversion{2010.12.09 12:11} %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/context.mkii b/tex/context/base/context.mkii index 4156f2b59..3bbb7e304 100644 --- a/tex/context/base/context.mkii +++ b/tex/context/base/context.mkii @@ -114,7 +114,7 @@ %D just go for the best there is and load \TABLE. Just to be %D sure we do it here, before we redefine \type{|}. -\loadcorefile{thrd-tab} % based on: Michael Wichura / will be reimplemented +\loadmarkfile{thrd-tab} % based on: Michael Wichura's TaBlE %D Here comes the last support modules. They take care of %D some language specific things. @@ -125,7 +125,7 @@ %D load additional definition modules when needed. \loadmarkfile{regi-ini} -\loadcorefile{regi-syn} +\loadmarkfile{regi-syn} \loadmarkfile{enco-ini} %loadmarkfile{filt-ini} \loadmarkfile{hand-ini} diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv index 7e15413c5..9ed4161a6 100644 --- a/tex/context/base/context.mkiv +++ b/tex/context/base/context.mkiv @@ -118,7 +118,6 @@ \loadmarkfile{cont-fil} \loadmarkfile{regi-ini} -\loadcorefile{regi-syn} \loadmarkfile{enco-ini} \loadmarkfile{hand-ini} diff --git a/tex/context/base/context.tex b/tex/context/base/context.tex index adb4e1115..2836c355e 100644 --- a/tex/context/base/context.tex +++ b/tex/context/base/context.tex @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2010.12.07 00:30} +\edef\contextversion{2010.12.09 12:11} %D For those who want to use this: diff --git a/tex/context/base/core-def.mkiv b/tex/context/base/core-def.mkiv index 989a13c75..44e59ecae 100644 --- a/tex/context/base/core-def.mkiv +++ b/tex/context/base/core-def.mkiv @@ -18,7 +18,7 @@ \unprotect -\usesymbols[mis,mvs,nav] +\usesymbols[mis,nav] % no longer mvs preloaded \setupsymbolset[navigation 1] diff --git a/tex/context/base/core-ini.mkiv b/tex/context/base/core-ini.mkiv index cd2d2e25e..90ec9df24 100644 --- a/tex/context/base/core-ini.mkiv +++ b/tex/context/base/core-ini.mkiv @@ -21,7 +21,7 @@ \everypar \emptytoks \neverypar \emptytoks -\appendtoks \flushnotes \to \everypar +%appendtoks \flushnotes \to \everypar \appendtoks \synchronizesidefloats \to \everypar \appendtoks \checkindentation \to \everypar @@ -29,6 +29,7 @@ \appendtoks \restoreinterlinepenalty \to \everypar \appendtoks \flushmargincontents \to \everypar \appendtoks \flushcommentanchors \to \everypar +\appendtoks \flushnotes \to \everypar \appendtoks \synchronizenotes \to \everypar \appendtoks \OTRSETshowstatus \to \everypar \appendtoks \flushpostponedbookmark \to \everypar diff --git a/tex/context/base/font-ini.mkiv b/tex/context/base/font-ini.mkiv index 326cc0d53..29b95aeb1 100644 --- a/tex/context/base/font-ini.mkiv +++ b/tex/context/base/font-ini.mkiv @@ -1737,24 +1737,23 @@ % some day we can do an auto-fam if needed -\def\checkmathbodyfont#1#2#3% style alt size / gdef % #3 can be empty - {%\message{!m #1 #2 #3!}% - % #1 #2 #3 = signal - %setugvalue {#2}{\setcurrentfontalternative {#2}}% \mr \mb - \setugvalue {#1}{\setcurrentfontstyle {#1}}}% \mm +\def\checkmathbodyfont#1#2#3% style alt size / gdef % #3 can be empty (checking needed as \bf is already defined) + {%\message{!m #1 #2 #3!}% #1 #2 #3 = signal + %ifcsname #2\endcsname\else\setugvalue {#2}{\setcurrentfontalternative {#2}}\fi % \mr \mb + \ifcsname #1\endcsname\else\setugvalue {#1}{\setcurrentfontstyle {#1}}\fi} % \mm -\def\checktextbodyfont#1#2#3% style alt size / gdef % #3 can be empty +\def\checktextbodyfont#1#2#3% style alt size / gdef % #3 can be empty (checking needed as \bf is already defined) {%\message{!t #1 #2 #3!}% - \setugvalue {#1#3}{\setcurrentfontstylesize {#1}{#3}}% \rma - \setugvalue {#2#3}{\setcurrentfontalternativesize {#2}{#3}}% \sla - \setugvalue {#1#2#3}{\setcurrentfontstylealternativesize{#1}{#2}{#3}}% \rmsla - \setugvalue {#1}{\setcurrentfontstyle {#1}}% \rm - \setugvalue {#2}{\setcurrentfontalternative {#2}}% \sl - \setugvalue {#1\c!x}{\setcurrentfontxstylealternative {#1}}% \rmx - \setugvalue{#1\c!xx}{\setcurrentfontxxstylealternative {#1}}% \rmxx - \setugvalue {#2\c!x}{\setcurrentfontxalternative {#2}}% \slx - \setugvalue{#2\c!xx}{\setcurrentfontxxalternative {#2}}% \slxx - \setugvalue {#1#2}{\setcurrentfontstylealternative {#1}{#2}}}% \rmsl + \ifcsname #1#3\endcsname\else\setugvalue {#1#3}{\setcurrentfontstylesize {#1}{#3}}\fi % \rma + \ifcsname #2#3\endcsname\else\setugvalue {#2#3}{\setcurrentfontalternativesize {#2}{#3}}\fi % \sla + \ifcsname #1#2#3\endcsname\else\setugvalue {#1#2#3}{\setcurrentfontstylealternativesize{#1}{#2}{#3}}\fi % \rmsla + \ifcsname #1\endcsname\else\setugvalue {#1}{\setcurrentfontstyle {#1}}\fi % \rm + \ifcsname #2\endcsname\else\setugvalue {#2}{\setcurrentfontalternative {#2}}\fi % \sl + \ifcsname #1\c!x\endcsname\else\setugvalue {#1\c!x}{\setcurrentfontxstylealternative {#1}}\fi % \rmx + \ifcsname#1\c!xx\endcsname\else\setugvalue{#1\c!xx}{\setcurrentfontxxstylealternative {#1}}\fi % \rmxx + \ifcsname #2\c!x\endcsname\else\setugvalue {#2\c!x}{\setcurrentfontxalternative {#2}}\fi % \slx + \ifcsname#2\c!xx\endcsname\else\setugvalue{#2\c!xx}{\setcurrentfontxxalternative {#2}}\fi % \slxx + \ifcsname #1#2\endcsname\else\setugvalue {#1#2}{\setcurrentfontstylealternative {#1}{#2}}\fi} % \rmsl \def\dodefinedefaultbodyfont[#1][#2][#3]% sizes styles identifier {\def\dododefinedefaultbodyfont##1% @@ -3226,9 +3225,6 @@ \ifx\fontalternative\c!bs \sl \else \tf \fi\fi} -\let\typeface\normaltypeface -\let\boldface\normalboldface - \unexpanded\def\swaptypeface {\relax \ifx\fontalternative\c!it \tf \else @@ -3238,6 +3234,10 @@ \ifx\fontalternative\c!bi \bf \else \emphasistypeface \fi\fi\fi\fi\fi} +\let\typeface\normaltypeface +\let\boldface\normalboldface +\let\swapface\swaptypeface + %D To be set with the default body font environment: \type %D {em} being \type {slanted} or \type {italic}. @@ -3580,36 +3580,90 @@ \let\thedefinedfont\relax -\def\symbolicsizedfont#1#2#3% - {\scaledfontsize#1% - \scaledfontsize#2\scaledfontsize - \font\thedefinedfont=\truefontname{\glyphfontfile{#3}} at \currentfontbodyscale\scaledfontsize\relax - \thedefinedfont} +% \def\symbolicsizedfont#1#2#3% +% {\scaledfontsize#1% +% \scaledfontsize#2\scaledfontsize +% \font\thedefinedfont=\truefontname{\glyphfontfile{#3}} at \currentfontbodyscale\scaledfontsize\relax +% \thedefinedfont} +% +% \def\symbolicscaledfont +% {\symbolicsizedfont\fontbody} +% +% \unexpanded\def\symbolicfont +% {\symbolicsizedfont\fontbody\plusone} +% +% \unexpanded\def\getglyph#1#2% slow, faster, much faster +% %{{\definefont[\s!dummy][\glyphfontfile{#1} sa \currentfontscale]\dummy#2}} +% %{{\definefont[\s!dummy][\glyphfontfile{#1} sa *]\dummy#2}} +% %{{\symbolicfont{#1}#2}} +% {{\symbolicfont{#1}\doifnumberelse{#2}\char\donothing#2}} +% +% \unexpanded\def\getscaledglyph#1#2#3% +% {{\symbolicscaledfont{#1}{#2}\doifnumberelse{#3}\char\donothing#3}} +% +% \unexpanded\def\getrawglyph#1#2% for simple symbols +% {{\scaledfontsize\fontbody +% \font\thedefinedfont=#1 at \currentfontbodyscale\scaledfontsize\relax +% \thedefinedfont\doifnumberelse{#2}\char\donothing#2}} +% +% \unexpanded\def\getfontchar#1#2% +% {{\symbolicfont{#1}\fontchar{#2}}} + +\def\setscaledstyledsymbolicfont#1#2#3% quite a slowdown, glyphfontfile + {\edef\askedsymbolfont{\truefontname{\glyphfontfile{#3}} at \the\dimexpr#2\dimexpr\currentfontbodyscale\dimexpr#1}% + \ifcsname\??ss->\askedsymbolfont\endcsname + \csname\??ss->\askedsymbolfont\endcsname + \else + \dodefinesymbolicfont + \fi} + +\def\setscaleddirectsymbolicfont#1#2#3% quite a slowdown, glyphfontfile + {\edef\askedsymbolfont{\truefontname{#3} at \the\dimexpr#2\dimexpr\currentfontbodyscale\dimexpr#1}% + \ifcsname\??ss->\askedsymbolfont\endcsname + \csname\??ss->\askedsymbolfont\endcsname + \else + \dodefinesymbolicfont + \fi} + +\def\setstyledsymbolicfont#1% quite a slowdown, glyphfontfile + {\edef\askedsymbolfont{\truefontname{\glyphfontfile{#1}} at \the\dimexpr\currentfontbodyscale\dimexpr\fontbody}% + \ifcsname\??ss->\askedsymbolfont\endcsname + \csname\??ss->\askedsymbolfont\endcsname + \else + \dodefinesymbolicfont + \fi} -\def\symbolicscaledfont - {\symbolicsizedfont\fontbody} +\def\setdirectsymbolicfont#1% + {\edef\askedsymbolfont{\truefontname{#1} at \the\dimexpr\currentfontbodyscale\dimexpr\fontbody}% + \ifcsname\??ss->\askedsymbolfont\endcsname + \csname\??ss->\askedsymbolfont\endcsname + \else + \dodefinesymbolicfont + \fi} -\unexpanded\def\symbolicfont - {\symbolicsizedfont\fontbody\plusone} +\def\dodefinesymbolicfont + {\definefont[currentsymbolfont][\askedsymbolfont]% + \currentsymbolfont + \global\expandafter\let\csname\??ss->\askedsymbolfont\endcsname\lastrawfontcall} -\unexpanded\def\getglyph#1#2% slow, faster, much faster - %{{\definefont[\s!dummy][\glyphfontfile{#1} sa \currentfontscale]\dummy#2}} - %{{\definefont[\s!dummy][\glyphfontfile{#1} sa *]\dummy#2}} - %{{\symbolicfont{#1}#2}} - {{\symbolicfont{#1}\doifnumberelse{#2}\char\donothing#2}} +\unexpanded\def\getnamedglyphstyled#1#2{{\setstyledsymbolicfont{#1}\ctxlua{fonts.char("#2")}}} +\unexpanded\def\getnamedglyphdirect#1#2{{\setdirectsymbolicfont{#1}\ctxlua{fonts.char("#2")}}} +\unexpanded\def\getglyphstyled #1#2{{\setstyledsymbolicfont{#1}\doifnumberelse{#2}\char\donothing#2}} +\unexpanded\def\getglyphdirect #1#2{{\setdirectsymbolicfont{#1}\doifnumberelse{#2}\char\donothing#2}} +\unexpanded\def\getscaledglyph #1#2#3{{\setscaledstyledsymbolicfont{#1}{#2}\doifnumberelse{#3}\char\donothing#3}} -\unexpanded\def\getscaledglyph#1#2#3% - {{\symbolicscaledfont{#1}{#2}\doifnumberelse{#3}\char\donothing#3}} +\let\getglyph \getglyphstyled % old +\let\getrawglyph \getglyphdirect % old +\let\symbolicsizedfont\setscaledstyledsymbolicfont % old +\let\symbolicfont \setstyledsymbolicfont % old -\unexpanded\def\getrawglyph#1#2% for simple symbols - {{\scaledfontsize\fontbody - \font\thedefinedfont=#1 at \currentfontbodyscale\scaledfontsize\relax - \thedefinedfont\doifnumberelse{#2}\char\donothing#2}} +\unexpanded\def\symbolicscaledfont{\setsscaledstyledsymbolicfont\fontbody} +\unexpanded\def\symbolicscaledfont{\setscaledstyledsymbolicfont\fontbody} %D The last implementation of \type {\getglyph} permits %D definitions like: %D -%D \starttyping +%D \starttypings %D \definefontsynonym [EuroSans] [eurose] %D \definefontsynonym [EuroSansBold] [euroseb] %D \definefontsynonym [EuroSansItalic] [eurosei] diff --git a/tex/context/base/font-otf.lua b/tex/context/base/font-otf.lua index 922574ed2..ba64b1326 100644 --- a/tex/context/base/font-otf.lua +++ b/tex/context/base/font-otf.lua @@ -1028,7 +1028,8 @@ actions["prepare unicodes"] = function(data,filename,raw) -- beware: the indices table is used to initialize the tfm table local encname = lower(data.enc_name or (mapenc and mapenc[1] and mapenc[1].enc_name) or "") -- mapenc will go away -- will become: local encname = lower(data.enc_name or "") - if encname == "" or encname == "unicodebmp" or encname == "unicodefull" then -- maybe find(encname,"unicode") +--~ if encname == "" or encname == "unicodebmp" or encname == "unicodefull" then -- maybe find(encname,"unicode") + if find(encname,"unicode") then if trace_loading then report_otf("using extra unicode map") end diff --git a/tex/context/base/l-lpeg.lua b/tex/context/base/l-lpeg.lua index be5d56947..6b611c2c8 100644 --- a/tex/context/base/l-lpeg.lua +++ b/tex/context/base/l-lpeg.lua @@ -17,7 +17,7 @@ lpeg.patterns = lpeg.patterns or { } -- so that we can share local patterns = lpeg.patterns local P, R, S, V, match = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.match -local Ct, C, Cs, Cc, Cf, Cg = lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Cf, lpeg.Cg +local Ct, C, Cs, Cc = lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc local lpegtype = lpeg.type local utfcharacters = string.utfcharacters diff --git a/tex/context/base/l-pdfview.lua b/tex/context/base/l-pdfview.lua index 85545cd10..b4285fd8a 100644 --- a/tex/context/base/l-pdfview.lua +++ b/tex/context/base/l-pdfview.lua @@ -11,17 +11,17 @@ local format, concat = string.format, table.concat pdfview = pdfview or { } local opencalls = { - ['default'] = "pdfopen --file", -- "pdfopen --back --file" + ['default'] = "pdfopen --ax --file", -- "pdfopen --back --file" ['xpdf'] = "xpdfopen", } local closecalls= { - ['default'] = "pdfclose --file", + ['default'] = "pdfclose --ax --file", ['xpdf'] = nil, } local allcalls = { - ['default'] = "pdfclose --all", + ['default'] = "pdfclose --ax --all", ['xpdf'] = nil, } diff --git a/tex/context/base/m-pictex.tex b/tex/context/base/m-pictex.tex index abb81b76e..71b0a78fe 100644 --- a/tex/context/base/m-pictex.tex +++ b/tex/context/base/m-pictex.tex @@ -27,7 +27,7 @@ \fi \ifx\beginpicture\undefined \ifx\newenvironment\undefined - \readfile{thrd-pic.tex}{}{} + \loadmarkfile{thrd-pic}% \else \input prepictex.tex \relax \input pictex.tex \relax diff --git a/tex/context/base/node-mig.mkiv b/tex/context/base/node-mig.mkiv index 3047ac3af..337703611 100644 --- a/tex/context/base/node-mig.mkiv +++ b/tex/context/base/node-mig.mkiv @@ -45,7 +45,7 @@ \newtoks \everyautomigratefootnotes \newtoks \everyautomigratemarks -\def\automigrateinserts{\the\everyautomigratefootnotes} +\def\automigrateinserts{\the\everyautomigratefootnotes} % soon default but does not work (yet) for notes in captions (themselves inserts) \def\automigratemarks {\the\everyautomigratemarks} \appendtoks diff --git a/tex/context/base/regi-ini.lua b/tex/context/base/regi-ini.lua index c6456b242..979a39994 100644 --- a/tex/context/base/regi-ini.lua +++ b/tex/context/base/regi-ini.lua @@ -23,16 +23,66 @@ local data = regimes.data regimes.utf = regimes.utf or { } -regimes.synonyms = regimes.synonyms or { } -local synonyms = regimes.synonyms +-- regimes.synonyms = regimes.synonyms or { } +-- local synonyms = regimes.synonyms +-- +-- if storage then +-- storage.register("regimes/synonyms", synonyms, "regimes.synonyms") +-- else +-- regimes.synonyms = { } +-- end + +local synonyms = { + + ["windows-1250"] = "cp1250", + ["windows-1251"] = "cp1251", + ["windows-1252"] = "cp1252", + ["windows-1253"] = "cp1253", + ["windows-1254"] = "cp1254", + ["windows-1255"] = "cp1255", + ["windows-1256"] = "cp1256", + ["windows-1257"] = "cp1257", + ["windows-1258"] = "cp1258", + + ["il1"] = "8859-1", + ["il2"] = "8859-2", + ["il3"] = "8859-3", + ["il4"] = "8859-4", + ["il5"] = "8859-9", + ["il6"] = "8859-10", + ["il7"] = "8859-13", + ["il8"] = "8859-14", + ["il9"] = "8859-15", + ["il10"] = "8859-16", + + ["iso-8859-1"] = "8859-1", + ["iso-8859-2"] = "8859-2", + ["iso-8859-3"] = "8859-3", + ["iso-8859-4"] = "8859-4", + ["iso-8859-9"] = "8859-9", + ["iso-8859-10"] = "8859-10", + ["iso-8859-13"] = "8859-13", + ["iso-8859-14"] = "8859-14", + ["iso-8859-15"] = "8859-15", + ["iso-8859-16"] = "8859-16", + + ["latin1"] = "8859-1", + ["latin2"] = "8859-2", + ["latin3"] = "8859-3", + ["latin4"] = "8859-4", + ["latin5"] = "8859-9", + ["latin6"] = "8859-10", + ["latin7"] = "8859-13", + ["latin8"] = "8859-14", + ["latin9"] = "8859-15", + ["latin10"] = "8859-16", + + ["utf-8"] = "utf", + ["utf8"] = "utf", + + ["windows"] = "cp1252", -if storage then - storage.register("regimes/synonyms", synonyms, "regimes.synonyms") -else - regimes.synonyms = { } -end - --- setmetatable(regimes.data,_empty_table_) +} regimes.currentregime = "utf" @@ -44,7 +94,7 @@ function regimes.number(n) if type(n) == "string" then return tonumber(n,16) else return n end end -function regimes.setsynonym(synonym,target) +function regimes.setsynonym(synonym,target) -- more or less obsolete synonyms[synonym] = target end diff --git a/tex/context/base/regi-ini.mkiv b/tex/context/base/regi-ini.mkiv index db7a224ac..b306d87f4 100644 --- a/tex/context/base/regi-ini.mkiv +++ b/tex/context/base/regi-ini.mkiv @@ -25,7 +25,7 @@ %D \macros %D {defineregimesynonym,trueregimename} -\unexpanded\def\defineregimesynonym +\unexpanded\def\defineregimesynonym % more or less obsolete {\dodoubleargument\dodefineregimesynonym} \def\dodefineregimesynonym[#1][#2]% diff --git a/tex/context/base/regi-syn.mkii b/tex/context/base/regi-syn.mkii new file mode 100644 index 000000000..7a8a9c146 --- /dev/null +++ b/tex/context/base/regi-syn.mkii @@ -0,0 +1,73 @@ +%D \module +%D [ file=regi-syn, +%D version=2006.04.04, +%D title=\CONTEXT\ Regime Macros, +%D subtitle=Synonyms, +%D author=Mojca Miklavec \& Hans Hagen, +%D date=\currentdate, +%D copyright=PRAGMA] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{ConTeXt Regime Macros / Synonyms} + +\unprotect + +\defineregimesynonym [windows-1250] [cp1250] +\defineregimesynonym [windows-1251] [cp1251] +\defineregimesynonym [windows-1252] [cp1252] +\defineregimesynonym [windows-1253] [cp1253] +\defineregimesynonym [windows-1254] [cp1254] +%defineregimesynonym [windows-1255] [cp1255] % not supported yet (Hebrew) +%defineregimesynonym [windows-1256] [cp1256] % not supported yet (Arabic) +\defineregimesynonym [windows-1257] [cp1257] +%defineregimesynonym [windows-1258] [cp1258] % not supported yet (Vietnamese) + +\defineregimesynonym [il1] [8859-1] +\defineregimesynonym [il2] [8859-2] +\defineregimesynonym [il3] [8859-3] +\defineregimesynonym [il4] [8859-4] +\defineregimesynonym [il5] [8859-9] +\defineregimesynonym [il6] [8859-10] +\defineregimesynonym [il7] [8859-13] +%defineregimesynonym [il8] [8859-14] +\defineregimesynonym [il9] [8859-15] +\defineregimesynonym [il10] [8859-16] + +\defineregimesynonym [iso-8859-1] [8859-1] +\defineregimesynonym [iso-8859-2] [8859-2] +\defineregimesynonym [iso-8859-3] [8859-3] +\defineregimesynonym [iso-8859-4] [8859-4] +\defineregimesynonym [iso-8859-9] [8859-9] +\defineregimesynonym [iso-8859-10] [8859-10] +\defineregimesynonym [iso-8859-13] [8859-13] +%defineregimesynonym [iso-8859-14] [8859-14] +\defineregimesynonym [iso-8859-15] [8859-15] +\defineregimesynonym [iso-8859-16] [8859-16] + +\defineregimesynonym [latin1] [8859-1] +\defineregimesynonym [latin2] [8859-2] +\defineregimesynonym [latin3] [8859-3] +\defineregimesynonym [latin4] [8859-4] +\defineregimesynonym [latin5] [8859-9] +\defineregimesynonym [latin6] [8859-10] +\defineregimesynonym [latin7] [8859-13] +%defineregimesynonym [latin8] [8859-14] +\defineregimesynonym [latin9] [8859-15] +\defineregimesynonym [latin10] [8859-16] + +% kind of special + +\defineregimesynonym [utf-8] [utf] +\defineregimesynonym [utf8] [utf] + +% for historical reasons / compatibility + +\defineregimesynonym [windows] [cp1252] +\defineregimesynonym [grk] [8859-7] +\defineregimesynonym [iso88595] [8859-5] + +\protect \endinput + diff --git a/tex/context/base/regi-syn.tex b/tex/context/base/regi-syn.tex deleted file mode 100644 index 7a8a9c146..000000000 --- a/tex/context/base/regi-syn.tex +++ /dev/null @@ -1,73 +0,0 @@ -%D \module -%D [ file=regi-syn, -%D version=2006.04.04, -%D title=\CONTEXT\ Regime Macros, -%D subtitle=Synonyms, -%D author=Mojca Miklavec \& Hans Hagen, -%D date=\currentdate, -%D copyright=PRAGMA] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -\writestatus{loading}{ConTeXt Regime Macros / Synonyms} - -\unprotect - -\defineregimesynonym [windows-1250] [cp1250] -\defineregimesynonym [windows-1251] [cp1251] -\defineregimesynonym [windows-1252] [cp1252] -\defineregimesynonym [windows-1253] [cp1253] -\defineregimesynonym [windows-1254] [cp1254] -%defineregimesynonym [windows-1255] [cp1255] % not supported yet (Hebrew) -%defineregimesynonym [windows-1256] [cp1256] % not supported yet (Arabic) -\defineregimesynonym [windows-1257] [cp1257] -%defineregimesynonym [windows-1258] [cp1258] % not supported yet (Vietnamese) - -\defineregimesynonym [il1] [8859-1] -\defineregimesynonym [il2] [8859-2] -\defineregimesynonym [il3] [8859-3] -\defineregimesynonym [il4] [8859-4] -\defineregimesynonym [il5] [8859-9] -\defineregimesynonym [il6] [8859-10] -\defineregimesynonym [il7] [8859-13] -%defineregimesynonym [il8] [8859-14] -\defineregimesynonym [il9] [8859-15] -\defineregimesynonym [il10] [8859-16] - -\defineregimesynonym [iso-8859-1] [8859-1] -\defineregimesynonym [iso-8859-2] [8859-2] -\defineregimesynonym [iso-8859-3] [8859-3] -\defineregimesynonym [iso-8859-4] [8859-4] -\defineregimesynonym [iso-8859-9] [8859-9] -\defineregimesynonym [iso-8859-10] [8859-10] -\defineregimesynonym [iso-8859-13] [8859-13] -%defineregimesynonym [iso-8859-14] [8859-14] -\defineregimesynonym [iso-8859-15] [8859-15] -\defineregimesynonym [iso-8859-16] [8859-16] - -\defineregimesynonym [latin1] [8859-1] -\defineregimesynonym [latin2] [8859-2] -\defineregimesynonym [latin3] [8859-3] -\defineregimesynonym [latin4] [8859-4] -\defineregimesynonym [latin5] [8859-9] -\defineregimesynonym [latin6] [8859-10] -\defineregimesynonym [latin7] [8859-13] -%defineregimesynonym [latin8] [8859-14] -\defineregimesynonym [latin9] [8859-15] -\defineregimesynonym [latin10] [8859-16] - -% kind of special - -\defineregimesynonym [utf-8] [utf] -\defineregimesynonym [utf8] [utf] - -% for historical reasons / compatibility - -\defineregimesynonym [windows] [cp1252] -\defineregimesynonym [grk] [8859-7] -\defineregimesynonym [iso88595] [8859-5] - -\protect \endinput - diff --git a/tex/context/base/strc-mar.lua b/tex/context/base/strc-mar.lua index f92d594ab..7db26b10e 100644 --- a/tex/context/base/strc-mar.lua +++ b/tex/context/base/strc-mar.lua @@ -547,3 +547,20 @@ function marks.number(tag,n) -- no spec -- no prefix (as it is the prefix) lists.savednumber(tag,n) end + +-- interface + +commands.definemarking = marks.define +commands.relatemarking = marks.relate +commands.setmarking = marks.set +commands.resetmarking = marks.reset +commands.synchronizemarking = marks.synchronize +commands.getmarking = marks.fetch +commands.fetchonemark = marks.fetchonemark +commands.fetchtwomarks = marks.fetchtwomarks +commands.fetchallmarks = marks.fetchallmarks + +function commands.doifelsemarking(str) -- can be shortcut + commands.testcase(marks.exists(str)) +end + diff --git a/tex/context/base/strc-mar.mkiv b/tex/context/base/strc-mar.mkiv index 23c1239a4..a7458f2d8 100644 --- a/tex/context/base/strc-mar.mkiv +++ b/tex/context/base/strc-mar.mkiv @@ -82,31 +82,31 @@ \def\dodefinemarking[#1][#2]% marking parent {\doifelsenothing{#2} - {\ctxlua{structures.marks.define("#1")}% + {\ctxlua{commands.definemarking("#1")}% \getparameters[\??mk#1][\s!parent=\??mk]} - {\ctxlua{structures.marks.define("#1",{ parent = "#2" })}% + {\ctxlua{commands.definemarking("#1",{ parent = "#2" })}% \getparameters[\??mk#1][\s!parent=\??mk#2]}} \def\dorelatemarking[#1][#2]% - {\ctxlua{structures.marks.relate("#1","#2")}} + {\ctxlua{commands.relatemarking("#1","#2")}} \def\dosetmarking[#1]#2% {\ifconditional\inhibitsetmarking % nothing \else \doifelse{\namedmarkingparameter{#1}\c!expansion}\v!yes - {\ctxlua{structures.marks.set("#1",\!!bs#2\!!es)}} - {\ctxlua{structures.marks.set("#1",\!!bs\detokenize{#2}\!!es)}}% + {\ctxlua{commands.setmarking("#1",\!!bs#2\!!es)}} + {\ctxlua{commands.setmarking("#1",\!!bs\detokenize{#2}\!!es)}}% \fi} \def\doresetmarking[#1]% - {\ctxlua{structures.marks.reset("#1")}} + {\ctxlua{commands.resetmarking("#1")}} \def\doifelsemarking#1% - {\ctxlua{commands.testcase(structures.marks.exists("#1"))}} + {\ctxlua{commands.doifelsemarking("#1")}} \def\dosynchronizemarking[#1][#2]% class boxnumber (some day also name), maybe second argument table - {\ifvoid#2\else\ctxlua{structures.marks.synchronize("#1",\number#2)}\fi} + {\ifvoid#2\else\ctxlua{commands.synchronizemarking("#1",\number#2)}\fi} % \appendtoks % \dosynchronizemarking[\v!page][\normalpagebox]% @@ -138,23 +138,27 @@ \setsystemmode\v!marking \the\everymarking \ifthirdargument - \ctxlua{structures.marks.fetch("#1","#2","#3")}% + \ctxlua{commands.getmarking("#1","#2","#3")}% \else - \ctxlua{structures.marks.fetch("#1","\v!page","#2")}% + \ctxlua{commands.getmarking("#1","\v!page","#2")}% \fi \endgroup}} % the fetchers are fully expandable: [name][method] -\def\fetchmark[#1]#2[#3]{\ifconditional\inhibitgetmarking\else\ctxlua{structures.marks.fetchonemark ("#1","\v!page","#2")}\fi} -\def\fetchtwomarks [#1]{\ifconditional\inhibitgetmarking\else\ctxlua{structures.marks.fetchtwomarks("#1","\v!page")}\fi} -\def\fetchallmarks [#1]{\ifconditional\inhibitgetmarking\else\ctxlua{structures.marks.fetchallmarks("#1","\v!page")}\fi} +\def\fetchonemark[#1]#2[#3]{\ifconditional\inhibitgetmarking\else\ctxlua{commands.fetchonemark ("#1","\v!page","#2")}\fi} +\def\fetchtwomarks [#1]{\ifconditional\inhibitgetmarking\else\ctxlua{commands.fetchtwomarks("#1","\v!page")}\fi} +\def\fetchallmarks [#1]{\ifconditional\inhibitgetmarking\else\ctxlua{commands.fetchallmarks("#1","\v!page")}\fi} + +\let\fetchmark\fetchonemark % also fully expandable but here we have: [name][range][method] -\def\fetchmarking[#1]#2[#3]#4[#5]{\ifconditional\inhibitgetmarking\else\ctxlua{structures.marks.fetchonemark ("#1","#3","#5")}\fi} -\def\fetchtwomarkings [#1]#2[#3]{\ifconditional\inhibitgetmarking\else\ctxlua{structures.marks.fetchtwomarks("#1","#3")}\fi} -\def\fetchallmarkings [#1]#2[#3]{\ifconditional\inhibitgetmarking\else\ctxlua{structures.marks.fetchallmarks("#1","#3")}\fi} +\def\fetchonemarking[#1]#2[#3]#4[#5]{\ifconditional\inhibitgetmarking\else\ctxlua{commands.fetchonemark ("#1","#3","#5")}\fi} +\def\fetchtwomarkings [#1]#2[#3]{\ifconditional\inhibitgetmarking\else\ctxlua{commands.fetchtwomarks("#1","#3")}\fi} +\def\fetchallmarkings [#1]#2[#3]{\ifconditional\inhibitgetmarking\else\ctxlua{commands.fetchallmarks("#1","#3")}\fi} + +\let\fetchmarking\fetchonemarking \def\markingseparator#1{\namedmarkingparameter{#1}\c!separator} \def\markingcommand #1{\namedmarkingparameter{#1}\c!filtercommand} diff --git a/tex/context/base/strc-not.mkiv b/tex/context/base/strc-not.mkiv index d011cf0f3..8d3ef7773 100644 --- a/tex/context/base/strc-not.mkiv +++ b/tex/context/base/strc-not.mkiv @@ -831,6 +831,7 @@ \let\flushnotes\relax \let\postponenotes\relax \forgetall + \resetallattributes % new, we don't want color bleed into notes \to \everybeforenoteinsert \appendtoks diff --git a/tex/context/base/symb-cow.mkii b/tex/context/base/symb-cow.mkii new file mode 100644 index 000000000..fac6ca485 --- /dev/null +++ b/tex/context/base/symb-cow.mkii @@ -0,0 +1,132 @@ +%D \module +%D [ file=symb-cow, +%D version=2006.06.23, +%D title=\CONTEXT\ Symbol Libraries, +%D subtitle=Cow Symbols, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright=\PRAGMA] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\loadmapfile[koeieletters.map] + +\definefontsynonym [Cows] [koeielett] +\definefontsynonym [CowsContour] [koeielett-contour] +\definefontsynonym [CowsLogo] [koeielogos] +\definefontsynonym [CowsLogoContour] [koeielogos-contour] + +\definecolor [lsky] [r=.6,g=.6,b=1] +\definecolor [dsky] [r=.1,g=.1,b=1] +\definecolor [lground] [r=.3,g=.9,b=.3] +\definecolor [dground] [r=0,g=.5,b=0] +\definecolor [cspots] [r=.33,g=.1,b=0] + +\definecolor [tlsky] [t=.5,a=1,r=.6,g=.6,b=1] +\definecolor [tdsky] [t=.5,a=1,r=.1,g=.1,b=1] +\definecolor [tlground] [t=.5,a=1,r=.3,g=.9,b=.3] +\definecolor [tdground] [t=.5,a=1,r=0,g=.5,b=0] +\definecolor [tcspots] [t=.5,a=1,r=.33,g=.1,b=0] + +\definepalet + [cow] + [normal=lground, + contour=dground, + sky=lsky] + +\def\CowNormal#1% + {\dontleavehmode\hbox{\color[cow:normal]{\getglyph{Cows}{#1}}}} + +\def\ScaledCowNormal#1#2% + {\dontleavehmode\hbox{\color[cow:normal]{\definedfont[Cows sa #1]#2}}} + +\def\ScaledCowOverlay#1#2% + {\dontleavehmode\hbox + {\color[cow:contour]{\hsmash{\definedfont[CowsContour sa #1]#2}}% + \color[cow:normal] {\definedfont[Cows sa #1]#2}}} + +\def\CowOverlay#1% + {\dontleavehmode\hbox + {\color[cow:contour]{\hsmash{\getglyph{CowsContour}{#1}}}% + \color[cow:normal] {\getglyph{Cows} {#1}}}} + +\def\CowContour#1% + {\dontleavehmode\hbox + {\color[cow:contour]{\hsmash{\getglyph{CowsLogoContour}{#1}}}% + \color[cow:normal] {\getglyph{CowsLogo} {#1}}}} + +\def\CowLogo #1{\getglyph{CowsLogo} {\char#1\relax}} +\def\CowContourLogo#1{\getglyph{CowsLogoContour}{\char#1\relax}} + +\chardef\CowPragmaNormal= 1 +\chardef\CowPragmaShaded=20 + +\startsymbolset[cownormal] + + \definesymbol[CowPragmaADE] [\CowLogo{0}] + \definesymbol[CowPragma] [\CowLogo{1}] + \definesymbol[CowConTeXt] [\CowLogo{2}] + \definesymbol[CowConTeXtComplete] [\CowLogo{3}] + \definesymbol[CowConTeXtShadow] [\CowLogo{4}] + \definesymbol[CowConTeXtContour] [\CowLogo{5}] + \definesymbol[CowConTeXtOutline] [\CowLogo{6}] + \definesymbol[CowConTeXtDots] [\CowLogo{7}] + \definesymbol[CowMP] [\CowLogo{8}] + \definesymbol[CowMPComplete] [\CowLogo{9}] + \definesymbol[CowTeX] [\CowLogo{10}] + \definesymbol[CowTeXComplete] [\CowLogo{11}] + \definesymbol[CowBoo] [\CowLogo{12}] + \definesymbol[CowCow] [\CowLogo{13}] + \definesymbol[CowExampleComplete] [\CowLogo{14}] + \definesymbol[CowFoxetComplete] [\CowLogo{15}] + \definesymbol[CowMetafun] [\CowLogo{16}] + \definesymbol[CowMetafunComplete] [\CowLogo{17}] + \definesymbol[CowTEXComplete] [\CowLogo{18}] + \definesymbol[CowWikiComplete] [\CowLogo{19}] + \definesymbol[CowPragmaADEComplete][\CowLogo{20}] + \definesymbol[CowPragmaComplete] [\CowLogo{21}] + \definesymbol[CowExample] [\CowLogo{22}] + \definesymbol[CowFoxet] [\CowLogo{23}] + \definesymbol[CowTEX] [\CowLogo{24}] + \definesymbol[CowWiki] [\CowLogo{25}] + \definesymbol[CowCowTeXtComplete] [\CowLogo{26}] + \definesymbol[CowCowTeXt] [\CowLogo{27}] + +\stopsymbolset + +\startsymbolset[cowcontour] + + \definesymbol[CowPragmaADE] [\CowContourLogo{0}] + \definesymbol[CowPragma] [\CowContourLogo{1}] + \definesymbol[CowConTeXt] [\CowContourLogo{2}] + \definesymbol[CowConTeXtComplete] [\CowContourLogo{3}] + \definesymbol[CowConTeXtShadow] [\CowContourLogo{4}] + \definesymbol[CowConTeXtContour] [\CowContourLogo{5}] + \definesymbol[CowConTeXtOutline] [\CowContourLogo{6}] + \definesymbol[CowConTeXtDots] [\CowContourLogo{7}] + \definesymbol[CowMP] [\CowContourLogo{8}] + \definesymbol[CowMPComplete] [\CowContourLogo{9}] + \definesymbol[CowTeX] [\CowContourLogo{10}] + \definesymbol[CowTeXComplete] [\CowContourLogo{11}] + \definesymbol[CowBoo] [\CowContourLogo{12}] + \definesymbol[CowCow] [\CowContourLogo{13}] + \definesymbol[CowExampleComplete] [\CowContourLogo{14}] + \definesymbol[CowFoxetComplete] [\CowContourLogo{15}] + \definesymbol[CowMetafun] [\CowContourLogo{16}] + \definesymbol[CowMetafunComplete] [\CowContourLogo{17}] + \definesymbol[CowTEXComplete] [\CowContourLogo{18}] + \definesymbol[CowWikiComplete] [\CowContourLogo{19}] + \definesymbol[CowPragmaADEComplete][\CowContourLogo{20}] + \definesymbol[CowPragmaComplete] [\CowContourLogo{21}] + \definesymbol[CowExample] [\CowContourLogo{22}] + \definesymbol[CowFoxet] [\CowContourLogo{23}] + \definesymbol[CowTEX] [\CowContourLogo{24}] + \definesymbol[CowWiki] [\CowContourLogo{25}] + \definesymbol[CowCowTeXtComplete] [\CowContourLogo{26}] + \definesymbol[CowCowTeXt] [\CowContourLogo{27}] + +\stopsymbolset + +\endinput diff --git a/tex/context/base/symb-cow.mkiv b/tex/context/base/symb-cow.mkiv new file mode 100644 index 000000000..adfd484d8 --- /dev/null +++ b/tex/context/base/symb-cow.mkiv @@ -0,0 +1,130 @@ +%D \module +%D [ file=symb-cow, +%D version=2006.06.23, +%D title=\CONTEXT\ Symbol Libraries, +%D subtitle=Cow Symbols, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright=\PRAGMA] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\definefontsynonym [Cows] [koeielett] +\definefontsynonym [CowsContour] [koeielett-contour] +\definefontsynonym [CowsLogo] [koeielogos] +\definefontsynonym [CowsLogoContour] [koeielogos-contour] + +\definecolor [lsky] [r=.6,g=.6,b=1] +\definecolor [dsky] [r=.1,g=.1,b=1] +\definecolor [lground] [r=.3,g=.9,b=.3] +\definecolor [dground] [r=0,g=.5,b=0] +\definecolor [cspots] [r=.33,g=.1,b=0] + +\definecolor [tlsky] [t=.5,a=1,r=.6,g=.6,b=1] +\definecolor [tdsky] [t=.5,a=1,r=.1,g=.1,b=1] +\definecolor [tlground] [t=.5,a=1,r=.3,g=.9,b=.3] +\definecolor [tdground] [t=.5,a=1,r=0,g=.5,b=0] +\definecolor [tcspots] [t=.5,a=1,r=.33,g=.1,b=0] + +\definepalet + [cow] + [normal=lground, + contour=dground, + sky=lsky] + +\def\CowNormal#1% + {\dontleavehmode\hbox{\color[cow:normal]{\getnamedglyphdirect{Cows}{#1}}}} + +\def\ScaledCowNormal#1#2% + {\dontleavehmode\hbox{\color[cow:normal]{\definedfont[Cows sa #1]#2}}} + +\def\ScaledCowOverlay#1#2% + {\dontleavehmode\hbox + {\color[cow:contour]{\hsmash{\definedfont[CowsContour sa #1]#2}}% + \color[cow:normal] {\definedfont[Cows sa #1]#2}}} + +\def\CowOverlay#1% + {\dontleavehmode\hbox + {\color[cow:contour]{\hsmash{\getnamedglyphdirect{CowsContour}{#1}}}% + \color[cow:normal] {\getnamedglyphdirect{Cows} {#1}}}} + +\def\CowContour#1% + {\dontleavehmode\hbox + {\color[cow:contour]{\hsmash{\getnamedglyphdirect{CowsLogoContour}{#1}}}% + \color[cow:normal] {\getnamedglyphdirect{CowsLogo} {#1}}}} + +\def\CowLogo {\getnamedglyphdirect{CowsLogo}} % #1 +\def\CowContourLogo{\getnamedglyphdirect{CowsLogoContour}} % #1 + +\chardef\CowPragmaNormal= 1 +\chardef\CowPragmaShaded=20 + +\startsymbolset[cownormal] + + \definesymbol[CowPragmaADE] [\CowLogo{P_r_a_g_m_a_A_d_e}] + \definesymbol[CowPragma] [\CowLogo{p_r_a_g_m_a_a_d_e}] + \definesymbol[CowConTeXt] [\CowLogo{c_o_n_t_e_x_t}] + \definesymbol[CowConTeXtComplete] [\CowLogo{contextlogo}] + \definesymbol[CowConTeXtShadow] [\CowLogo{contextlogo.shadow}] + \definesymbol[CowConTeXtContour] [\CowLogo{contextlogo.contour}] + \definesymbol[CowConTeXtOutline] [\CowLogo{contextlogo.skeleton}] + \definesymbol[CowConTeXtDots] [\CowLogo{contextlogo.dots}] + \definesymbol[CowMP] [\CowLogo{M_P}] + \definesymbol[CowMPComplete] [\CowLogo{mplogo}] + \definesymbol[CowTeX] [\CowLogo{T_e_X}] + \definesymbol[CowTeXComplete] [\CowLogo{texlogo.alt}] + \definesymbol[CowBoo] [\CowLogo{boo}] + \definesymbol[CowCow] [\CowLogo{cow}] + \definesymbol[CowExampleComplete] [\CowLogo{E_x_a_m_p_l_e}] + \definesymbol[CowFoxetComplete] [\CowLogo{F_o_X_e_t}] + \definesymbol[CowMetafun] [\CowLogo{m_e_t_a_f_u_n}] + \definesymbol[CowMetafunComplete] [\CowLogo{metafunlogo}] + \definesymbol[CowTEXComplete] [\CowLogo{texlogo}] + \definesymbol[CowWikiComplete] [\CowLogo{wikilogo}] + \definesymbol[CowPragmaADEComplete][\CowLogo{PragmaADElogo}] + \definesymbol[CowPragmaComplete] [\CowLogo{pragmaadelogo}] + \definesymbol[CowExample] [\CowLogo{examplelogo}] + \definesymbol[CowFoxet] [\CowLogo{foxetlogo}] + \definesymbol[CowTEX] [\CowLogo{T_E_X}] + \definesymbol[CowWiki] [\CowLogo{W_i_k_i}] + \definesymbol[CowCowTeXtComplete] [\CowLogo{cowtextlogo}] + \definesymbol[CowCowTeXt] [\CowLogo{C_o_w_t_e_x_t}] + +\stopsymbolset + +\startsymbolset[cowcontour] + + \definesymbol[CowPragmaADE] [\CowLogo{P_r_a_g_m_a_A_d_e}] + \definesymbol[CowPragma] [\CowLogo{p_r_a_g_m_a_a_d_e}] + \definesymbol[CowConTeXt] [\CowLogo{c_o_n_t_e_x_t}] + \definesymbol[CowConTeXtComplete] [\CowLogo{contextlogo}] + \definesymbol[CowConTeXtShadow] [\CowLogo{contextlogo.shadow}] + \definesymbol[CowConTeXtContour] [\CowLogo{contextlogo.contour}] + \definesymbol[CowConTeXtOutline] [\CowLogo{contextlogo.skeleton}] + \definesymbol[CowConTeXtDots] [\CowLogo{contextlogo.dots}] + \definesymbol[CowMP] [\CowLogo{M_P}] + \definesymbol[CowMPComplete] [\CowLogo{mplogo}] + \definesymbol[CowTeX] [\CowLogo{T_e_X}] + \definesymbol[CowTeXComplete] [\CowLogo{texlogo.alt}] + \definesymbol[CowBoo] [\CowLogo{boo}] + \definesymbol[CowCow] [\CowLogo{cow}] + \definesymbol[CowExampleComplete] [\CowLogo{E_x_a_m_p_l_e}] + \definesymbol[CowFoxetComplete] [\CowLogo{F_o_X_e_t}] + \definesymbol[CowMetafun] [\CowLogo{m_e_t_a_f_u_n}] + \definesymbol[CowMetafunComplete] [\CowLogo{metafunlogo}] + \definesymbol[CowTEXComplete] [\CowLogo{texlogo}] + \definesymbol[CowWikiComplete] [\CowLogo{wikilogo}] + \definesymbol[CowPragmaADEComplete][\CowLogo{PragmaADElogo}] + \definesymbol[CowPragmaComplete] [\CowLogo{pragmaadelogo}] + \definesymbol[CowExample] [\CowLogo{examplelogo}] + \definesymbol[CowFoxet] [\CowLogo{foxetlogo}] + \definesymbol[CowTEX] [\CowLogo{T_E_X}] + \definesymbol[CowWiki] [\CowLogo{W_i_k_i}] + \definesymbol[CowCowTeXtComplete] [\CowLogo{cowtextlogo}] + \definesymbol[CowCowTeXt] [\CowLogo{C_o_w_t_e_x_t}] + +\stopsymbolset + +\endinput diff --git a/tex/context/base/symb-cow.tex b/tex/context/base/symb-cow.tex deleted file mode 100644 index c04ca0108..000000000 --- a/tex/context/base/symb-cow.tex +++ /dev/null @@ -1,132 +0,0 @@ -%D \module -%D [ file=symb-cow, -%D version=2006.06.23, -%D title=\CONTEXT\ Symbol Libraries, -%D subtitle=Cow Symbols, -%D author=Hans Hagen, -%D date=\currentdate, -%D copyright=\PRAGMA] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -\loadmapfile[koeieletters.map] - -\definefontsynonym [Cows] [koeielett] -\definefontsynonym [CowsContour] [koeielett-contour] -\definefontsynonym [CowsLogo] [koeielogos] -\definefontsynonym [CowsLogoContour] [koeielogos-contour] - -\definecolor [lsky] [r=.6,g=.6,b=1] -\definecolor [dsky] [r=.1,g=.1,b=1] -\definecolor [lground] [r=.3,g=.9,b=.3] -\definecolor [dground] [r=0,g=.5,b=0] -\definecolor [cspots] [r=.33,g=.1,b=0] - -\definecolor [tlsky] [t=.5,a=1,r=.6,g=.6,b=1] -\definecolor [tdsky] [t=.5,a=1,r=.1,g=.1,b=1] -\definecolor [tlground] [t=.5,a=1,r=.3,g=.9,b=.3] -\definecolor [tdground] [t=.5,a=1,r=0,g=.5,b=0] -\definecolor [tcspots] [t=.5,a=1,r=.33,g=.1,b=0] - -\definepalet - [cow] - [normal=lground, - contour=dground, - sky=lsky] - -\def\CowNormal#1% - {\dontleavehmode\hbox{\color[cow:normal]{\getglyph{Cows}{#1}}}} - -\def\ScaledCowNormal#1#2% - {\dontleavehmode\hbox{\color[cow:normal]{\definedfont[Cows sa #1]#2}}} - -\def\ScaledCowOverlay#1#2% - {\dontleavehmode\hbox - {\color[cow:contour]{\hsmash{\definedfont[CowsContour sa #1]#2}}% - \color[cow:normal] {\definedfont[Cows sa #1]#2}}} - -\def\CowOverlay#1% - {\dontleavehmode\hbox - {\color[cow:contour]{\hsmash{\getglyph{CowsContour}{#1}}}% - \color[cow:normal] {\getglyph{Cows} {#1}}}} - -\def\CowContour#1% - {\dontleavehmode\hbox - {\color[cow:contour]{\hsmash{\getglyph{CowsLogoContour}{#1}}}% - \color[cow:normal] {\getglyph{CowsLogo} {#1}}}} - -\def\CowLogo #1{\getglyph{CowsLogo} {\char#1\relax}} -\def\CowContourLogo#1{\getglyph{CowsLogoContour}{\char#1\relax}} - -\chardef\CowPragmaNormal= 1 -\chardef\CowPragmaShaded=20 - -\startsymbolset[cownormal] - -\definesymbol[CowPragmaADE] [\CowLogo{0}] -\definesymbol[CowPragma] [\CowLogo{1}] -\definesymbol[CowConTeXt] [\CowLogo{2}] -\definesymbol[CowConTeXtComplete] [\CowLogo{3}] -\definesymbol[CowConTeXtShadow] [\CowLogo{4}] -\definesymbol[CowConTeXtContour] [\CowLogo{5}] -\definesymbol[CowConTeXtOutline] [\CowLogo{6}] -\definesymbol[CowConTeXtDots] [\CowLogo{7}] -\definesymbol[CowMP] [\CowLogo{8}] -\definesymbol[CowMPComplete] [\CowLogo{9}] -\definesymbol[CowTeX] [\CowLogo{10}] -\definesymbol[CowTeXComplete] [\CowLogo{11}] -\definesymbol[CowBoo] [\CowLogo{12}] -\definesymbol[CowCow] [\CowLogo{13}] -\definesymbol[CowExampleComplete] [\CowLogo{14}] -\definesymbol[CowFoxetComplete] [\CowLogo{15}] -\definesymbol[CowMetafun] [\CowLogo{16}] -\definesymbol[CowMetafunComplete] [\CowLogo{17}] -\definesymbol[CowTEXComplete] [\CowLogo{18}] -\definesymbol[CowWikiComplete] [\CowLogo{19}] -\definesymbol[CowPragmaADEComplete][\CowLogo{20}] -\definesymbol[CowPragmaComplete] [\CowLogo{21}] -\definesymbol[CowExample] [\CowLogo{22}] -\definesymbol[CowFoxet] [\CowLogo{23}] -\definesymbol[CowTEX] [\CowLogo{24}] -\definesymbol[CowWiki] [\CowLogo{25}] -\definesymbol[CowCowTeXtComplete] [\CowLogo{26}] -\definesymbol[CowCowTeXt] [\CowLogo{27}] - -\stopsymbolset - -\startsymbolset[cowcontour] - -\definesymbol[CowPragmaADE] [\CowContourLogo{0}] -\definesymbol[CowPragma] [\CowContourLogo{1}] -\definesymbol[CowConTeXt] [\CowContourLogo{2}] -\definesymbol[CowConTeXtComplete] [\CowContourLogo{3}] -\definesymbol[CowConTeXtShadow] [\CowContourLogo{4}] -\definesymbol[CowConTeXtContour] [\CowContourLogo{5}] -\definesymbol[CowConTeXtOutline] [\CowContourLogo{6}] -\definesymbol[CowConTeXtDots] [\CowContourLogo{7}] -\definesymbol[CowMP] [\CowContourLogo{8}] -\definesymbol[CowMPComplete] [\CowContourLogo{9}] -\definesymbol[CowTeX] [\CowContourLogo{10}] -\definesymbol[CowTeXComplete] [\CowContourLogo{11}] -\definesymbol[CowBoo] [\CowContourLogo{12}] -\definesymbol[CowCow] [\CowContourLogo{13}] -\definesymbol[CowExampleComplete] [\CowContourLogo{14}] -\definesymbol[CowFoxetComplete] [\CowContourLogo{15}] -\definesymbol[CowMetafun] [\CowContourLogo{16}] -\definesymbol[CowMetafunComplete] [\CowContourLogo{17}] -\definesymbol[CowTEXComplete] [\CowContourLogo{18}] -\definesymbol[CowWikiComplete] [\CowContourLogo{19}] -\definesymbol[CowPragmaADEComplete][\CowContourLogo{20}] -\definesymbol[CowPragmaComplete] [\CowContourLogo{21}] -\definesymbol[CowExample] [\CowContourLogo{22}] -\definesymbol[CowFoxet] [\CowContourLogo{23}] -\definesymbol[CowTEX] [\CowContourLogo{24}] -\definesymbol[CowWiki] [\CowContourLogo{25}] -\definesymbol[CowCowTeXtComplete] [\CowContourLogo{26}] -\definesymbol[CowCowTeXt] [\CowContourLogo{27}] - -\stopsymbolset - -\endinput diff --git a/tex/context/base/symb-eur.mkii b/tex/context/base/symb-eur.mkii new file mode 100644 index 000000000..400e88ac5 --- /dev/null +++ b/tex/context/base/symb-eur.mkii @@ -0,0 +1,64 @@ +%D \module +%D [ file=symb-eur, +%D version=2000.06.22, +%D title=\CONTEXT\ Symbol Libraries, +%D subtitle=Adobe Euro Symbols, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\loadmapfile [original-adobe-euro.map] + +\definefontsynonym [EuroSerif] [eurose] +\definefontsynonym [EuroSerifBold] [euroseb] +\definefontsynonym [EuroSerifItalic] [eurosei] +\definefontsynonym [EuroSerifSlanted] [eurosei] +\definefontsynonym [EuroSerifBoldItalic] [eurosebi] +\definefontsynonym [EuroSerifBoldSlanted] [eurosebi] + +\definefontsynonym [EuroSans] [eurosa] +\definefontsynonym [EuroSansBold] [eurosab] +\definefontsynonym [EuroSansItalic] [eurosai] +\definefontsynonym [EuroSansSlanted] [eurosai] +\definefontsynonym [EuroSansBoldItalic] [eurosabi] +\definefontsynonym [EuroSansBoldSlanted] [eurosabi] + +\definefontsynonym [EuroMono] [euromo] +\definefontsynonym [EuroMonoBold] [euromob] +\definefontsynonym [EuroMonoSlanted] [euromoi] +\definefontsynonym [EuroMonoItalic] [euromoi] +\definefontsynonym [EuroMonoBoldItalic] [euromobi] +\definefontsynonym [EuroMonoBoldSlanted] [euromobi] + +\definesymbol [euro] [\getglyph{Euro}{\char160}] + +\startencoding[default] + \definecharacter texteuro {\symbol[euro]} +\stopencoding + +\unexpanded\def\euro{\doiftextelse\texteuro\texteuro{\symbol[euro]}} + +% ok for one font series, but not for mixed sets +% +% \unexpanded\def\euro +% {\doiftextelse \texteuro \texteuro +% {\unexpanded\def\euro{\symbol[euro]}\euro} + +%D The next table shows the complete set of symbols: +%D +%D \starttabulate[|l|c|c|c|c|c|c|] +%D \NC \NC \tex{tf} \NC \tex{bf} \NC \tex{sl} +%D \NC \tex{it} \NC \tex{bs} \NC \tex{bi} \NC\NR +%D \NC \rm Serif \NC \rm\tf\euro \NC \rm\bf\euro \NC \rm\sl\euro +%D \NC \rm\it\euro \NC \rm\bs\euro \NC \rm\bi\euro \NC\NR +%D \NC \ss Sans \NC \ss\tf\euro \NC \ss\bf\euro \NC \ss\sl\euro +%D \NC \ss\it\euro \NC \ss\bs\euro \NC \ss\bi\euro \NC\NR +%D \NC \tt Mono \NC \tt\tf\euro \NC \tt\bf\euro \NC \tt\sl\euro +%D \NC \tt\it\euro \NC \tt\bs\euro \NC \tt\bi\euro \NC\NR +%D \stoptabulate + +\endinput diff --git a/tex/context/base/symb-eur.tex b/tex/context/base/symb-eur.tex deleted file mode 100644 index 400e88ac5..000000000 --- a/tex/context/base/symb-eur.tex +++ /dev/null @@ -1,64 +0,0 @@ -%D \module -%D [ file=symb-eur, -%D version=2000.06.22, -%D title=\CONTEXT\ Symbol Libraries, -%D subtitle=Adobe Euro Symbols, -%D author=Hans Hagen, -%D date=\currentdate, -%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -\loadmapfile [original-adobe-euro.map] - -\definefontsynonym [EuroSerif] [eurose] -\definefontsynonym [EuroSerifBold] [euroseb] -\definefontsynonym [EuroSerifItalic] [eurosei] -\definefontsynonym [EuroSerifSlanted] [eurosei] -\definefontsynonym [EuroSerifBoldItalic] [eurosebi] -\definefontsynonym [EuroSerifBoldSlanted] [eurosebi] - -\definefontsynonym [EuroSans] [eurosa] -\definefontsynonym [EuroSansBold] [eurosab] -\definefontsynonym [EuroSansItalic] [eurosai] -\definefontsynonym [EuroSansSlanted] [eurosai] -\definefontsynonym [EuroSansBoldItalic] [eurosabi] -\definefontsynonym [EuroSansBoldSlanted] [eurosabi] - -\definefontsynonym [EuroMono] [euromo] -\definefontsynonym [EuroMonoBold] [euromob] -\definefontsynonym [EuroMonoSlanted] [euromoi] -\definefontsynonym [EuroMonoItalic] [euromoi] -\definefontsynonym [EuroMonoBoldItalic] [euromobi] -\definefontsynonym [EuroMonoBoldSlanted] [euromobi] - -\definesymbol [euro] [\getglyph{Euro}{\char160}] - -\startencoding[default] - \definecharacter texteuro {\symbol[euro]} -\stopencoding - -\unexpanded\def\euro{\doiftextelse\texteuro\texteuro{\symbol[euro]}} - -% ok for one font series, but not for mixed sets -% -% \unexpanded\def\euro -% {\doiftextelse \texteuro \texteuro -% {\unexpanded\def\euro{\symbol[euro]}\euro} - -%D The next table shows the complete set of symbols: -%D -%D \starttabulate[|l|c|c|c|c|c|c|] -%D \NC \NC \tex{tf} \NC \tex{bf} \NC \tex{sl} -%D \NC \tex{it} \NC \tex{bs} \NC \tex{bi} \NC\NR -%D \NC \rm Serif \NC \rm\tf\euro \NC \rm\bf\euro \NC \rm\sl\euro -%D \NC \rm\it\euro \NC \rm\bs\euro \NC \rm\bi\euro \NC\NR -%D \NC \ss Sans \NC \ss\tf\euro \NC \ss\bf\euro \NC \ss\sl\euro -%D \NC \ss\it\euro \NC \ss\bs\euro \NC \ss\bi\euro \NC\NR -%D \NC \tt Mono \NC \tt\tf\euro \NC \tt\bf\euro \NC \tt\sl\euro -%D \NC \tt\it\euro \NC \tt\bs\euro \NC \tt\bi\euro \NC\NR -%D \stoptabulate - -\endinput diff --git a/tex/context/base/symb-glm.mkii b/tex/context/base/symb-glm.mkii new file mode 100644 index 000000000..0b01ca7df --- /dev/null +++ b/tex/context/base/symb-glm.mkii @@ -0,0 +1,79 @@ +%D \module +%D [ file=symb-glm, +%D version=2002.05.07, +%D title=\CONTEXT\ Symbol Libraries, +%D subtitle=Guillemots, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D Watch the \type {x} before the local symbols. + +% \loadmapfile [ec-public-lm.map] +% \loadmapfile [ec-lm.map] +\loadmapfile [lm-ec.map] + +% this used to be: +% +% \definefontsynonym [GuilSerif] [plr10] [encoding=ec] +% \definefontsynonym [GuilSerifBold] [plbx10] [encoding=ec] +% \definefontsynonym [GuilSerifItalic] [plti10] [encoding=ec] +% \definefontsynonym [GuilSerifSlanted] [plsl10] [encoding=ec] +% \definefontsynonym [GuilSerifBoldItalic] [plbxti10] [encoding=ec] +% \definefontsynonym [GuilSerifBoldSlanted] [plbxsl10] [encoding=ec] +% +% \definefontsynonym [GuilSans] [plss10] [encoding=ec] +% \definefontsynonym [GuilSansBold] [plssbx10] [encoding=ec] +% \definefontsynonym [GuilSansItalic] [plssi10] [encoding=ec] +% \definefontsynonym [GuilSansSlanted] [plssi10] [encoding=ec] +% \definefontsynonym [GuilSansBoldItalic] [plssbi10] [encoding=ec] +% \definefontsynonym [GuilSansBoldSlanted] [plssbi10] [encoding=ec] +% +% \definefontsynonym [GuilMono] [pltt10] [encoding=ec] +% +% but was also one of the reasons for triggering the lm project, so: + +\definefontsynonym [GuilSerif] [ec-lmr10] [encoding=ec] +\definefontsynonym [GuilSerifBold] [ec-lmbx10] [encoding=ec] +\definefontsynonym [GuilSerifItalic] [ec-lmti10] [encoding=ec] +\definefontsynonym [GuilSerifSlanted] [ec-lmsl10] [encoding=ec] +\definefontsynonym [GuilSerifBoldItalic] [ec-lmbxti10] [encoding=ec] +\definefontsynonym [GuilSerifBoldSlanted] [ec-lmbxsl10] [encoding=ec] + +\definefontsynonym [GuilSans] [ec-lmss10] [encoding=ec] +\definefontsynonym [GuilSansBold] [ec-lmssbx10] [encoding=ec] +\definefontsynonym [GuilSansItalic] [ec-lmssi10] [encoding=ec] +\definefontsynonym [GuilSansSlanted] [ec-lmssi10] [encoding=ec] +\definefontsynonym [GuilSansBoldItalic] [ec-lmssbi10] [encoding=ec] +\definefontsynonym [GuilSansBoldSlanted] [ec-lmssbi10] [encoding=ec] + +\definefontsynonym [GuilMono] [ec-lmtt10] [encoding=ec] +%definefontsynonym [GuilMonoBold] [ec-lmtt10] [encoding=ec] +%definefontsynonym [GuilMonoSlanted] [ec-lmtt10] [encoding=ec] +%definefontsynonym [GuilMonoItalic] [ec-lmtt10] [encoding=ec] +%definefontsynonym [GuilMonoBoldItalic] [ec-lmtt10] [encoding=ec] +%definefontsynonym [GuilMonoBoldSlanted] [ec-lmtt10] [encoding=ec] + +\definesymbol [xleftguillemot] [\getglyph{Guil}{\char19}] +\definesymbol [xrightguillemot] [\getglyph{Guil}{\char20}] + +\definesymbol [xguilsingleleft] [\getglyph{Guil}{\char14}] +\definesymbol [xguilsingleright] [\getglyph{Guil}{\char15}] + +%D A strange place, but okay (the \type {\relax} prevents space gobbling) + +\startencoding [default] + + \definecharacter leftguillemot {\symbol[xleftguillemot]\relax} + \definecharacter rightguillemot {\symbol[xrightguillemot]\relax} + + \definecharacter guilsingleleft {\symbol[xguilsingleleft]\relax} + \definecharacter guilsingleright {\symbol[xguilsingleright]\relax} + +\stopencoding + +\endinput diff --git a/tex/context/base/symb-glm.tex b/tex/context/base/symb-glm.tex deleted file mode 100644 index 0b01ca7df..000000000 --- a/tex/context/base/symb-glm.tex +++ /dev/null @@ -1,79 +0,0 @@ -%D \module -%D [ file=symb-glm, -%D version=2002.05.07, -%D title=\CONTEXT\ Symbol Libraries, -%D subtitle=Guillemots, -%D author=Hans Hagen, -%D date=\currentdate, -%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -%D Watch the \type {x} before the local symbols. - -% \loadmapfile [ec-public-lm.map] -% \loadmapfile [ec-lm.map] -\loadmapfile [lm-ec.map] - -% this used to be: -% -% \definefontsynonym [GuilSerif] [plr10] [encoding=ec] -% \definefontsynonym [GuilSerifBold] [plbx10] [encoding=ec] -% \definefontsynonym [GuilSerifItalic] [plti10] [encoding=ec] -% \definefontsynonym [GuilSerifSlanted] [plsl10] [encoding=ec] -% \definefontsynonym [GuilSerifBoldItalic] [plbxti10] [encoding=ec] -% \definefontsynonym [GuilSerifBoldSlanted] [plbxsl10] [encoding=ec] -% -% \definefontsynonym [GuilSans] [plss10] [encoding=ec] -% \definefontsynonym [GuilSansBold] [plssbx10] [encoding=ec] -% \definefontsynonym [GuilSansItalic] [plssi10] [encoding=ec] -% \definefontsynonym [GuilSansSlanted] [plssi10] [encoding=ec] -% \definefontsynonym [GuilSansBoldItalic] [plssbi10] [encoding=ec] -% \definefontsynonym [GuilSansBoldSlanted] [plssbi10] [encoding=ec] -% -% \definefontsynonym [GuilMono] [pltt10] [encoding=ec] -% -% but was also one of the reasons for triggering the lm project, so: - -\definefontsynonym [GuilSerif] [ec-lmr10] [encoding=ec] -\definefontsynonym [GuilSerifBold] [ec-lmbx10] [encoding=ec] -\definefontsynonym [GuilSerifItalic] [ec-lmti10] [encoding=ec] -\definefontsynonym [GuilSerifSlanted] [ec-lmsl10] [encoding=ec] -\definefontsynonym [GuilSerifBoldItalic] [ec-lmbxti10] [encoding=ec] -\definefontsynonym [GuilSerifBoldSlanted] [ec-lmbxsl10] [encoding=ec] - -\definefontsynonym [GuilSans] [ec-lmss10] [encoding=ec] -\definefontsynonym [GuilSansBold] [ec-lmssbx10] [encoding=ec] -\definefontsynonym [GuilSansItalic] [ec-lmssi10] [encoding=ec] -\definefontsynonym [GuilSansSlanted] [ec-lmssi10] [encoding=ec] -\definefontsynonym [GuilSansBoldItalic] [ec-lmssbi10] [encoding=ec] -\definefontsynonym [GuilSansBoldSlanted] [ec-lmssbi10] [encoding=ec] - -\definefontsynonym [GuilMono] [ec-lmtt10] [encoding=ec] -%definefontsynonym [GuilMonoBold] [ec-lmtt10] [encoding=ec] -%definefontsynonym [GuilMonoSlanted] [ec-lmtt10] [encoding=ec] -%definefontsynonym [GuilMonoItalic] [ec-lmtt10] [encoding=ec] -%definefontsynonym [GuilMonoBoldItalic] [ec-lmtt10] [encoding=ec] -%definefontsynonym [GuilMonoBoldSlanted] [ec-lmtt10] [encoding=ec] - -\definesymbol [xleftguillemot] [\getglyph{Guil}{\char19}] -\definesymbol [xrightguillemot] [\getglyph{Guil}{\char20}] - -\definesymbol [xguilsingleleft] [\getglyph{Guil}{\char14}] -\definesymbol [xguilsingleright] [\getglyph{Guil}{\char15}] - -%D A strange place, but okay (the \type {\relax} prevents space gobbling) - -\startencoding [default] - - \definecharacter leftguillemot {\symbol[xleftguillemot]\relax} - \definecharacter rightguillemot {\symbol[xrightguillemot]\relax} - - \definecharacter guilsingleleft {\symbol[xguilsingleleft]\relax} - \definecharacter guilsingleright {\symbol[xguilsingleright]\relax} - -\stopencoding - -\endinput diff --git a/tex/context/base/symb-ini.mkii b/tex/context/base/symb-ini.mkii index f7bffd240..d8adc94e6 100644 --- a/tex/context/base/symb-ini.mkii +++ b/tex/context/base/symb-ini.mkii @@ -233,7 +233,7 @@ \let\currentsymboldef\empty -\def\startsymbolset[#1] +\def\startsymbolset[#1]% {\def\currentsymboldef{#1}} \def\stopsymbolset @@ -263,11 +263,12 @@ %D \showsetup{usesymbols} \def\dousesymbols#1% - {\makeshortfilename[\truefilename{\f!symbolprefix#1}]% - \startreadingfile - \readsysfile\shortfilename + {\startreadingfile + \readsysfile{\truefilename{\f!symbolprefix#1}.\mksuffix} {\showmessage\m!symbols1{#1}} - \donothing + {\readsysfile{\truefilename{\f!symbolprefix#1}} + {\showmessage\m!symbols1{#1}} + \donothing}% \stopreadingfile} \def\usesymbols[#1]% diff --git a/tex/context/base/symb-ini.mkiv b/tex/context/base/symb-ini.mkiv index 3b7e55d4a..de1e11396 100644 --- a/tex/context/base/symb-ini.mkiv +++ b/tex/context/base/symb-ini.mkiv @@ -48,14 +48,6 @@ \unexpanded\def\definesymbol {\dotripleempty\dodefinesymbol} -% \def\dodefinesymbol[#1][#2][#3]% class name meaning -% {\ifthirdargument -% \setvalue{\??ss:#1:#2}{#3}% -% \doifsomething{#1}{\addvalue{\??ss*#1}{#2}}% -% \else -% \setvalue{\??ss:\currentsymboldef:#1}{#2}% -% \fi} - \def\dodefinesymbol[#1][#2][#3]% class name meaning {\ifthirdargument \setvalue{\??ss:#1:#2}{#3}% @@ -65,11 +57,19 @@ \addvalue{\??ss*\currentsymboldef}{#1}% \fi} -\def\doifinsymbolsetelse#1#2{\doifdefinedelse{\??ss:#1:#2}} -\def\doifinsymbolset #1#2{\doifdefined {\??ss:#1:#2}} -\def\doifsymbolsetelse #1{\doifdefinedelse{\??ss*#1}} +% \def\doifinsymbolsetelse#1#2{\doifdefinedelse{\??ss:#1:#2}} +% \def\doifinsymbolset #1#2{\doifdefined {\??ss:#1:#2}} +% \def\doifsymbolsetelse #1{\doifdefinedelse{\??ss*#1}} +% +% \def\symbolset#1{\executeifdefined{\??ss*#1}\empty} % no [#1], to be used in commalists etc + +\def\doifinsymbolsetelse#1#2{\ifcsname\??ss:#1:#2\endcsname\@EA\firstoftwoarguments\else\@EA\secondoftwoarguments\fi} +\def\doifinsymbolset #1#2{\ifcsname\??ss:#1:#2\endcsname\@EA\firstofoneargument \else\@EA\gobbleoneargument \fi} +\def\doifsymbolsetelse #1{\ifcsname\??ss*#1\endcsname \@EA\firstoftwoarguments\else\@EA\secondoftwoarguments\fi} + +\letvalue{\??ss*}\empty -\def\symbolset#1{\executeifdefined{\??ss*#1}\empty} % no [#1], to be used in commalists etc +\def\symbolset#1{\csname\??ss*\ifcsname\??ss*#1\endcsname#1\fi\endcsname} % no [#1], to be used in commalists etc %D Since symbols are used frequently in interactive %D documents, we speed up this one. Well, that was history, @@ -84,8 +84,11 @@ \def\dodosymbol#1#2% \relax's prevent lookahead problems {\nosymbolfalse{\the\everysymbol\csname\??ss:#1:#2\endcsname\relax}\relax} +\letvalue{\??ss:}\firstofoneargument + \def\directsymbol#1#2% no \relax, there can be an argument, see lists - {\executeifdefined{\??ss:#1:#2}\firstofoneargument} + {%\executeifdefined{\??ss:#1:#2}\firstofoneargument} + \csname\??ss:\ifcsname\??ss:#1:#2\endcsname#1:#2\fi\endcsname} % We support both: % @@ -125,12 +128,8 @@ \fi} \def\redosymbol#1% -% {\doifinsymbolsetelse\empty{#1}{\dodosymbol\empty{#1}}{#1}} % more efficient: {\doifinsymbolsetelse\empty{#1}{\dodosymbol\empty}\firstofoneargument{#1}} -% % % % % -% this should go in symb-fig, to be loaded after core-fig - %D \macros %D {definefiguresymbol} %D @@ -163,12 +162,6 @@ \definesymbol[#1][{\dofiguresymbol[#2][#3]}]% \fi} -% but for the moment we keep it here -% % % % % % - -%\def\objectsymbol[#1]% -% {\dopresetfieldsymbol{#1}\dogetfieldsymbol{#1}} - %D \macros %D {doifsymboldefinedelse} %D @@ -233,7 +226,7 @@ \let\currentsymboldef\empty -\unexpanded\def\startsymbolset[#1] +\unexpanded\def\startsymbolset[#1]% {\def\currentsymboldef{#1}} \unexpanded\def\stopsymbolset @@ -264,9 +257,11 @@ \def\dousesymbols#1% {\startreadingfile - \readsysfile{\truefilename{\f!symbolprefix#1}} + \readsysfile{\truefilename{\f!symbolprefix#1}.\mksuffix} {\showmessage\m!symbols1{#1}} - \donothing + {\readsysfile{\truefilename{\f!symbolprefix#1}} + {\showmessage\m!symbols1{#1}} + \donothing}% \stopreadingfile} \def\usesymbols[#1]% diff --git a/tex/context/base/symb-jmn.mkii b/tex/context/base/symb-jmn.mkii new file mode 100644 index 000000000..392cac552 --- /dev/null +++ b/tex/context/base/symb-jmn.mkii @@ -0,0 +1,199 @@ +%D \module +%D [ file=symb-jmn, +%D version=2004.08.02, +%D title=\CONTEXT\ Symbol Libraries, +%D subtitle=Special Navigational Symbols, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright=PRAGMA ADE] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D This file defines a few navigational symbol vectors. The font used +%D here is designed by Janusz M.~Nowacki, one of the Polish Font +%D Gurus who made this font specially for me, hence the name. If you +%D you want to meet its designer, come to Bachotek! In case you're +%D not familiar with his work, take a look at the Antikwa, Iwona and +%D Kurier fonts! +%D +%D \usesymbols[jmn] +%D +%D \showsymbolset[navigation 1] +%D \showsymbolset[navigation 3] +%D \showsymbolset[navigation 2] +%D \showsymbolset[navigation 4] +%D +%D \page +%D \showfont[NavigationNormal] +%D \page +%D \showfont[NavigationShadowed] +%D \page + +% needed: +% +% - inverted crossed +% - curved diamond + +\unprotect + +\loadmapfile[original-base.map] % \loadmapfile [original-context-symbol.map] + +\definefontsynonym[NavigationNormal] [hans] +\definefontsynonym[NavigationShadowed] [hans-sh] + +\definefontsynonym[NavigationFont] [NavigationNormal] +%definefontsynonym[NavigationFont] [NavigationShadowed] + +\def\NavigationGlyph#1{\getglyph{NavigationFont}{\char#1}} + +\unprotect + +\startsymbolset [navigation 1] + + \definesymbol [\v!previouspage] [\NavigationGlyph {65}] + \definesymbol [\v!PreviousJump] [\NavigationGlyph{128}] + \definesymbol [\v!firstpage] [\NavigationGlyph{129}] + + \definesymbol [\v!nextpage] [\NavigationGlyph {66}] + \definesymbol [\v!NextJump] [\NavigationGlyph{130}] + \definesymbol [\v!lastpage] [\NavigationGlyph{131}] + + \definesymbol [\v!CloseDocument] [\NavigationGlyph{160}] + + \definesymbol [\v!firstsubpage] [\NavigationGlyph{178}] + \definesymbol [\v!previoussubpage] [\NavigationGlyph{208}] + \definesymbol [\v!nextsubpage] [\NavigationGlyph{209}] + \definesymbol [\v!lastsubpage] [\NavigationGlyph{178}] + + \definesymbol [\v!StartSound] [\NavigationGlyph {66}] + \definesymbol [\v!PauseSound] [\NavigationGlyph{168}] + \definesymbol [\v!StopSound] [\NavigationGlyph{170}] + + \definesymbol [\v!StartMovie] [\NavigationGlyph {66}] + \definesymbol [\v!PauseMovie] [\NavigationGlyph{168}] + \definesymbol [\v!StopMovie] [\NavigationGlyph{170}] + + \definesymbol [\v!StartRendering] [\NavigationGlyph {66}] + \definesymbol [\v!PauseRendering] [\NavigationGlyph{168}] + \definesymbol [\v!StopRendering] [\NavigationGlyph{170}] + \definesymbol [\v!ResumeRendering] [\NavigationGlyph {66}] + +\stopsymbolset + +\startsymbolset [navigation 2] + + \definesymbol [\v!previouspage] [\NavigationGlyph {67}] + \definesymbol [\v!PreviousJump] [\NavigationGlyph{132}] + \definesymbol [\v!firstpage] [\NavigationGlyph{133}] + + \definesymbol [\v!nextpage] [\NavigationGlyph {68}] + \definesymbol [\v!NextJump] [\NavigationGlyph{134}] + \definesymbol [\v!lastpage] [\NavigationGlyph{135}] + + \definesymbol [\v!CloseDocument] [\NavigationGlyph{160}] + + \definesymbol [\v!firstsubpage] [\NavigationGlyph{176}] + \definesymbol [\v!previoussubpage] [\NavigationGlyph{210}] + \definesymbol [\v!nextsubpage] [\NavigationGlyph{211}] + \definesymbol [\v!lastsubpage] [\NavigationGlyph{176}] + + \definesymbol [\v!StartSound] [\NavigationGlyph {68}] + \definesymbol [\v!PauseSound] [\NavigationGlyph{170}] + \definesymbol [\v!StopSound] [\NavigationGlyph{168}] + + \definesymbol [\v!StartMovie] [\NavigationGlyph {68}] + \definesymbol [\v!PauseMovie] [\NavigationGlyph{170}] + \definesymbol [\v!StopMovie] [\NavigationGlyph{168}] + + \definesymbol [\v!StartRendering] [\NavigationGlyph {68}] + \definesymbol [\v!PauseRendering] [\NavigationGlyph{170}] + \definesymbol [\v!StopRendering] [\NavigationGlyph{168}] + \definesymbol [\v!ResumeRendering] [\NavigationGlyph {68}] + +\stopsymbolset + +\startsymbolset [navigation 3] + + \definesymbol [\v!previouspage] [\NavigationGlyph {73}] + \definesymbol [\v!PreviousJump] [\NavigationGlyph{144}] + \definesymbol [\v!firstpage] [\NavigationGlyph{145}] + + \definesymbol [\v!nextpage] [\NavigationGlyph {74}] + \definesymbol [\v!NextJump] [\NavigationGlyph{146}] + \definesymbol [\v!lastpage] [\NavigationGlyph{147}] + + \definesymbol [\v!CloseDocument] [\NavigationGlyph{160}] + + \definesymbol [\v!firstsubpage] [\NavigationGlyph{178}] + \definesymbol [\v!previoussubpage] [\NavigationGlyph{212}] + \definesymbol [\v!nextsubpage] [\NavigationGlyph{213}] + \definesymbol [\v!lastsubpage] [\NavigationGlyph{178}] + + \definesymbol [\v!StartSound] [\NavigationGlyph {73}] + \definesymbol [\v!PauseSound] [\NavigationGlyph{168}] + \definesymbol [\v!StopSound] [\NavigationGlyph{170}] + + \definesymbol [\v!StartMovie] [\NavigationGlyph {73}] + \definesymbol [\v!PauseMovie] [\NavigationGlyph{168}] + \definesymbol [\v!StopMovie] [\NavigationGlyph{170}] + + \definesymbol [\v!StartRendering] [\NavigationGlyph {73}] + \definesymbol [\v!PauseRendering] [\NavigationGlyph{168}] + \definesymbol [\v!StopRendering] [\NavigationGlyph{170}] + \definesymbol [\v!ResumeRendering] [\NavigationGlyph {73}] + +\stopsymbolset + +% 1 left : 065 067 073 075 +% 2 left : 128 132 144 148 +% 3 left : 129 133 145 149 + +% 1 right : 066 068 074 076 +% 2 right : 130 134 146 150 +% 3 right : 131 135 147 151 + +% crossed : 160 160 160 160 +% opened : 152 152 156 156 +% closed : 154 154 158 158 + +% larrow : 208 210 212 214 +% rarrow : 209 211 213 215 +% barrow : 178 178 178 178 +% ocircle : 168 168 168 168 +% ccircle : 170 170 170 170 + +\startsymbolset [navigation 4] + + \definesymbol [\v!previouspage] [\NavigationGlyph {75}] + \definesymbol [\v!PreviousJump] [\NavigationGlyph{148}] + \definesymbol [\v!firstpage] [\NavigationGlyph{149}] + + \definesymbol [\v!nextpage] [\NavigationGlyph {76}] + \definesymbol [\v!NextJump] [\NavigationGlyph{150}] + \definesymbol [\v!lastpage] [\NavigationGlyph{151}] + + \definesymbol [\v!CloseDocument] [\NavigationGlyph{160}] + + \definesymbol [\v!firstsubpage] [\NavigationGlyph{176}] + \definesymbol [\v!previoussubpage] [\NavigationGlyph{214}] + \definesymbol [\v!nextsubpage] [\NavigationGlyph{215}] + \definesymbol [\v!lastsubpage] [\NavigationGlyph{176}] + + \definesymbol [\v!StartSound] [\NavigationGlyph {75}] + \definesymbol [\v!PauseSound] [\NavigationGlyph{170}] + \definesymbol [\v!StopSound] [\NavigationGlyph{168}] + + \definesymbol [\v!StartMovie] [\NavigationGlyph {75}] + \definesymbol [\v!PauseMovie] [\NavigationGlyph{170}] + \definesymbol [\v!StopMovie] [\NavigationGlyph{168}] + + \definesymbol [\v!StartRendering] [\NavigationGlyph {75}] + \definesymbol [\v!PauseRendering] [\NavigationGlyph{170}] + \definesymbol [\v!StopRendering] [\NavigationGlyph{168}] + \definesymbol [\v!ResumeRendering] [\NavigationGlyph {75}] + +\stopsymbolset + +\protect \endinput diff --git a/tex/context/base/symb-jmn.mkiv b/tex/context/base/symb-jmn.mkiv new file mode 100644 index 000000000..593e3e375 --- /dev/null +++ b/tex/context/base/symb-jmn.mkiv @@ -0,0 +1,196 @@ +%D \module +%D [ file=symb-jmn, +%D version=2004.08.02, +%D title=\CONTEXT\ Symbol Libraries, +%D subtitle=Special Navigational Symbols, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright=PRAGMA ADE] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D This file defines a few navigational symbol vectors. The font used +%D here is designed by Janusz M.~Nowacki, one of the Polish Font +%D Gurus who made this font specially for me, hence the name. If you +%D you want to meet its designer, come to Bachotek! In case you're +%D not familiar with his work, take a look at the Antikwa, Iwona and +%D Kurier fonts! +%D +%D \usesymbols[jmn] +%D +%D \showsymbolset[navigation 1] +%D \showsymbolset[navigation 3] +%D \showsymbolset[navigation 2] +%D \showsymbolset[navigation 4] +%D +%D \page +%D \showfont[NavigationNormal] +%D \page +%D \showfont[NavigationShadowed] +%D \page + +% needed: +% +% - inverted crossed +% - curved diamond +% - begin/end bars + +\unprotect + +\definefontsynonym[NavigationNormal] [hans] +\definefontsynonym[NavigationShadowed] [hans-sh] + +\definefontsynonym[NavigationFont] [NavigationNormal] +%definefontsynonym[NavigationFont] [NavigationShadowed] + +\def\NavigationGlyph{\getnamedglyphdirect{NavigationFont}} % #1 + +\unprotect + +% lowercase up/down + +\startsymbolset [navigation 1] + + \definesymbol [\v!PreviousJump] [\NavigationGlyph{CC}] + \definesymbol [\v!NextJump] [\NavigationGlyph{DD}] + \definesymbol [\v!CloseDocument] [\NavigationGlyph{M}] + + \definesymbol [\v!firstpage] [\NavigationGlyph{CCC}] + \definesymbol [\v!previouspage] [\NavigationGlyph{C}] + \definesymbol [\v!nextpage] [\NavigationGlyph{D}] + \definesymbol [\v!lastpage] [\NavigationGlyph{DDD}] + + \definesymbol [\v!firstsubpage] [\NavigationGlyph{ccc}] + \definesymbol [\v!previoussubpage] [\NavigationGlyph{c}] + \definesymbol [\v!nextsubpage] [\NavigationGlyph{d}] + \definesymbol [\v!lastsubpage] [\NavigationGlyph{ddd}] + + \definesymbol [\v!StartSound] [\NavigationGlyph{D}] + \definesymbol [\v!PauseSound] [\NavigationGlyph{YY}] + \definesymbol [\v!StopSound] [\NavigationGlyph{M}] + + \definesymbol [\v!StartMovie] [\NavigationGlyph{D}] + \definesymbol [\v!PauseMovie] [\NavigationGlyph{YY}] + \definesymbol [\v!StopMovie] [\NavigationGlyph{M}] + + \definesymbol [\v!StartRendering] [\NavigationGlyph{D}] + \definesymbol [\v!PauseRendering] [\NavigationGlyph{YY}] + \definesymbol [\v!StopRendering] [\NavigationGlyph{M}] + \definesymbol [\v!ResumeRendering] [\NavigationGlyph{D}] + +\stopsymbolset + +\startsymbolset [navigation 2] + + \definesymbol [\v!PreviousJump] [\NavigationGlyph{AA}] + \definesymbol [\v!NextJump] [\NavigationGlyph{BB}] + \definesymbol [\v!CloseDocument] [\NavigationGlyph{N}] + + \definesymbol [\v!firstpage] [\NavigationGlyph{AAA}] + \definesymbol [\v!previouspage] [\NavigationGlyph{A}] + \definesymbol [\v!nextpage] [\NavigationGlyph{B}] + \definesymbol [\v!lastpage] [\NavigationGlyph{BBB}] + + \definesymbol [\v!firstsubpage] [\NavigationGlyph{aaa}] + \definesymbol [\v!previoussubpage] [\NavigationGlyph{a}] + \definesymbol [\v!nextsubpage] [\NavigationGlyph{b}] + \definesymbol [\v!lastsubpage] [\NavigationGlyph{bbb}] + + \definesymbol [\v!StartSound] [\NavigationGlyph{B}] + \definesymbol [\v!PauseSound] [\NavigationGlyph{XX}] + \definesymbol [\v!StopSound] [\NavigationGlyph{N}] + + \definesymbol [\v!StartMovie] [\NavigationGlyph{B}] + \definesymbol [\v!PauseMovie] [\NavigationGlyph{XX}] + \definesymbol [\v!StopMovie] [\NavigationGlyph{N}] + + \definesymbol [\v!StartRendering] [\NavigationGlyph{B}] + \definesymbol [\v!PauseRendering] [\NavigationGlyph{XX}] + \definesymbol [\v!StopRendering] [\NavigationGlyph{N}] + \definesymbol [\v!ResumeRendering] [\NavigationGlyph{B}] + +\stopsymbolset + +\startsymbolset [navigation 3] + + \definesymbol [\v!PreviousJump] [\NavigationGlyph{KK}] + \definesymbol [\v!NextJump] [\NavigationGlyph{LL}] + \definesymbol [\v!CloseDocument] [\NavigationGlyph{M}] + + \definesymbol [\v!firstpage] [\NavigationGlyph{KKK}] + \definesymbol [\v!previouspage] [\NavigationGlyph{K}] + \definesymbol [\v!nextpage] [\NavigationGlyph{L}] + \definesymbol [\v!lastpage] [\NavigationGlyph{LLL}] + + \definesymbol [\v!firstsubpage] [\NavigationGlyph{kkk}] + \definesymbol [\v!previoussubpage] [\NavigationGlyph{k}] + \definesymbol [\v!nextsubpage] [\NavigationGlyph{l}] + \definesymbol [\v!lastsubpage] [\NavigationGlyph{lll}] + + \definesymbol [\v!StartSound] [\NavigationGlyph{L}] + \definesymbol [\v!PauseSound] [\NavigationGlyph{YY}] + \definesymbol [\v!StopSound] [\NavigationGlyph{M}] + + \definesymbol [\v!StartMovie] [\NavigationGlyph{L}] + \definesymbol [\v!PauseMovie] [\NavigationGlyph{YY}] + \definesymbol [\v!StopMovie] [\NavigationGlyph{M}] + + \definesymbol [\v!StartRendering] [\NavigationGlyph{L}] + \definesymbol [\v!PauseRendering] [\NavigationGlyph{YY}] + \definesymbol [\v!StopRendering] [\NavigationGlyph{M}] + \definesymbol [\v!ResumeRendering] [\NavigationGlyph{L}] + +\stopsymbolset + +\startsymbolset [navigation 4] + + \definesymbol [\v!PreviousJump] [\NavigationGlyph{II}] + \definesymbol [\v!NextJump] [\NavigationGlyph{JJ}] + \definesymbol [\v!CloseDocument] [\NavigationGlyph{N}] + + \definesymbol [\v!firstpage] [\NavigationGlyph{III}] + \definesymbol [\v!previouspage] [\NavigationGlyph{I}] + \definesymbol [\v!nextpage] [\NavigationGlyph{J}] + \definesymbol [\v!lastpage] [\NavigationGlyph{JJJ}] + + \definesymbol [\v!firstsubpage] [\NavigationGlyph{iii}] + \definesymbol [\v!previoussubpage] [\NavigationGlyph{i}] + \definesymbol [\v!nextsubpage] [\NavigationGlyph{j}] + \definesymbol [\v!lastsubpage] [\NavigationGlyph{jjj}] + + \definesymbol [\v!StartSound] [\NavigationGlyph{J}] + \definesymbol [\v!PauseSound] [\NavigationGlyph{XX}] + \definesymbol [\v!StopSound] [\NavigationGlyph{N}] + + \definesymbol [\v!StartMovie] [\NavigationGlyph{J}] + \definesymbol [\v!PauseMovie] [\NavigationGlyph{XX}] + \definesymbol [\v!StopMovie] [\NavigationGlyph{N}] + + \definesymbol [\v!StartRendering] [\NavigationGlyph{J}] + \definesymbol [\v!PauseRendering] [\NavigationGlyph{XX}] + \definesymbol [\v!StopRendering] [\NavigationGlyph{N}] + \definesymbol [\v!ResumeRendering] [\NavigationGlyph{J}] + +\stopsymbolset + +% 1 left : 065 067 073 075 +% 2 left : 128 132 144 148 +% 3 left : 129 133 145 149 + +% 1 right : 066 068 074 076 +% 2 right : 130 134 146 150 +% 3 right : 131 135 147 151 + +% crossed : 160 160 160 160 +% opened : 152 152 156 156 +% closed : 154 154 158 158 + +% larrow : 208 210 212 214 +% rarrow : 209 211 213 215 +% barrow : 178 178 178 178 +% ocircle : 168 168 168 168 +% ccircle : 170 170 170 170 + +\protect \endinput diff --git a/tex/context/base/symb-jmn.tex b/tex/context/base/symb-jmn.tex deleted file mode 100644 index 1ed65d16e..000000000 --- a/tex/context/base/symb-jmn.tex +++ /dev/null @@ -1,204 +0,0 @@ -%D \module -%D [ file=symb-jmn, -%D version=2004.08.02, -%D title=\CONTEXT\ Symbol Libraries, -%D subtitle=Special Navigational Symbols, -%D author=Hans Hagen, -%D date=\currentdate, -%D copyright=PRAGMA ADE] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -%D This file defines a few navigational symbol vectors. The font used -%D here is designed by Janusz M.~Nowacki, one of the Polish Font -%D Gurus who made this font specially for me, hence the name. If you -%D you want to meet its designer, come to Bachotek! In case you're -%D not familiar with his work, take a look at the Antikwa, Iwona and -%D Kurier fonts! -%D -%D \usesymbols[jmn] -%D -%D \showsymbolset[navigation 1] -%D \showsymbolset[navigation 3] -%D \showsymbolset[navigation 2] -%D \showsymbolset[navigation 4] -%D -%D \page -%D \showfont[NavigationNormal] -%D \page -%D \showfont[NavigationShadowed] -%D \page - -% needed: -% -% - inverted crossed -% - curved diamond - -\unprotect - -\loadmapfile[original-base.map] % \loadmapfile [original-context-symbol.map] - -\ifnum\texengine=\luatexengine - \definefontsynonym[NavigationNormal] [hans.tfm] - \definefontsynonym[NavigationShadowed] [hans-sh.tfm] -\else - \definefontsynonym[NavigationNormal] [hans] - \definefontsynonym[NavigationShadowed] [hans-sh] -\fi - -\definefontsynonym[NavigationFont] [NavigationNormal] -%definefontsynonym[NavigationFont] [NavigationShadowed] - -\def\NavigationGlyph#1{\getglyph{NavigationFont}{\char#1}} - -\unprotect - -\startsymbolset [navigation 1] - - \definesymbol [\v!previouspage] [\NavigationGlyph {65}] - \definesymbol [\v!PreviousJump] [\NavigationGlyph{128}] - \definesymbol [\v!firstpage] [\NavigationGlyph{129}] - - \definesymbol [\v!nextpage] [\NavigationGlyph {66}] - \definesymbol [\v!NextJump] [\NavigationGlyph{130}] - \definesymbol [\v!lastpage] [\NavigationGlyph{131}] - - \definesymbol [\v!CloseDocument] [\NavigationGlyph{160}] - - \definesymbol [\v!firstsubpage] [\NavigationGlyph{178}] - \definesymbol [\v!previoussubpage] [\NavigationGlyph{208}] - \definesymbol [\v!nextsubpage] [\NavigationGlyph{209}] - \definesymbol [\v!lastsubpage] [\NavigationGlyph{178}] - - \definesymbol [\v!StartSound] [\NavigationGlyph {66}] - \definesymbol [\v!PauseSound] [\NavigationGlyph{168}] - \definesymbol [\v!StopSound] [\NavigationGlyph{170}] - - \definesymbol [\v!StartMovie] [\NavigationGlyph {66}] - \definesymbol [\v!PauseMovie] [\NavigationGlyph{168}] - \definesymbol [\v!StopMovie] [\NavigationGlyph{170}] - - \definesymbol [\v!StartRendering] [\NavigationGlyph {66}] - \definesymbol [\v!PauseRendering] [\NavigationGlyph{168}] - \definesymbol [\v!StopRendering] [\NavigationGlyph{170}] - \definesymbol [\v!ResumeRendering] [\NavigationGlyph {66}] - -\stopsymbolset - -\startsymbolset [navigation 2] - - \definesymbol [\v!previouspage] [\NavigationGlyph {67}] - \definesymbol [\v!PreviousJump] [\NavigationGlyph{132}] - \definesymbol [\v!firstpage] [\NavigationGlyph{133}] - - \definesymbol [\v!nextpage] [\NavigationGlyph {68}] - \definesymbol [\v!NextJump] [\NavigationGlyph{134}] - \definesymbol [\v!lastpage] [\NavigationGlyph{135}] - - \definesymbol [\v!CloseDocument] [\NavigationGlyph{160}] - - \definesymbol [\v!firstsubpage] [\NavigationGlyph{176}] - \definesymbol [\v!previoussubpage] [\NavigationGlyph{210}] - \definesymbol [\v!nextsubpage] [\NavigationGlyph{211}] - \definesymbol [\v!lastsubpage] [\NavigationGlyph{176}] - - \definesymbol [\v!StartSound] [\NavigationGlyph {68}] - \definesymbol [\v!PauseSound] [\NavigationGlyph{170}] - \definesymbol [\v!StopSound] [\NavigationGlyph{168}] - - \definesymbol [\v!StartMovie] [\NavigationGlyph {68}] - \definesymbol [\v!PauseMovie] [\NavigationGlyph{170}] - \definesymbol [\v!StopMovie] [\NavigationGlyph{168}] - - \definesymbol [\v!StartRendering] [\NavigationGlyph {68}] - \definesymbol [\v!PauseRendering] [\NavigationGlyph{170}] - \definesymbol [\v!StopRendering] [\NavigationGlyph{168}] - \definesymbol [\v!ResumeRendering] [\NavigationGlyph {68}] - -\stopsymbolset - -\startsymbolset [navigation 3] - - \definesymbol [\v!previouspage] [\NavigationGlyph {73}] - \definesymbol [\v!PreviousJump] [\NavigationGlyph{144}] - \definesymbol [\v!firstpage] [\NavigationGlyph{145}] - - \definesymbol [\v!nextpage] [\NavigationGlyph {74}] - \definesymbol [\v!NextJump] [\NavigationGlyph{146}] - \definesymbol [\v!lastpage] [\NavigationGlyph{147}] - - \definesymbol [\v!CloseDocument] [\NavigationGlyph{160}] - - \definesymbol [\v!firstsubpage] [\NavigationGlyph{178}] - \definesymbol [\v!previoussubpage] [\NavigationGlyph{212}] - \definesymbol [\v!nextsubpage] [\NavigationGlyph{213}] - \definesymbol [\v!lastsubpage] [\NavigationGlyph{178}] - - \definesymbol [\v!StartSound] [\NavigationGlyph {73}] - \definesymbol [\v!PauseSound] [\NavigationGlyph{168}] - \definesymbol [\v!StopSound] [\NavigationGlyph{170}] - - \definesymbol [\v!StartMovie] [\NavigationGlyph {73}] - \definesymbol [\v!PauseMovie] [\NavigationGlyph{168}] - \definesymbol [\v!StopMovie] [\NavigationGlyph{170}] - - \definesymbol [\v!StartRendering] [\NavigationGlyph {73}] - \definesymbol [\v!PauseRendering] [\NavigationGlyph{168}] - \definesymbol [\v!StopRendering] [\NavigationGlyph{170}] - \definesymbol [\v!ResumeRendering] [\NavigationGlyph {73}] - -\stopsymbolset - -% 1 left : 065 067 073 075 -% 2 left : 128 132 144 148 -% 3 left : 129 133 145 149 - -% 1 right : 066 068 074 076 -% 2 right : 130 134 146 150 -% 3 right : 131 135 147 151 - -% crossed : 160 160 160 160 -% opened : 152 152 156 156 -% closed : 154 154 158 158 - -% larrow : 208 210 212 214 -% rarrow : 209 211 213 215 -% barrow : 178 178 178 178 -% ocircle : 168 168 168 168 -% ccircle : 170 170 170 170 - -\startsymbolset [navigation 4] - - \definesymbol [\v!previouspage] [\NavigationGlyph {75}] - \definesymbol [\v!PreviousJump] [\NavigationGlyph{148}] - \definesymbol [\v!firstpage] [\NavigationGlyph{149}] - - \definesymbol [\v!nextpage] [\NavigationGlyph {76}] - \definesymbol [\v!NextJump] [\NavigationGlyph{150}] - \definesymbol [\v!lastpage] [\NavigationGlyph{151}] - - \definesymbol [\v!CloseDocument] [\NavigationGlyph{160}] - - \definesymbol [\v!firstsubpage] [\NavigationGlyph{176}] - \definesymbol [\v!previoussubpage] [\NavigationGlyph{214}] - \definesymbol [\v!nextsubpage] [\NavigationGlyph{215}] - \definesymbol [\v!lastsubpage] [\NavigationGlyph{176}] - - \definesymbol [\v!StartSound] [\NavigationGlyph {75}] - \definesymbol [\v!PauseSound] [\NavigationGlyph{170}] - \definesymbol [\v!StopSound] [\NavigationGlyph{168}] - - \definesymbol [\v!StartMovie] [\NavigationGlyph {75}] - \definesymbol [\v!PauseMovie] [\NavigationGlyph{170}] - \definesymbol [\v!StopMovie] [\NavigationGlyph{168}] - - \definesymbol [\v!StartRendering] [\NavigationGlyph {75}] - \definesymbol [\v!PauseRendering] [\NavigationGlyph{170}] - \definesymbol [\v!StopRendering] [\NavigationGlyph{168}] - \definesymbol [\v!ResumeRendering] [\NavigationGlyph {75}] - -\stopsymbolset - -\protect \endinput diff --git a/tex/context/base/symb-mis.mkii b/tex/context/base/symb-mis.mkii new file mode 100644 index 000000000..9921fa94f --- /dev/null +++ b/tex/context/base/symb-mis.mkii @@ -0,0 +1,139 @@ +%D \module +%D [ file=symb-mis, +%D version=2002.05.07, +%D title=\CONTEXT\ Symbol Libraries, +%D subtitle=Miscelaneous, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright=PRAGMA-ADE] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\unprotect + +%D We predefine some common symbols and conversions that will +%D be understood by many commands. + +% \mathematics no longer needed, although only math fonts might have these + +\definesymbol [\v!none] [] +\definesymbol [bullet] [\mathematics{\bullet}] +\definesymbol [dash] [\mathematics{-}] +\definesymbol [star] [\mathematics{\star}] +\definesymbol [triangle] [\mathematics{\triangleright}] +\definesymbol [circle] [\mathematics{\circ}] +\definesymbol [square] [\mathematics{\square}] +\definesymbol [diamond] [\mathematics{\diamond}] + +\definesymbol [smallcircle] [\hbox{\raise.1ex\hbox{\mathematics{\scriptscriptstyle\bigcirc}}}] +\definesymbol [medcircle] [\hbox{\raise.1ex\hbox{\mathematics{\scriptstyle \bigcirc}}}] +\definesymbol [bigcircle] [\mathematics{\bigcirc}] + +\definesymbol [1] [\symbol{bullet}] +\definesymbol [2] [\symbol{dash}] +\definesymbol [3] [\symbol{star}] +\definesymbol [4] [\symbol{triangle}] +\definesymbol [5] [\symbol{circle}] +\definesymbol [6] [\symbol{medcircle}] +\definesymbol [7] [\symbol{bigcircle}] +\definesymbol [8] [\symbol{square}] + +%D Special hyperlinks, namely those to pages or navigational +%D properties, are associated with symbols. + +\definesymbol [\v!firstpage] [\gotobegincharacter] +\definesymbol [\v!previouspage] [\gobackwardcharacter] +\definesymbol [\v!nextpage] [\goforwardcharacter] +\definesymbol [\v!lastpage] [\gotoendcharacter] +\definesymbol [\v!firstsubpage] [\gotobegincharacter] +\definesymbol [\v!previoussubpage] [\gobackwardcharacter] +\definesymbol [\v!nextsubpage] [\goforwardcharacter] +\definesymbol [\v!lastsubpage] [\gotoendcharacter] +\definesymbol [\v!PreviousJump] [\gobackjumpcharacter] +\definesymbol [\v!NextJump] [\goforjumpcharacter] +\definesymbol [\v!CloseDocument] [\closecharacter] + +\definesymbol [\v!first] [\symbol{\v!firstpage}] +\definesymbol [\v!previous] [\symbol{\v!previouspage}] +\definesymbol [\v!next] [\symbol{\v!nextpage}] +\definesymbol [\v!last] [\symbol{\v!lastpage}] +\definesymbol [\v!somewhere] [\gotosomewherecharacter] +\definesymbol [\v!nowhere] [\gonowherecharacter] + +\definesymbol [\v!backward] [\symbol{\v!previouspage}] +\definesymbol [\v!forward] [\symbol{\v!nextpage}] + +%D The next two symbols (\symbol[P] and \symbol[S]) are +%D variations in their math counterparts. The following ones +%D {\em do} scale. + +% todo : hook this into \textsection + +\definesymbol [S] [\getglyph{MathSymbol}{\char"78}] +\definesymbol [P] [\getglyph{MathSymbol}{\char"7B}] + +%D These symbols are taken from the Computer Moders Roman +%D symbol set or, when present, from the additional symbols of +%D the American Mathematical Society. Of course one can use +%D his or her own symbols by redefining them. + +\def\dogotocharacter#1#2#3% + {\ifx#1\undefined#2\else#3\fi} + +\def\gotobegincharacter + {\hbox + {\dogotocharacter\blacktriangleleft + {\setbox0\hbox{\mathematics{\triangleleft}}% + \vrule\!!width.085ex\!!height1.075\ht0\!!depth\dp0 + \kern-.11ex\box0} + {\setbox0\hbox{\mathematics{\blacktriangleleft}}% + \setbox2\hbox{\vrule\!!height\ht0\!!depth\dp0\!!width.25ex}% + \hbox{\lower.03ex\box2\kern-.35ex\box0}}}} + +\def\gotoendcharacter + {\hbox + {\dogotocharacter\blacktriangleright + {\setbox0\hbox{\mathematics{\triangleright}}% + \copy0\kern-.11ex + \vrule\!!width.085ex\!!height1.075\ht0\!!depth\dp0} + {\setbox0\hbox{\mathematics{\blacktriangleright}}% + \setbox2\hbox{\vrule\!!height\ht0\!!depth\dp0\!!width.25ex}% + \hbox{\box0\kern-.35ex\lower.03ex\box2}}}} + +\def\gobackwardcharacter + {\mathematics{\dogotocharacter\blacktriangleright\triangleleft\blacktriangleleft}} + +\def\goforwardcharacter + {\mathematics{\dogotocharacter\blacktriangleright\triangleright\blacktriangleright}} + +\def\gonowherecharacter + {\mathematics{\bullet}} + +\def\gotosomewherecharacter + {{\hbox{\hsmash{\symbol[\v!previous]}\symbol[\v!next]}}} + +\unexpanded\def\closecharacter + {\dogotocharacter\boxtimes + {\ruledhbox{\mathematics{\times}}} + {\mathematics{\boxtimes}}} + +\def\goforjumpcharacter + {\hbox{\goforwardcharacter \kern-.5em\goforwardcharacter}} + +\def\gobackjumpcharacter + {\hbox{\gobackwardcharacter\kern-.5em\gobackwardcharacter}} + +%D The next two symbols are for Daniel Flipo: + +\ifx\high \undefined \let\high \firstofoneargument \fi % todo +\ifx\notsmallcapped\undefined \let\notsmallcapped\firstofoneargument \fi % todo + +\definesymbol [Numero] [N\high{\notsmallcapped{o}\kern.2em}] +\definesymbol [numero] [n\high{\notsmallcapped{o}\kern.2em}] + +\def\Numero{\symbol[Numero]} +\def\numero{\symbol[numero]} + +\protect \endinput diff --git a/tex/context/base/symb-mis.mkiv b/tex/context/base/symb-mis.mkiv new file mode 100644 index 000000000..8985e31d0 --- /dev/null +++ b/tex/context/base/symb-mis.mkiv @@ -0,0 +1,55 @@ +%D \module +%D [ file=symb-mis, +%D version=2002.05.07, +%D title=\CONTEXT\ Symbol Libraries, +%D subtitle=Miscelaneous, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright=PRAGMA-ADE] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\unprotect + +%D We predefine some common symbols and conversions that will +%D be understood by many commands. The \type {\mathematics} +%D is no longer needed, although only math fonts might have +%D these symbols. + +\definesymbol [\v!none] [] + +\definesymbol [bullet] [\mathematics{\bullet}] +\definesymbol [dash] [\mathematics{-}] +\definesymbol [star] [\mathematics{\star}] +\definesymbol [triangle] [\mathematics{\triangleright}] +\definesymbol [circle] [\mathematics{\circ}] +\definesymbol [square] [\mathematics{\square}] +\definesymbol [diamond] [\mathematics{\diamond}] + +\definesymbol [smallcircle] [\hbox{\raise.1ex\hbox{\mathematics{\scriptscriptstyle\bigcirc}}}] +\definesymbol [medcircle] [\hbox{\raise.1ex\hbox{\mathematics{\scriptstyle \bigcirc}}}] +\definesymbol [bigcircle] [\mathematics{\bigcirc}] + +\definesymbol [1] [\symbol{bullet}] +\definesymbol [2] [\symbol{dash}] +\definesymbol [3] [\symbol{star}] +\definesymbol [4] [\symbol{triangle}] +\definesymbol [5] [\symbol{circle}] +\definesymbol [6] [\symbol{medcircle}] +\definesymbol [7] [\symbol{bigcircle}] +\definesymbol [8] [\symbol{square}] + +\definesymbol [S] [\sectionmark] +\definesymbol [P] [\paragraphmark] +\definesymbol [Numero] [N\textnumero] +\definesymbol [numero] [n\textnumero] +\definesymbol [euro] [\texteuro] + +\let\euro\texteuro + +\def\Numero{\symbol[Numero]} % obsolete +\def\numero{\symbol[numero]} % obsolete + +\protect \endinput diff --git a/tex/context/base/symb-mis.tex b/tex/context/base/symb-mis.tex deleted file mode 100644 index d108b8902..000000000 --- a/tex/context/base/symb-mis.tex +++ /dev/null @@ -1,139 +0,0 @@ -%D \module -%D [ file=symb-mis, -%D version=2002.05.07, -%D title=\CONTEXT\ Symbol Libraries, -%D subtitle=Miscelaneous, -%D author=Hans Hagen, -%D date=\currentdate, -%D copyright=PRAGMA-ADE] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -\unprotect - -%D We predefine some common symbols and conversions that will -%D be understood by many commands. - -% \mathematics no longer needed, although only math fonts might have these - -\definesymbol [\v!none] [] -\definesymbol [bullet] [\mathematics{\bullet}] -\definesymbol [dash] [\mathematics{-}] -\definesymbol [star] [\mathematics{\star}] -\definesymbol [triangle] [\mathematics{\triangleright}] -\definesymbol [circle] [\mathematics{\circ}] -\definesymbol [square] [\mathematics{\square}] -\definesymbol [diamond] [\mathematics{\diamond}] - -\definesymbol [smallcircle] [\hbox{\raise.1ex\hbox{\mathematics{\scriptscriptstyle\bigcirc}}}] -\definesymbol [medcircle] [\hbox{\raise.1ex\hbox{\mathematics{\scriptstyle \bigcirc}}}] -\definesymbol [bigcircle] [\mathematics{\bigcirc}] - -\definesymbol [1] [{\symbol[bullet]}] -\definesymbol [2] [{\symbol[dash]}] -\definesymbol [3] [{\symbol[star]}] -\definesymbol [4] [{\symbol[triangle]}] -\definesymbol [5] [{\symbol[circle]}] -\definesymbol [6] [{\symbol[medcircle]}] -\definesymbol [7] [{\symbol[bigcircle]}] -\definesymbol [8] [{\symbol[square]}] - -%D Special hyperlinks, namely those to pages or navigational -%D properties, are associated with symbols. - -\definesymbol [\v!firstpage] [\gotobegincharacter] -\definesymbol [\v!previouspage] [\gobackwardcharacter] -\definesymbol [\v!nextpage] [\goforwardcharacter] -\definesymbol [\v!lastpage] [\gotoendcharacter] -\definesymbol [\v!firstsubpage] [\gotobegincharacter] -\definesymbol [\v!previoussubpage] [\gobackwardcharacter] -\definesymbol [\v!nextsubpage] [\goforwardcharacter] -\definesymbol [\v!lastsubpage] [\gotoendcharacter] -\definesymbol [\v!PreviousJump] [\gobackjumpcharacter] -\definesymbol [\v!NextJump] [\goforjumpcharacter] -\definesymbol [\v!CloseDocument] [\closecharacter] - -\definesymbol [\v!first] [{\symbol[\v!firstpage]}] -\definesymbol [\v!previous] [{\symbol[\v!previouspage]}] -\definesymbol [\v!next] [{\symbol[\v!nextpage]}] -\definesymbol [\v!last] [{\symbol[\v!lastpage]}] -\definesymbol [\v!somewhere] [\gotosomewherecharacter] -\definesymbol [\v!nowhere] [\gonowherecharacter] - -\definesymbol [\v!backward] [{\symbol[\v!previouspage]}] -\definesymbol [\v!forward] [{\symbol[\v!nextpage]}] - -%D The next two symbols (\symbol[P] and \symbol[S]) are -%D variations in their math counterparts. The following ones -%D {\em do} scale. - -% todo : hook this into \textsection - -\definesymbol [S] [\getglyph{MathSymbol}{\char"78}] -\definesymbol [P] [\getglyph{MathSymbol}{\char"7B}] - -%D These symbols are taken from the Computer Moders Roman -%D symbol set or, when present, from the additional symbols of -%D the American Mathematical Society. Of course one can use -%D his or her own symbols by redefining them. - -\def\dogotocharacter#1#2#3% - {\ifx#1\undefined#2\else#3\fi} - -\def\gotobegincharacter - {\hbox - {\dogotocharacter\blacktriangleleft - {\setbox0\hbox{\mathematics{\triangleleft}}% - \vrule\!!width.085ex\!!height1.075\ht0\!!depth\dp0 - \kern-.11ex\box0} - {\setbox0\hbox{\mathematics{\blacktriangleleft}}% - \setbox2\hbox{\vrule\!!height\ht0\!!depth\dp0\!!width.25ex}% - \hbox{\lower.03ex\box2\kern-.35ex\box0}}}} - -\def\gotoendcharacter - {\hbox - {\dogotocharacter\blacktriangleright - {\setbox0\hbox{\mathematics{\triangleright}}% - \copy0\kern-.11ex - \vrule\!!width.085ex\!!height1.075\ht0\!!depth\dp0} - {\setbox0\hbox{\mathematics{\blacktriangleright}}% - \setbox2\hbox{\vrule\!!height\ht0\!!depth\dp0\!!width.25ex}% - \hbox{\box0\kern-.35ex\lower.03ex\box2}}}} - -\def\gobackwardcharacter - {\mathematics{\dogotocharacter\blacktriangleright\triangleleft\blacktriangleleft}} - -\def\goforwardcharacter - {\mathematics{\dogotocharacter\blacktriangleright\triangleright\blacktriangleright}} - -\def\gonowherecharacter - {\mathematics{\bullet}} - -\def\gotosomewherecharacter - {{\hbox{\hsmash{\symbol[\v!previous]}\symbol[\v!next]}}} - -\unexpanded\def\closecharacter - {\dogotocharacter\boxtimes - {\ruledhbox{\mathematics{\times}}} - {\mathematics{\boxtimes}}} - -\def\goforjumpcharacter - {\hbox{\goforwardcharacter \kern-.5em\goforwardcharacter}} - -\def\gobackjumpcharacter - {\hbox{\gobackwardcharacter\kern-.5em\gobackwardcharacter}} - -%D The next two symbols are for Daniel Flipo: - -\ifx\high \undefined \let\high \firstofoneargument \fi % todo -\ifx\notsmallcapped\undefined \let\notsmallcapped\firstofoneargument \fi % todo - -\definesymbol [Numero] [N\high{\notsmallcapped{o}\kern.2em}] -\definesymbol [numero] [n\high{\notsmallcapped{o}\kern.2em}] - -\def\Numero{\symbol[Numero]} -\def\numero{\symbol[numero]} - -\protect \endinput diff --git a/tex/context/base/symb-mvs.mkii b/tex/context/base/symb-mvs.mkii new file mode 100644 index 000000000..1dd3da0a0 --- /dev/null +++ b/tex/context/base/symb-mvs.mkii @@ -0,0 +1,217 @@ +%D \module +%D [ file=symb-mvs, +%D version=2000.03.30, +%D title=\CONTEXT\ Symbol Libraries, +%D subtitle=Martin Vogels Symbole, +%D author=Tobias Burnus \& Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D This module implements the Martin Vogel Symbole font +%D (marvosym). The names are derived from the \LATEX\ package +%D \type {marvosym} of Thomas Henlich. The symbols are +%D available as Type~1 font and are included in \TETEX\ and +%D \FPTEX\ distributions. +%D +%D This symbol font offers the signs of the zodiac, four +%D alternative the euro signs, some general office signs and +%D some more. +%D +%D The font was designed by Martin Vogel who can be reached at +%D \hyphenatedurl {martin.vogel@fh-bochum.de}. More information +%D can be found at \hyphenatedurl +%D {http://www.fh-bochum.de/fb1/vogel/marvosym.html}. The +%D conversion to Type~1 font was done by Thomas Henlich, who +%D can be reached at \hyphenatedurl +%D {thenlich@rcs.urz.tu-dresden.de}. +%D +%D This module is based on the current \CTAN\ version (as of +%D March 30, 2000) and is older than the TrueType version at +%D Martin Vogel's Homepage. The definitions in this module +%D reflect the \CTAN\ version. The font conversion was done by +%D Thomas Henlich using \type {ttf2pt1}, a program that can be +%D found at \hyphenatedurl +%D {http://www.netspace.net.au/~mheath/ttf2pt1/}. +%D +%D Using the new version of \type {marvosymb}, the MVzero will +%D has a slash and the FHBOLOGO, (wo)manface, and (wo)manfront +%D are replaced by other symbols. + +\loadmapfile[original-base.map] % \loadmapfile[original-vogel-symbol] + +\definefontsynonym [MartinVogel] [fmvr8x] + +\def\MartinVogelSymbol#1{\getglyph{MartinVogel}{\char#1}} + +% Astro signs and signs of the zodiac + +\startsymbolset [astronomic] + + \definesymbol [Sun] [\MartinVogelSymbol{192}] + \definesymbol [Moon] [\MartinVogelSymbol{193}] + \definesymbol [Mercury] [\MartinVogelSymbol{194}] + \definesymbol [Venus] [\MartinVogelSymbol{195}] + \definesymbol [Mars] [\MartinVogelSymbol{196}] + \definesymbol [Jupiter] [\MartinVogelSymbol{197}] + \definesymbol [Saturn] [\MartinVogelSymbol{198}] + \definesymbol [Uranus] [\MartinVogelSymbol{199}] + \definesymbol [Neptune] [\MartinVogelSymbol{200}] + \definesymbol [Pluto] [\MartinVogelSymbol{201}] + +\stopsymbolset + +\startsymbolset [zodiac] + + \definesymbol [Aries] [\MartinVogelSymbol{224}] + \definesymbol [Taurus] [\MartinVogelSymbol{225}] + \definesymbol [Gemini] [\MartinVogelSymbol{226}] + \definesymbol [Cancer] [\MartinVogelSymbol{227}] + \definesymbol [Leo] [\MartinVogelSymbol{228}] + \definesymbol [Virgo] [\MartinVogelSymbol{229}] + \definesymbol [Libra] [\MartinVogelSymbol{230}] + \definesymbol [Scorpio] [\MartinVogelSymbol{231}] + \definesymbol [Sagittarius] [\MartinVogelSymbol{232}] + \definesymbol [Capricorn] [\MartinVogelSymbol{233}] + \definesymbol [Aquarius] [\MartinVogelSymbol{234}] + \definesymbol [Pisces] [\MartinVogelSymbol{235}] + +\stopsymbolset + +% Euro signs and CE + +\startsymbolset [europe] + + \definesymbol [EUR] [\MartinVogelSymbol{164}] + \definesymbol [EURhv] [\MartinVogelSymbol {99}] + \definesymbol [EURcr] [\MartinVogelSymbol{100}] + \definesymbol [EURtm] [\MartinVogelSymbol{101}] + \definesymbol [CEsign] [\MartinVogelSymbol {67}] + +\stopsymbolset + +\startencoding[default] + + \definecharacter texteuro {\symbol[europe][EUR]} + +\stopencoding + +\unexpanded\def\euro{\doiftextelse{\texteuro}{\texteuro}{\symbol[europe][EUR]}} + +% Numbers 0 to 9, @, A and p + +% taco: are these more general, like also in zapf dingbats? + +\startsymbolset [martinvogel 1] + + \definesymbol [MVZero] [\MartinVogelSymbol {48}] + \definesymbol [MVOne] [\MartinVogelSymbol {49}] + \definesymbol [MVTwo] [\MartinVogelSymbol {50}] + \definesymbol [MVThree] [\MartinVogelSymbol {51}] + \definesymbol [MVFour] [\MartinVogelSymbol {52}] + \definesymbol [MVFive] [\MartinVogelSymbol {53}] + \definesymbol [MVSix] [\MartinVogelSymbol {54}] + \definesymbol [MVSeven] [\MartinVogelSymbol {55}] + \definesymbol [MVEight] [\MartinVogelSymbol {56}] + \definesymbol [MVNine] [\MartinVogelSymbol {57}] + \definesymbol [MVAt] [\MartinVogelSymbol {64}] + \definesymbol [MVA] [\MartinVogelSymbol{240}] + \definesymbol [MVp] [\MartinVogelSymbol{241}] + +\stopsymbolset + +% Office signs, crosses, circles, arrows + +\startsymbolset [martinvogel 2] + + \definesymbol [CheckedBox] [\MartinVogelSymbol {86}] + \definesymbol [CrossedBox] [\MartinVogelSymbol {88}] + \definesymbol [PointingHand] [\MartinVogelSymbol {90}] + \definesymbol [WritingHand] [\MartinVogelSymbol {98}] + \definesymbol [Heart] [\MartinVogelSymbol{140}] + \definesymbol [FlatSteel] [\MartinVogelSymbol{150}] + \definesymbol [Squarepipe] [\MartinVogelSymbol{151}] + \definesymbol [Rectpipe] [\MartinVogelSymbol{152}] + \definesymbol [Lsteel] [\MartinVogelSymbol{153}] + \definesymbol [TTsteel] [\MartinVogelSymbol{154}] + \definesymbol [Circpipe] [\MartinVogelSymbol{155}] + \definesymbol [Tsteel] [\MartinVogelSymbol{156}] + + \definesymbol [Stopsign] [\MartinVogelSymbol {33}] + \definesymbol [Beam] [\MartinVogelSymbol {34}] + \definesymbol [Bearing] [\MartinVogelSymbol {35}] + \definesymbol [Loosebearing] [\MartinVogelSymbol {36}] + \definesymbol [Fixedbearing] [\MartinVogelSymbol {37}] + \definesymbol [Lefttorque] [\MartinVogelSymbol {38}] + \definesymbol [Righttorque] [\MartinVogelSymbol {39}] + \definesymbol [Force] [\MartinVogelSymbol {40}] + \definesymbol [Lineload] [\MartinVogelSymbol {41}] + \definesymbol [Circles] [\MartinVogelSymbol {46}] + \definesymbol [Squaredot] [\MartinVogelSymbol{247}] + + \definesymbol [Correspondes] [\MartinVogelSymbol {61}] + \definesymbol [Vectorarrowhigh] [\MartinVogelSymbol {80}] + \definesymbol [Vectorarrow] [\MartinVogelSymbol{112}] + \definesymbol [Rightarrow] [\MartinVogelSymbol {62}] + \definesymbol [Lightning] [\MartinVogelSymbol {69}] + + \definesymbol [Snowflake] [\MartinVogelSymbol {42}] + \definesymbol [Kross] [\MartinVogelSymbol {43}] + \definesymbol [Cross] [\MartinVogelSymbol{134}] + \definesymbol [Celtcross] [\MartinVogelSymbol{135}] + \definesymbol [Ankh] [\MartinVogelSymbol{136}] + \definesymbol [Yingyang] [\MartinVogelSymbol {77}] + + \definesymbol [Pickup] [\MartinVogelSymbol {0}] % ? + \definesymbol [Letter] [\MartinVogelSymbol {66}] % ? + \definesymbol [Mobilephone] [\MartinVogelSymbol {72}] + \definesymbol [Telephone] [\MartinVogelSymbol {84}] + \definesymbol [fax] [\MartinVogelSymbol{116}] + \definesymbol [FAX] [\MartinVogelSymbol{117}] + \definesymbol [Faxmachine] [\MartinVogelSymbol{118}] + + \definesymbol [Clocklogo] [\MartinVogelSymbol {85}] + \definesymbol [Industry] [\MartinVogelSymbol {73}] + \definesymbol [Coffeecup] [\MartinVogelSymbol {75}] + \definesymbol [Info] [\MartinVogelSymbol{105}] + \definesymbol [Football] [\MartinVogelSymbol{111}] + \definesymbol [Frowny] [\MartinVogelSymbol{167}] + \definesymbol [Smiley] [\MartinVogelSymbol{169}] + \definesymbol [Bicycle] [\MartinVogelSymbol{174}] + + \definesymbol [Rightscissors] [\MartinVogelSymbol {81}] + \definesymbol [Leftscissors] [\MartinVogelSymbol {83}] + \definesymbol [Cutright] [\MartinVogelSymbol{113}] + \definesymbol [Cutleft] [\MartinVogelSymbol{115}] + \definesymbol [Kutline] [\MartinVogelSymbol {82}] % K ? + \definesymbol [Cutline] [\MartinVogelSymbol{114}] + +\stopsymbolset + +% FHBO (Fachhochschule Bochum), face, humans, bat + +\startsymbolset [martinvogel 3] + + \definesymbol [FHBOlogo] [\MartinVogelSymbol {70}] + \definesymbol [FHBOLOGO] [\MartinVogelSymbol{102}] + \definesymbol [Womanside] [\MartinVogelSymbol{204}] + \definesymbol [Manside] [\MartinVogelSymbol{205}] + \definesymbol [Womanfront] [\MartinVogelSymbol{206}] + \definesymbol [Manfront] [\MartinVogelSymbol{207}] + \definesymbol [Bat] [\MartinVogelSymbol{253}] + \definesymbol [Womanface] [\MartinVogelSymbol{254}] + \definesymbol [MartinVogel] [\MartinVogelSymbol{255}] + +\stopsymbolset + +%D \showsymbolset[astronomic] +%D \showsymbolset[zodiac] +%D \showsymbolset[europe] +%D \showsymbolset[martinvogel 1] +%D \showsymbolset[martinvogel 2] +%D \showsymbolset[martinvogel 3] + +\endinput diff --git a/tex/context/base/symb-mvs.mkiv b/tex/context/base/symb-mvs.mkiv new file mode 100644 index 000000000..312a50a88 --- /dev/null +++ b/tex/context/base/symb-mvs.mkiv @@ -0,0 +1,263 @@ +%D \module +%D [ file=symb-mvs, +%D version=2010.12.08, % 2000.03.30, +%D title=\CONTEXT\ Symbol Libraries, +%D subtitle=Martin Vogels Symbole, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright=PRAGMA] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\definefontsynonym [MartinVogel] [marvosym.ttf] + +\def\MartinVogelSymbol{\getnamedglyphdirect{MartinVogel}} % #1 + +\startsymbolset [astronomic] + + \definesymbol [Sun] [\MartinVogelSymbol{Sun}] + \definesymbol [Moon] [\MartinVogelSymbol{Moon}] + \definesymbol [Mercury] [\MartinVogelSymbol{Mercury}] + \definesymbol [Venus] [\MartinVogelSymbol{Venus}] + \definesymbol [Mars] [\MartinVogelSymbol{Mars}] + \definesymbol [Jupiter] [\MartinVogelSymbol{Jupiter}] + \definesymbol [Saturn] [\MartinVogelSymbol{Saturn}] + \definesymbol [Uranus] [\MartinVogelSymbol{Uranus}] + \definesymbol [Neptune] [\MartinVogelSymbol{Neptune}] + \definesymbol [Pluto] [\MartinVogelSymbol{Pluto}] + +\stopsymbolset + +\startsymbolset [zodiac] + + \definesymbol [Aries] [\MartinVogelSymbol{Aries}] + \definesymbol [Taurus] [\MartinVogelSymbol{Taurus}] + \definesymbol [Gemini] [\MartinVogelSymbol{Gemini}] + \definesymbol [Cancer] [\MartinVogelSymbol{Cancer}] + \definesymbol [Leo] [\MartinVogelSymbol{Leo}] + \definesymbol [Virgo] [\MartinVogelSymbol{Virgo}] + \definesymbol [Libra] [\MartinVogelSymbol{Libra}] + \definesymbol [Scorpio] [\MartinVogelSymbol{Scorpio}] + \definesymbol [Sagittarius] [\MartinVogelSymbol{Sagittarius}] + \definesymbol [Capricorn] [\MartinVogelSymbol{Capricorn}] + \definesymbol [Aquarius] [\MartinVogelSymbol{Aquarius}] + \definesymbol [Pisces] [\MartinVogelSymbol{Pisces}] + +\stopsymbolset + +\startsymbolset [europe] + + \definesymbol [EUR] [\MartinVogelSymbol{EUR}] + \definesymbol [EURhv] [\MartinVogelSymbol{EurHv}] + \definesymbol [EURcr] [\MartinVogelSymbol{EurCr}] + \definesymbol [EURtm] [\MartinVogelSymbol{EurTm}] + \definesymbol [EURdig] [\MartinVogelSymbol{EurDig}] + \definesymbol [CEsign] [\MartinVogelSymbol{CESign}] + +\stopsymbolset + +\startsymbolset [martinvogel 1] + + \definesymbol [MVZero] [\MartinVogelSymbol{MVZero}] + \definesymbol [MVOne] [\MartinVogelSymbol{MVOne}] + \definesymbol [MVTwo] [\MartinVogelSymbol{MVTwo}] + \definesymbol [MVThree] [\MartinVogelSymbol{MVThree}] + \definesymbol [MVFour] [\MartinVogelSymbol{MVFour}] + \definesymbol [MVFive] [\MartinVogelSymbol{MVFive}] + \definesymbol [MVSix] [\MartinVogelSymbol{MVSix}] + \definesymbol [MVSeven] [\MartinVogelSymbol{MVSeven}] + \definesymbol [MVEight] [\MartinVogelSymbol{MVEight}] + \definesymbol [MVNine] [\MartinVogelSymbol{MVNine}] + + \definesymbol [MVAt] [\MartinVogelSymbol{MVAt}] + \definesymbol [MVArrowDown] [\MartinVogelSymbol{MVArrowDown}] + \definesymbol [MVComma] [\MartinVogelSymbol{MVComma}] + \definesymbol [MVDivision] [\MartinVogelSymbol{MVDivision}] + \definesymbol [MVLeftBracket] [\MartinVogelSymbol{MVLeftBracket}] + \definesymbol [MVMinus] [\MartinVogelSymbol{MVMinus}] + \definesymbol [MVMultiplication] [\MartinVogelSymbol{MVMultiplication}] + \definesymbol [MVPeriod] [\MartinVogelSymbol{MVPeriod}] + \definesymbol [MVPlus] [\MartinVogelSymbol{MVPlus}] + \definesymbol [MVRightArrow] [\MartinVogelSymbol{MVRightArrow}] + \definesymbol [MVRightBracket] [\MartinVogelSymbol{MVRightBracket}] + \definesymbol [MVspace] [\MartinVogelSymbol{MVspace}] + +\stopsymbolset + +% Office signs, crosses, circles, arrows (names as in file) + +\startsymbolset [martinvogel 2] + + \definesymbol [AngleSign] [\MartinVogelSymbol{AngleSign}] + \definesymbol [Ankh] [\MartinVogelSymbol{Ankh}] + \definesymbol [ArrowOver] [\MartinVogelSymbol{ArrowOver}] + \definesymbol [AtForty] [\MartinVogelSymbol{AtForty}] + \definesymbol [AtNinetyFive] [\MartinVogelSymbol{AtNinetyFive}] + \definesymbol [AtSixty] [\MartinVogelSymbol{AtSixty}] + %definesymbol [BOLogo] [\MartinVogelSymbol{BOLogo}] + %definesymbol [BOLogoL] [\MartinVogelSymbol{BOLogoL}] + %definesymbol [BOLogoP] [\MartinVogelSymbol{BOLogoP}] + \definesymbol [BSEFree] [\MartinVogelSymbol{BSEFree}] + \definesymbol [BarOver] [\MartinVogelSymbol{BarOver}] + \definesymbol [Bat] [\MartinVogelSymbol{Bat}] + \definesymbol [Beam] [\MartinVogelSymbol{Beam}] + \definesymbol [Bearing] [\MartinVogelSymbol{Bearing}] + \definesymbol [Bicycle] [\MartinVogelSymbol{Bicycle}] + \definesymbol [Biohazard] [\MartinVogelSymbol{Biohazard}] + \definesymbol [Bleech] [\MartinVogelSymbol{Bleech}] + \definesymbol [Bouquet] [\MartinVogelSymbol{Bouquet}] + \definesymbol [CeltCross] [\MartinVogelSymbol{CeltCross}] + \definesymbol [CheckedBox] [\MartinVogelSymbol{CheckedBox}] + \definesymbol [CircPipe] [\MartinVogelSymbol{CircPipe}] + \definesymbol [CircSteel] [\MartinVogelSymbol{CircSteel}] + \definesymbol [CircledA] [\MartinVogelSymbol{CircledA}] + \definesymbol [CleaningA] [\MartinVogelSymbol{CleaningA}] + \definesymbol [CleaningF] [\MartinVogelSymbol{CleaningF}] + \definesymbol [CleaningFF] [\MartinVogelSymbol{CleaningFF}] + \definesymbol [CleaningP] [\MartinVogelSymbol{CleaningP}] + \definesymbol [CleaningPP] [\MartinVogelSymbol{CleaningPP}] + \definesymbol [ClockLogo] [\MartinVogelSymbol{ClockLogo}] + \definesymbol [Coffeecup] [\MartinVogelSymbol{Coffeecup}] + \definesymbol [ComputerMouse] [\MartinVogelSymbol{ComputerMouse}] + \definesymbol [Conclusion] [\MartinVogelSymbol{Conclusion}] + \definesymbol [Congruent] [\MartinVogelSymbol{Congruent}] + \definesymbol [Corresponds] [\MartinVogelSymbol{Corresponds}] + \definesymbol [Cross] [\MartinVogelSymbol{Cross}] + \definesymbol [CrossedBox] [\MartinVogelSymbol{CrossedBox}] + \definesymbol [CutLeft] [\MartinVogelSymbol{CutLeft}] + \definesymbol [CutLine] [\MartinVogelSymbol{CutLine}] + \definesymbol [CutRight] [\MartinVogelSymbol{CutRight}] + \definesymbol [CuttingLine] [\MartinVogelSymbol{CuttingLine}] + \definesymbol [Deleatur] [\MartinVogelSymbol{Deleatur}] + \definesymbol [Divides] [\MartinVogelSymbol{Divides}] + \definesymbol [DividesNot] [\MartinVogelSymbol{DividesNot}] + \definesymbol [EMail] [\MartinVogelSymbol{EMail}] + \definesymbol [Earth] [\MartinVogelSymbol{Earth}] + \definesymbol [EmailCT] [\MartinVogelSymbol{EmailCT}] + \definesymbol [Equivalence] [\MartinVogelSymbol{Equivalence}] + \definesymbol [Estatically] [\MartinVogelSymbol{Estatically}] + \definesymbol [EstimatedSign] [\MartinVogelSymbol{EstimatedSign}] + \definesymbol [Explosionsafe] [\MartinVogelSymbol{Explosionsafe}] + \definesymbol [EyesDollar] [\MartinVogelSymbol{EyesDollar}] + \definesymbol [FAX] [\MartinVogelSymbol{FAX}] + \definesymbol [FEMALE] [\MartinVogelSymbol{FEMALE}] + \definesymbol [Fax] [\MartinVogelSymbol{Fax}] + \definesymbol [Female] [\MartinVogelSymbol{Female}] + \definesymbol [FemaleFemale] [\MartinVogelSymbol{FemaleFemale}] + \definesymbol [FemaleMale] [\MartinVogelSymbol{FemaleMale}] + \definesymbol [FixedBearing] [\MartinVogelSymbol{FixedBearing}] + \definesymbol [FlatSteel] [\MartinVogelSymbol{FlatSteel}] + \definesymbol [Florin] [\MartinVogelSymbol{Florin}] + \definesymbol [Football] [\MartinVogelSymbol{Football}] + \definesymbol [Forward] [\MartinVogelSymbol{Forward}] + \definesymbol [ForwardToEnd] [\MartinVogelSymbol{ForwardToEnd}] + \definesymbol [ForwardToIndex] [\MartinVogelSymbol{ForwardToIndex}] + \definesymbol [Frowny] [\MartinVogelSymbol{Frowny}] + \definesymbol [Gentsroom] [\MartinVogelSymbol{Gentsroom}] + \definesymbol [HERMAPHRODITE] [\MartinVogelSymbol{HERMAPHRODITE}] + \definesymbol [HandWash] [\MartinVogelSymbol{HandWash}] + \definesymbol [Heart] [\MartinVogelSymbol{Heart}] + \definesymbol [Hermaphrodite] [\MartinVogelSymbol{Hermaphrodite}] + \definesymbol [HexaSteel] [\MartinVogelSymbol{HexaSteel}] + \definesymbol [HollowBox] [\MartinVogelSymbol{HollowBox}] + \definesymbol [IRONING] [\MartinVogelSymbol{IRONING}] + \definesymbol [Industry] [\MartinVogelSymbol{Industry}] + \definesymbol [Info] [\MartinVogelSymbol{Info}] + \definesymbol [Ironing] [\MartinVogelSymbol{Ironing}] + \definesymbol [Keyboard] [\MartinVogelSymbol{Keyboard}] + \definesymbol [LSteel] [\MartinVogelSymbol{LSteel}] + \definesymbol [Ladiesroom] [\MartinVogelSymbol{Ladiesroom}] + \definesymbol [LargerOrEqual] [\MartinVogelSymbol{LargerOrEqual}] + \definesymbol [Laserbeam] [\MartinVogelSymbol{Laserbeam}] + \definesymbol [LeftScissors] [\MartinVogelSymbol{LeftScissors}] + \definesymbol [LeftTorque] [\MartinVogelSymbol{LeftTorque}] + \definesymbol [LessOrEqual] [\MartinVogelSymbol{LessOrEqual}] + \definesymbol [Letter] [\MartinVogelSymbol{Letter}] + \definesymbol [Lightning] [\MartinVogelSymbol{Lightning}] + \definesymbol [Lineload] [\MartinVogelSymbol{Lineload}] + \definesymbol [LooseBearing] [\MartinVogelSymbol{LooseBearing}] + \definesymbol [MALE] [\MartinVogelSymbol{MALE}] + \definesymbol [Male] [\MartinVogelSymbol{Male}] + \definesymbol [MaleMale] [\MartinVogelSymbol{MaleMale}] + \definesymbol [ManFace] [\MartinVogelSymbol{ManFace}] + \definesymbol [MineSign] [\MartinVogelSymbol{MineSign}] + \definesymbol [Mobilefone] [\MartinVogelSymbol{Mobilefone}] + \definesymbol [MoveDown] [\MartinVogelSymbol{MoveDown}] + \definesymbol [MoveUp] [\MartinVogelSymbol{MoveUp}] + \definesymbol [MultiplicationDot] [\MartinVogelSymbol{MultiplicationDot}] + \definesymbol [Mundus] [\MartinVogelSymbol{Mundus}] + \definesymbol [Neutral] [\MartinVogelSymbol{Neutral}] + \definesymbol [NoBleech] [\MartinVogelSymbol{NoBleech}] + \definesymbol [NoBreakSpace] [\MartinVogelSymbol{NoBreakSpace}] + \definesymbol [NoChemicalCleaning] [\MartinVogelSymbol{NoChemicalCleaning}] + \definesymbol [NoIroning] [\MartinVogelSymbol{NoIroning}] + \definesymbol [NoTumbler] [\MartinVogelSymbol{NoTumbler}] + \definesymbol [NoWash] [\MartinVogelSymbol{NoWash}] + \definesymbol [NotCongruent] [\MartinVogelSymbol{NotCongruent}] + \definesymbol [OktoSteel] [\MartinVogelSymbol{OktoSteel}] + \definesymbol [PackingWaste] [\MartinVogelSymbol{PackingWaste}] + \definesymbol [ParallelPort] [\MartinVogelSymbol{ParallelPort}] + \definesymbol [PeaceDove] [\MartinVogelSymbol{PeaceDove}] + \definesymbol [Pfund] [\MartinVogelSymbol{Pfund}] + \definesymbol [Pickup] [\MartinVogelSymbol{Pickup}] + \definesymbol [PointingHand] [\MartinVogelSymbol{PointingHand}] + \definesymbol [Printer] [\MartinVogelSymbol{Printer}] + \definesymbol [Radioactivity] [\MartinVogelSymbol{Radioactivity}] + \definesymbol [RectPipe] [\MartinVogelSymbol{RectPipe}] + \definesymbol [RectSteel] [\MartinVogelSymbol{RectSteel}] + \definesymbol [Recycling] [\MartinVogelSymbol{Recycling}] + \definesymbol [Rewind] [\MartinVogelSymbol{Rewind}] + \definesymbol [RewindToIndex] [\MartinVogelSymbol{RewindToIndex}] + \definesymbol [RewindToStart] [\MartinVogelSymbol{RewindToStart}] + \definesymbol [RightScissors] [\MartinVogelSymbol{RightScissors}] + \definesymbol [RightTorque] [\MartinVogelSymbol{RightTorque}] + \definesymbol [RoundedLSteel] [\MartinVogelSymbol{RoundedLSteel}] + \definesymbol [RoundedTSteel] [\MartinVogelSymbol{RoundedTSteel}] + \definesymbol [RoundedTTSteel] [\MartinVogelSymbol{RoundedTTSteel}] + \definesymbol [SerialInterface] [\MartinVogelSymbol{SerialInterface}] + \definesymbol [SerialPort] [\MartinVogelSymbol{SerialPort}] + \definesymbol [Shilling] [\MartinVogelSymbol{Shilling}] + \definesymbol [ShortFifty] [\MartinVogelSymbol{ShortFifty}] + \definesymbol [ShortForty] [\MartinVogelSymbol{ShortForty}] + \definesymbol [ShortNinetyfive] [\MartinVogelSymbol{ShortNinetyfive}] + \definesymbol [ShortSixty] [\MartinVogelSymbol{ShortSixty}] + \definesymbol [ShortThirty] [\MartinVogelSymbol{ShortThirty}] + \definesymbol [Smiley] [\MartinVogelSymbol{Smiley}] + \definesymbol [SoftHyphen] [\MartinVogelSymbol{SoftHyphen}] + \definesymbol [SpecialForty] [\MartinVogelSymbol{SpecialForty}] + \definesymbol [SquarePipe] [\MartinVogelSymbol{SquarePipe}] + \definesymbol [SquareSteel] [\MartinVogelSymbol{SquareSteel}] + \definesymbol [Stopsign] [\MartinVogelSymbol{Stopsign}] + \definesymbol [StrikingThrough] [\MartinVogelSymbol{StrikingThrough}] + \definesymbol [TSteel] [\MartinVogelSymbol{TSteel}] + \definesymbol [TTSteel] [\MartinVogelSymbol{TTSteel}] + \definesymbol [Telephone] [\MartinVogelSymbol{Telefon}] + \definesymbol [ToBottom] [\MartinVogelSymbol{ToBottom}] + \definesymbol [ToTop] [\MartinVogelSymbol{ToTop}] + \definesymbol [Tumbler] [\MartinVogelSymbol{Tumbler}] + \definesymbol [Valve] [\MartinVogelSymbol{Valve}] + \definesymbol [WashCotton] [\MartinVogelSymbol{WashCotton}] + \definesymbol [WashSynthetics] [\MartinVogelSymbol{WashSynthetics}] + \definesymbol [WashWool] [\MartinVogelSymbol{WashWool}] + \definesymbol [Wheelchair] [\MartinVogelSymbol{Wheelchair}] + \definesymbol [WomanFace] [\MartinVogelSymbol{WomanFace}] + \definesymbol [WritingHand] [\MartinVogelSymbol{WritingHand}] + \definesymbol [YinYang] [\MartinVogelSymbol{YinYang}] + \definesymbol [arrowOver] [\MartinVogelSymbol{arrowOver}] + \definesymbol [barOver] [\MartinVogelSymbol{barOver}] + \definesymbol [fax] [\MartinVogelSymbol{fax}] + %definesymbol [hyphen] [\MartinVogelSymbol{hyphen}] + \definesymbol [ironing] [\MartinVogelSymbol{ironing}] + %definesymbol [nonmarkingreturn] [\MartinVogelSymbol{nonmarkingreturn}] + +\stopsymbolset + +%D \showsymbolset[astronomic] +%D \showsymbolset[zodiac] +%D \showsymbolset[europe] +%D \showsymbolset[martinvogel 1] +%D \showsymbolset[martinvogel 2] + +\endinput diff --git a/tex/context/base/symb-mvs.tex b/tex/context/base/symb-mvs.tex deleted file mode 100644 index 1dd3da0a0..000000000 --- a/tex/context/base/symb-mvs.tex +++ /dev/null @@ -1,217 +0,0 @@ -%D \module -%D [ file=symb-mvs, -%D version=2000.03.30, -%D title=\CONTEXT\ Symbol Libraries, -%D subtitle=Martin Vogels Symbole, -%D author=Tobias Burnus \& Hans Hagen, -%D date=\currentdate, -%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -%D This module implements the Martin Vogel Symbole font -%D (marvosym). The names are derived from the \LATEX\ package -%D \type {marvosym} of Thomas Henlich. The symbols are -%D available as Type~1 font and are included in \TETEX\ and -%D \FPTEX\ distributions. -%D -%D This symbol font offers the signs of the zodiac, four -%D alternative the euro signs, some general office signs and -%D some more. -%D -%D The font was designed by Martin Vogel who can be reached at -%D \hyphenatedurl {martin.vogel@fh-bochum.de}. More information -%D can be found at \hyphenatedurl -%D {http://www.fh-bochum.de/fb1/vogel/marvosym.html}. The -%D conversion to Type~1 font was done by Thomas Henlich, who -%D can be reached at \hyphenatedurl -%D {thenlich@rcs.urz.tu-dresden.de}. -%D -%D This module is based on the current \CTAN\ version (as of -%D March 30, 2000) and is older than the TrueType version at -%D Martin Vogel's Homepage. The definitions in this module -%D reflect the \CTAN\ version. The font conversion was done by -%D Thomas Henlich using \type {ttf2pt1}, a program that can be -%D found at \hyphenatedurl -%D {http://www.netspace.net.au/~mheath/ttf2pt1/}. -%D -%D Using the new version of \type {marvosymb}, the MVzero will -%D has a slash and the FHBOLOGO, (wo)manface, and (wo)manfront -%D are replaced by other symbols. - -\loadmapfile[original-base.map] % \loadmapfile[original-vogel-symbol] - -\definefontsynonym [MartinVogel] [fmvr8x] - -\def\MartinVogelSymbol#1{\getglyph{MartinVogel}{\char#1}} - -% Astro signs and signs of the zodiac - -\startsymbolset [astronomic] - - \definesymbol [Sun] [\MartinVogelSymbol{192}] - \definesymbol [Moon] [\MartinVogelSymbol{193}] - \definesymbol [Mercury] [\MartinVogelSymbol{194}] - \definesymbol [Venus] [\MartinVogelSymbol{195}] - \definesymbol [Mars] [\MartinVogelSymbol{196}] - \definesymbol [Jupiter] [\MartinVogelSymbol{197}] - \definesymbol [Saturn] [\MartinVogelSymbol{198}] - \definesymbol [Uranus] [\MartinVogelSymbol{199}] - \definesymbol [Neptune] [\MartinVogelSymbol{200}] - \definesymbol [Pluto] [\MartinVogelSymbol{201}] - -\stopsymbolset - -\startsymbolset [zodiac] - - \definesymbol [Aries] [\MartinVogelSymbol{224}] - \definesymbol [Taurus] [\MartinVogelSymbol{225}] - \definesymbol [Gemini] [\MartinVogelSymbol{226}] - \definesymbol [Cancer] [\MartinVogelSymbol{227}] - \definesymbol [Leo] [\MartinVogelSymbol{228}] - \definesymbol [Virgo] [\MartinVogelSymbol{229}] - \definesymbol [Libra] [\MartinVogelSymbol{230}] - \definesymbol [Scorpio] [\MartinVogelSymbol{231}] - \definesymbol [Sagittarius] [\MartinVogelSymbol{232}] - \definesymbol [Capricorn] [\MartinVogelSymbol{233}] - \definesymbol [Aquarius] [\MartinVogelSymbol{234}] - \definesymbol [Pisces] [\MartinVogelSymbol{235}] - -\stopsymbolset - -% Euro signs and CE - -\startsymbolset [europe] - - \definesymbol [EUR] [\MartinVogelSymbol{164}] - \definesymbol [EURhv] [\MartinVogelSymbol {99}] - \definesymbol [EURcr] [\MartinVogelSymbol{100}] - \definesymbol [EURtm] [\MartinVogelSymbol{101}] - \definesymbol [CEsign] [\MartinVogelSymbol {67}] - -\stopsymbolset - -\startencoding[default] - - \definecharacter texteuro {\symbol[europe][EUR]} - -\stopencoding - -\unexpanded\def\euro{\doiftextelse{\texteuro}{\texteuro}{\symbol[europe][EUR]}} - -% Numbers 0 to 9, @, A and p - -% taco: are these more general, like also in zapf dingbats? - -\startsymbolset [martinvogel 1] - - \definesymbol [MVZero] [\MartinVogelSymbol {48}] - \definesymbol [MVOne] [\MartinVogelSymbol {49}] - \definesymbol [MVTwo] [\MartinVogelSymbol {50}] - \definesymbol [MVThree] [\MartinVogelSymbol {51}] - \definesymbol [MVFour] [\MartinVogelSymbol {52}] - \definesymbol [MVFive] [\MartinVogelSymbol {53}] - \definesymbol [MVSix] [\MartinVogelSymbol {54}] - \definesymbol [MVSeven] [\MartinVogelSymbol {55}] - \definesymbol [MVEight] [\MartinVogelSymbol {56}] - \definesymbol [MVNine] [\MartinVogelSymbol {57}] - \definesymbol [MVAt] [\MartinVogelSymbol {64}] - \definesymbol [MVA] [\MartinVogelSymbol{240}] - \definesymbol [MVp] [\MartinVogelSymbol{241}] - -\stopsymbolset - -% Office signs, crosses, circles, arrows - -\startsymbolset [martinvogel 2] - - \definesymbol [CheckedBox] [\MartinVogelSymbol {86}] - \definesymbol [CrossedBox] [\MartinVogelSymbol {88}] - \definesymbol [PointingHand] [\MartinVogelSymbol {90}] - \definesymbol [WritingHand] [\MartinVogelSymbol {98}] - \definesymbol [Heart] [\MartinVogelSymbol{140}] - \definesymbol [FlatSteel] [\MartinVogelSymbol{150}] - \definesymbol [Squarepipe] [\MartinVogelSymbol{151}] - \definesymbol [Rectpipe] [\MartinVogelSymbol{152}] - \definesymbol [Lsteel] [\MartinVogelSymbol{153}] - \definesymbol [TTsteel] [\MartinVogelSymbol{154}] - \definesymbol [Circpipe] [\MartinVogelSymbol{155}] - \definesymbol [Tsteel] [\MartinVogelSymbol{156}] - - \definesymbol [Stopsign] [\MartinVogelSymbol {33}] - \definesymbol [Beam] [\MartinVogelSymbol {34}] - \definesymbol [Bearing] [\MartinVogelSymbol {35}] - \definesymbol [Loosebearing] [\MartinVogelSymbol {36}] - \definesymbol [Fixedbearing] [\MartinVogelSymbol {37}] - \definesymbol [Lefttorque] [\MartinVogelSymbol {38}] - \definesymbol [Righttorque] [\MartinVogelSymbol {39}] - \definesymbol [Force] [\MartinVogelSymbol {40}] - \definesymbol [Lineload] [\MartinVogelSymbol {41}] - \definesymbol [Circles] [\MartinVogelSymbol {46}] - \definesymbol [Squaredot] [\MartinVogelSymbol{247}] - - \definesymbol [Correspondes] [\MartinVogelSymbol {61}] - \definesymbol [Vectorarrowhigh] [\MartinVogelSymbol {80}] - \definesymbol [Vectorarrow] [\MartinVogelSymbol{112}] - \definesymbol [Rightarrow] [\MartinVogelSymbol {62}] - \definesymbol [Lightning] [\MartinVogelSymbol {69}] - - \definesymbol [Snowflake] [\MartinVogelSymbol {42}] - \definesymbol [Kross] [\MartinVogelSymbol {43}] - \definesymbol [Cross] [\MartinVogelSymbol{134}] - \definesymbol [Celtcross] [\MartinVogelSymbol{135}] - \definesymbol [Ankh] [\MartinVogelSymbol{136}] - \definesymbol [Yingyang] [\MartinVogelSymbol {77}] - - \definesymbol [Pickup] [\MartinVogelSymbol {0}] % ? - \definesymbol [Letter] [\MartinVogelSymbol {66}] % ? - \definesymbol [Mobilephone] [\MartinVogelSymbol {72}] - \definesymbol [Telephone] [\MartinVogelSymbol {84}] - \definesymbol [fax] [\MartinVogelSymbol{116}] - \definesymbol [FAX] [\MartinVogelSymbol{117}] - \definesymbol [Faxmachine] [\MartinVogelSymbol{118}] - - \definesymbol [Clocklogo] [\MartinVogelSymbol {85}] - \definesymbol [Industry] [\MartinVogelSymbol {73}] - \definesymbol [Coffeecup] [\MartinVogelSymbol {75}] - \definesymbol [Info] [\MartinVogelSymbol{105}] - \definesymbol [Football] [\MartinVogelSymbol{111}] - \definesymbol [Frowny] [\MartinVogelSymbol{167}] - \definesymbol [Smiley] [\MartinVogelSymbol{169}] - \definesymbol [Bicycle] [\MartinVogelSymbol{174}] - - \definesymbol [Rightscissors] [\MartinVogelSymbol {81}] - \definesymbol [Leftscissors] [\MartinVogelSymbol {83}] - \definesymbol [Cutright] [\MartinVogelSymbol{113}] - \definesymbol [Cutleft] [\MartinVogelSymbol{115}] - \definesymbol [Kutline] [\MartinVogelSymbol {82}] % K ? - \definesymbol [Cutline] [\MartinVogelSymbol{114}] - -\stopsymbolset - -% FHBO (Fachhochschule Bochum), face, humans, bat - -\startsymbolset [martinvogel 3] - - \definesymbol [FHBOlogo] [\MartinVogelSymbol {70}] - \definesymbol [FHBOLOGO] [\MartinVogelSymbol{102}] - \definesymbol [Womanside] [\MartinVogelSymbol{204}] - \definesymbol [Manside] [\MartinVogelSymbol{205}] - \definesymbol [Womanfront] [\MartinVogelSymbol{206}] - \definesymbol [Manfront] [\MartinVogelSymbol{207}] - \definesymbol [Bat] [\MartinVogelSymbol{253}] - \definesymbol [Womanface] [\MartinVogelSymbol{254}] - \definesymbol [MartinVogel] [\MartinVogelSymbol{255}] - -\stopsymbolset - -%D \showsymbolset[astronomic] -%D \showsymbolset[zodiac] -%D \showsymbolset[europe] -%D \showsymbolset[martinvogel 1] -%D \showsymbolset[martinvogel 2] -%D \showsymbolset[martinvogel 3] - -\endinput diff --git a/tex/context/base/symb-nav.mkii b/tex/context/base/symb-nav.mkii new file mode 100644 index 000000000..93badbc4d --- /dev/null +++ b/tex/context/base/symb-nav.mkii @@ -0,0 +1,122 @@ +%D \module +%D [ file=symb-nav, +%D version=1998.07.20, +%D title=\CONTEXT\ Symbol Libraries, +%D subtitle=Navigational Symbols, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\unprotect + +\loadmapfile[original-base.map] % \loadmapfile [original-context-symbol.map] + +\definefontsynonym [ContextNavigation] [contnav] + +\def\ContextNavigationGlyph#1{\getglyph{ContextNavigation}{\char#1}} + +\startsymbolset [navigation 1] + + \definesymbol [\v!firstpage] [\ContextNavigationGlyph{3}] + \definesymbol [\v!previouspage] [\ContextNavigationGlyph{1}] + \definesymbol [\v!nextpage] [\ContextNavigationGlyph{2}] + \definesymbol [\v!lastpage] [\ContextNavigationGlyph{4}] + + \definesymbol [\v!PreviousJump] [\ContextNavigationGlyph{5}] + \definesymbol [\v!NextJump] [\ContextNavigationGlyph{6}] + + \definesymbol [\v!CloseDocument] [\ContextNavigationGlyph{7}] + + \definesymbol [\v!firstsubpage] [\ContextNavigationGlyph{3}] + \definesymbol [\v!previoussubpage] [\ContextNavigationGlyph{1}] + \definesymbol [\v!nextsubpage] [\ContextNavigationGlyph{2}] + \definesymbol [\v!lastsubpage] [\ContextNavigationGlyph{4}] + + \definesymbol [\v!StartSound] [\ContextNavigationGlyph{2}] + \definesymbol [\v!PauseSound] [\ContextNavigationGlyph{8}] + \definesymbol [\v!StopSound] [\ContextNavigationGlyph{7}] + + \definesymbol [\v!StartMovie] [\ContextNavigationGlyph{2}] + \definesymbol [\v!PauseMovie] [\ContextNavigationGlyph{8}] + \definesymbol [\v!StopMovie] [\ContextNavigationGlyph{7}] + + \definesymbol [\v!StartRendering] [\ContextNavigationGlyph{2}] + \definesymbol [\v!PauseRendering] [\ContextNavigationGlyph{8}] + \definesymbol [\v!StopRendering] [\ContextNavigationGlyph{7}] + \definesymbol [\v!ResumeRendering] [\ContextNavigationGlyph{2}] + +\stopsymbolset + +\startsymbolset [navigation 2] + + \definesymbol [\v!firstpage] [\ContextNavigationGlyph{103}] + \definesymbol [\v!previouspage] [\ContextNavigationGlyph{101}] + \definesymbol [\v!nextpage] [\ContextNavigationGlyph{102}] + \definesymbol [\v!lastpage] [\ContextNavigationGlyph{104}] + + \definesymbol [\v!PreviousJump] [\ContextNavigationGlyph{105}] + \definesymbol [\v!NextJump] [\ContextNavigationGlyph{106}] + + \definesymbol [\v!CloseDocument] [\ContextNavigationGlyph{107}] + + \definesymbol [\v!firstsubpage] [\ContextNavigationGlyph{103}] + \definesymbol [\v!previoussubpage] [\ContextNavigationGlyph{101}] + \definesymbol [\v!nextsubpage] [\ContextNavigationGlyph{102}] + \definesymbol [\v!lastsubpage] [\ContextNavigationGlyph{104}] + + \definesymbol [\v!StartSound] [\ContextNavigationGlyph{102}] + \definesymbol [\v!PauseSound] [\ContextNavigationGlyph{108}] + \definesymbol [\v!StopSound] [\ContextNavigationGlyph{107}] + + \definesymbol [\v!StartMovie] [\ContextNavigationGlyph{102}] + \definesymbol [\v!PauseMovie] [\ContextNavigationGlyph{108}] + \definesymbol [\v!StopMovie] [\ContextNavigationGlyph{107}] + + \definesymbol [\v!StartRendering] [\ContextNavigationGlyph{102}] + \definesymbol [\v!PauseRendering] [\ContextNavigationGlyph{108}] + \definesymbol [\v!StopRendering] [\ContextNavigationGlyph{107}] + \definesymbol [\v!ResumeRendering] [\ContextNavigationGlyph{102}] + +\stopsymbolset + +\startsymbolset [navigation 3] + + \definesymbol [\v!firstpage] [\ContextNavigationGlyph{203}] + \definesymbol [\v!previouspage] [\ContextNavigationGlyph{201}] + \definesymbol [\v!nextpage] [\ContextNavigationGlyph{202}] + \definesymbol [\v!lastpage] [\ContextNavigationGlyph{204}] + + \definesymbol [\v!PreviousJump] [\ContextNavigationGlyph{205}] + \definesymbol [\v!NextJump] [\ContextNavigationGlyph{206}] + + \definesymbol [\v!CloseDocument] [\ContextNavigationGlyph{207}] + + \definesymbol [\v!firstsubpage] [\ContextNavigationGlyph{203}] + \definesymbol [\v!previoussubpage] [\ContextNavigationGlyph{201}] + \definesymbol [\v!nextsubpage] [\ContextNavigationGlyph{202}] + \definesymbol [\v!lastsubpage] [\ContextNavigationGlyph{204}] + + \definesymbol [\v!StartSound] [\ContextNavigationGlyph{202}] + \definesymbol [\v!PauseSound] [\ContextNavigationGlyph{208}] + \definesymbol [\v!StopSound] [\ContextNavigationGlyph{207}] + + \definesymbol [\v!StartMovie] [\ContextNavigationGlyph{202}] + \definesymbol [\v!PauseMovie] [\ContextNavigationGlyph{208}] + \definesymbol [\v!StopMovie] [\ContextNavigationGlyph{207}] + + \definesymbol [\v!StartRendering] [\ContextNavigationGlyph{202}] + \definesymbol [\v!PauseRendering] [\ContextNavigationGlyph{208}] + \definesymbol [\v!StopRendering] [\ContextNavigationGlyph{207}] + \definesymbol [\v!ResumeRendering] [\ContextNavigationGlyph{202}] + +\stopsymbolset + +%D \showsymbolset[navigation 1] +%D \showsymbolset[navigation 2] +%D \showsymbolset[navigation 3] + +\protect \endinput diff --git a/tex/context/base/symb-nav.mkiv b/tex/context/base/symb-nav.mkiv new file mode 100644 index 000000000..0f5fd289f --- /dev/null +++ b/tex/context/base/symb-nav.mkiv @@ -0,0 +1,129 @@ +%D \module +%D [ file=symb-nav, +%D version=1998.07.20, +%D title=\CONTEXT\ Symbol Libraries, +%D subtitle=Navigational Symbols, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\unprotect + +\definesymbol [\v!first] [\symbol{\v!firstpage}] +\definesymbol [\v!previous] [\symbol{\v!previouspage}] +\definesymbol [\v!next] [\symbol{\v!nextpage}] +\definesymbol [\v!last] [\symbol{\v!lastpage}] +\definesymbol [\v!backward] [\symbol{\v!previouspage}] +\definesymbol [\v!forward] [\symbol{\v!nextpage}] +\definesymbol [\v!nowhere] [\symbol{bullet}] +\definesymbol [\v!somewhere] [\startoverlay{\symbol\v!previouspage}{\symbol\v!nextpage}\stopoverlay] + +\definefontsynonym [ContextNavigation] [contnav] + +\def\ContextNavigationGlyph{\getnamedglyphdirect{ContextNavigation}} % #1 + +\startsymbolset [navigation 1] + + \definesymbol [\v!firstpage] [\ContextNavigationGlyph{char03}] + \definesymbol [\v!previouspage] [\ContextNavigationGlyph{char01}] + \definesymbol [\v!nextpage] [\ContextNavigationGlyph{char02}] + \definesymbol [\v!lastpage] [\ContextNavigationGlyph{char04}] + + \definesymbol [\v!PreviousJump] [\ContextNavigationGlyph{char05}] + \definesymbol [\v!NextJump] [\ContextNavigationGlyph{char06}] + + \definesymbol [\v!CloseDocument] [\ContextNavigationGlyph{char07}] + + \definesymbol [\v!firstsubpage] [\ContextNavigationGlyph{char03}] + \definesymbol [\v!previoussubpage] [\ContextNavigationGlyph{char01}] + \definesymbol [\v!nextsubpage] [\ContextNavigationGlyph{char02}] + \definesymbol [\v!lastsubpage] [\ContextNavigationGlyph{char04}] + + \definesymbol [\v!StartSound] [\ContextNavigationGlyph{char02}] + \definesymbol [\v!PauseSound] [\ContextNavigationGlyph{char08}] + \definesymbol [\v!StopSound] [\ContextNavigationGlyph{char07}] + + \definesymbol [\v!StartMovie] [\ContextNavigationGlyph{char02}] + \definesymbol [\v!PauseMovie] [\ContextNavigationGlyph{char08}] + \definesymbol [\v!StopMovie] [\ContextNavigationGlyph{char07}] + + \definesymbol [\v!StartRendering] [\ContextNavigationGlyph{char02}] + \definesymbol [\v!PauseRendering] [\ContextNavigationGlyph{char08}] + \definesymbol [\v!StopRendering] [\ContextNavigationGlyph{char07}] + \definesymbol [\v!ResumeRendering] [\ContextNavigationGlyph{char02}] + +\stopsymbolset + +\startsymbolset [navigation 2] + + \definesymbol [\v!firstpage] [\ContextNavigationGlyph{char67}] + \definesymbol [\v!previouspage] [\ContextNavigationGlyph{char65}] + \definesymbol [\v!nextpage] [\ContextNavigationGlyph{char66}] + \definesymbol [\v!lastpage] [\ContextNavigationGlyph{char68}] + + \definesymbol [\v!PreviousJump] [\ContextNavigationGlyph{char69}] + \definesymbol [\v!NextJump] [\ContextNavigationGlyph{char6a}] + + \definesymbol [\v!CloseDocument] [\ContextNavigationGlyph{char6b}] + + \definesymbol [\v!firstsubpage] [\ContextNavigationGlyph{char67}] + \definesymbol [\v!previoussubpage] [\ContextNavigationGlyph{char65}] + \definesymbol [\v!nextsubpage] [\ContextNavigationGlyph{char66}] + \definesymbol [\v!lastsubpage] [\ContextNavigationGlyph{char68}] + + \definesymbol [\v!StartSound] [\ContextNavigationGlyph{char66}] + \definesymbol [\v!PauseSound] [\ContextNavigationGlyph{char6c}] + \definesymbol [\v!StopSound] [\ContextNavigationGlyph{char6b}] + + \definesymbol [\v!StartMovie] [\ContextNavigationGlyph{char66}] + \definesymbol [\v!PauseMovie] [\ContextNavigationGlyph{char6c}] + \definesymbol [\v!StopMovie] [\ContextNavigationGlyph{char6b}] + + \definesymbol [\v!StartRendering] [\ContextNavigationGlyph{char66}] + \definesymbol [\v!PauseRendering] [\ContextNavigationGlyph{char6c}] + \definesymbol [\v!StopRendering] [\ContextNavigationGlyph{char6b}] + \definesymbol [\v!ResumeRendering] [\ContextNavigationGlyph{char66}] + +\stopsymbolset + +\startsymbolset [navigation 3] + + \definesymbol [\v!firstpage] [\ContextNavigationGlyph{charcb}] + \definesymbol [\v!previouspage] [\ContextNavigationGlyph{charc9}] + \definesymbol [\v!nextpage] [\ContextNavigationGlyph{charca}] + \definesymbol [\v!lastpage] [\ContextNavigationGlyph{charcc}] + + \definesymbol [\v!PreviousJump] [\ContextNavigationGlyph{charcd}] + \definesymbol [\v!NextJump] [\ContextNavigationGlyph{charce}] + + \definesymbol [\v!CloseDocument] [\ContextNavigationGlyph{charcf}] + + \definesymbol [\v!firstsubpage] [\ContextNavigationGlyph{charcb}] + \definesymbol [\v!previoussubpage] [\ContextNavigationGlyph{charc9}] + \definesymbol [\v!nextsubpage] [\ContextNavigationGlyph{charca}] + \definesymbol [\v!lastsubpage] [\ContextNavigationGlyph{charcc}] + + \definesymbol [\v!StartSound] [\ContextNavigationGlyph{charca}] + \definesymbol [\v!PauseSound] [\ContextNavigationGlyph{chard0}] + \definesymbol [\v!StopSound] [\ContextNavigationGlyph{charcf}] + + \definesymbol [\v!StartMovie] [\ContextNavigationGlyph{charca}] + \definesymbol [\v!PauseMovie] [\ContextNavigationGlyph{chard0}] + \definesymbol [\v!StopMovie] [\ContextNavigationGlyph{charcf}] + + \definesymbol [\v!StartRendering] [\ContextNavigationGlyph{charca}] + \definesymbol [\v!PauseRendering] [\ContextNavigationGlyph{chard0}] + \definesymbol [\v!StopRendering] [\ContextNavigationGlyph{charcf}] + \definesymbol [\v!ResumeRendering] [\ContextNavigationGlyph{charca}] + +\stopsymbolset + +%D \showsymbolset[navigation 1] +%D \showsymbolset[navigation 2] +%D \showsymbolset[navigation 3] + +\protect \endinput diff --git a/tex/context/base/symb-nav.tex b/tex/context/base/symb-nav.tex deleted file mode 100644 index 90a798e01..000000000 --- a/tex/context/base/symb-nav.tex +++ /dev/null @@ -1,126 +0,0 @@ -%D \module -%D [ file=symb-nav, -%D version=1998.07.20, -%D title=\CONTEXT\ Symbol Libraries, -%D subtitle=Navigational Symbols, -%D author=Hans Hagen, -%D date=\currentdate, -%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -\unprotect - -\loadmapfile[original-base.map] % \loadmapfile [original-context-symbol.map] - -\ifnum\texengine=\luatexengine - \definefontsynonym [ContextNavigation] [contnav.tfm] -\else - \definefontsynonym [ContextNavigation] [contnav] -\fi - -\def\ContextNavigationGlyph#1{\getglyph{ContextNavigation}{\char#1}} - -\startsymbolset [navigation 1] - - \definesymbol [\v!firstpage] [\ContextNavigationGlyph{3}] - \definesymbol [\v!previouspage] [\ContextNavigationGlyph{1}] - \definesymbol [\v!nextpage] [\ContextNavigationGlyph{2}] - \definesymbol [\v!lastpage] [\ContextNavigationGlyph{4}] - - \definesymbol [\v!PreviousJump] [\ContextNavigationGlyph{5}] - \definesymbol [\v!NextJump] [\ContextNavigationGlyph{6}] - - \definesymbol [\v!CloseDocument] [\ContextNavigationGlyph{7}] - - \definesymbol [\v!firstsubpage] [\ContextNavigationGlyph{3}] - \definesymbol [\v!previoussubpage] [\ContextNavigationGlyph{1}] - \definesymbol [\v!nextsubpage] [\ContextNavigationGlyph{2}] - \definesymbol [\v!lastsubpage] [\ContextNavigationGlyph{4}] - - \definesymbol [\v!StartSound] [\ContextNavigationGlyph{2}] - \definesymbol [\v!PauseSound] [\ContextNavigationGlyph{8}] - \definesymbol [\v!StopSound] [\ContextNavigationGlyph{7}] - - \definesymbol [\v!StartMovie] [\ContextNavigationGlyph{2}] - \definesymbol [\v!PauseMovie] [\ContextNavigationGlyph{8}] - \definesymbol [\v!StopMovie] [\ContextNavigationGlyph{7}] - - \definesymbol [\v!StartRendering] [\ContextNavigationGlyph{2}] - \definesymbol [\v!PauseRendering] [\ContextNavigationGlyph{8}] - \definesymbol [\v!StopRendering] [\ContextNavigationGlyph{7}] - \definesymbol [\v!ResumeRendering] [\ContextNavigationGlyph{2}] - -\stopsymbolset - -\startsymbolset [navigation 2] - - \definesymbol [\v!firstpage] [\ContextNavigationGlyph{103}] - \definesymbol [\v!previouspage] [\ContextNavigationGlyph{101}] - \definesymbol [\v!nextpage] [\ContextNavigationGlyph{102}] - \definesymbol [\v!lastpage] [\ContextNavigationGlyph{104}] - - \definesymbol [\v!PreviousJump] [\ContextNavigationGlyph{105}] - \definesymbol [\v!NextJump] [\ContextNavigationGlyph{106}] - - \definesymbol [\v!CloseDocument] [\ContextNavigationGlyph{107}] - - \definesymbol [\v!firstsubpage] [\ContextNavigationGlyph{103}] - \definesymbol [\v!previoussubpage] [\ContextNavigationGlyph{101}] - \definesymbol [\v!nextsubpage] [\ContextNavigationGlyph{102}] - \definesymbol [\v!lastsubpage] [\ContextNavigationGlyph{104}] - - \definesymbol [\v!StartSound] [\ContextNavigationGlyph{102}] - \definesymbol [\v!PauseSound] [\ContextNavigationGlyph{108}] - \definesymbol [\v!StopSound] [\ContextNavigationGlyph{107}] - - \definesymbol [\v!StartMovie] [\ContextNavigationGlyph{102}] - \definesymbol [\v!PauseMovie] [\ContextNavigationGlyph{108}] - \definesymbol [\v!StopMovie] [\ContextNavigationGlyph{107}] - - \definesymbol [\v!StartRendering] [\ContextNavigationGlyph{102}] - \definesymbol [\v!PauseRendering] [\ContextNavigationGlyph{108}] - \definesymbol [\v!StopRendering] [\ContextNavigationGlyph{107}] - \definesymbol [\v!ResumeRendering] [\ContextNavigationGlyph{102}] - -\stopsymbolset - -\startsymbolset [navigation 3] - - \definesymbol [\v!firstpage] [\ContextNavigationGlyph{203}] - \definesymbol [\v!previouspage] [\ContextNavigationGlyph{201}] - \definesymbol [\v!nextpage] [\ContextNavigationGlyph{202}] - \definesymbol [\v!lastpage] [\ContextNavigationGlyph{204}] - - \definesymbol [\v!PreviousJump] [\ContextNavigationGlyph{205}] - \definesymbol [\v!NextJump] [\ContextNavigationGlyph{206}] - - \definesymbol [\v!CloseDocument] [\ContextNavigationGlyph{207}] - - \definesymbol [\v!firstsubpage] [\ContextNavigationGlyph{203}] - \definesymbol [\v!previoussubpage] [\ContextNavigationGlyph{201}] - \definesymbol [\v!nextsubpage] [\ContextNavigationGlyph{202}] - \definesymbol [\v!lastsubpage] [\ContextNavigationGlyph{204}] - - \definesymbol [\v!StartSound] [\ContextNavigationGlyph{202}] - \definesymbol [\v!PauseSound] [\ContextNavigationGlyph{208}] - \definesymbol [\v!StopSound] [\ContextNavigationGlyph{207}] - - \definesymbol [\v!StartMovie] [\ContextNavigationGlyph{202}] - \definesymbol [\v!PauseMovie] [\ContextNavigationGlyph{208}] - \definesymbol [\v!StopMovie] [\ContextNavigationGlyph{207}] - - \definesymbol [\v!StartRendering] [\ContextNavigationGlyph{202}] - \definesymbol [\v!PauseRendering] [\ContextNavigationGlyph{208}] - \definesymbol [\v!StopRendering] [\ContextNavigationGlyph{207}] - \definesymbol [\v!ResumeRendering] [\ContextNavigationGlyph{202}] - -\stopsymbolset - -%D \showsymbolset[navigation 1] -%D \showsymbolset[navigation 2] -%D \showsymbolset[navigation 3] - -\protect \endinput diff --git a/tex/context/base/symb-run.mkiv b/tex/context/base/symb-run.mkiv index 4e714832c..8efb5e63d 100644 --- a/tex/context/base/symb-run.mkiv +++ b/tex/context/base/symb-run.mkiv @@ -1,54 +1,53 @@ %D \module -%D [ file=symb-run, % code moved from symb-ini -%D version=1998.07.20, +%D [ file=symb-run, +%D version=2010.12.08, % 1998.07.20, %D title=\CONTEXT\ Symbol Libraries, %D subtitle=Runtime Macros, %D author=Hans Hagen, %D date=\currentdate, -%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%D copyright=PRAGMA] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. +\startluacode + function commands.showsymbolset(collection,symbols) + if type(symbols) == "string" then + symbols = utilities.parsers.settings_to_array(symbols) + end + context.start() + context.forcesymbolset { collection } + context.starttabulate { "|lT|l|l|" } + for i=1,#symbols do + local symbol = symbols[i] + context.NC() + context(symbol) + context.NC() + context.symbol(symbol) + context.NC() + context.color ( + { "red" }, + context.nested.ruledhbox( + context.nested.color ( + { "black" }, + context.nested.symbol(symbol) + ) + ) + ) + context.NR() + end + context.stoptabulate() + context.stop() + end +\stopluacode + \unprotect -\gdef\doshowsymbolset[#1][#2]% todo: make nicer, use legend or so - {\vbox\bgroup - \blank - \getparameters[\??ss][\c!n=5,#2]% - \forcesymbolset[#1]% - \doifsymbolsetelse{#1} - {\global\let\allfigures\empty - \doglobal\newcounter\figurecounter - \setupcolors[\c!state=\v!start]% to prevent mps color conversion - \dontcomplain - \def\doshowsymbols% global needed due to grouping in alignment - {\expanded{\globalprocesscommalist[\symbolset{#1}]}\docommand}% - \def\docommand##1% - {\vbox - {\forgetall - \tttf - \halign - {\hss\quad####\strut\quad\hss\cr - \symbol[##1]\quad{\red\ruledhbox{\black\symbol[##1]}}\cr - \tfx##1\cr}}% - \doglobal\increment\figurecounter - \ifnum\figurecounter=\@@ssn - \doglobal\newcounter\figurecounter - \def\next{\crcr\noalign{\vskip1ex}}% - \else - \def\next{&}% - \fi - \next}% - \tabskip\zeropoint \!!plus 1fill - \halign to \hsize - {&\hss##\hss\cr\doshowsymbols\crcr}}% - {}% - \blank - \egroup} +\gdef\doshowsymbolset[#1]% + {\ctxlua{commands.showsymbolset("#1","\symbolset{#1}")}} \gdef\showsymbolset - {\dodoubleempty\doshowsymbolset} + {\dosingleargument\doshowsymbolset} \protect \endinput diff --git a/tex/context/base/symb-uni.mkii b/tex/context/base/symb-uni.mkii new file mode 100644 index 000000000..fcd613e7f --- /dev/null +++ b/tex/context/base/symb-uni.mkii @@ -0,0 +1,1123 @@ +%D \module +%D [ file=symb-uni, +%D version=2004.11.15, +%D title=\CONTEXT\ Symbol Libraries, +%D subtitle=Unicode Symbols, +%D author=Adam T. Lindsay, +%D date=\currentdate, +%D copyright={Adam T. Lindsay / PRAGMA}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C prepared by Adam T. Lindsay. + +%D The content of this file originates from the Unicode standard, via some +%D original XSLT scripts and some hand-editing. This file is open for use +%D with the ConTeXt typesetting system. +%D +%D Adam considers the symbol names and categories to be stable, as they're +%D directly derived from the Unicode standard. +%D +%D \startitemize[packed] +%D \item Originated 2004-01-05 by Adam T. Lindsay +%D \item Updated 2004-01-16 with Unicode vector 0x27xx and some in +%D 215x and 246x +%D \item Updated 2004-11-15 to include default fonts for MacOSX and +%D \XETEX. +%D \stopitemize +%D +%D The following macros adapt to default fonts (that contain the characters) +%D in MacOSX. The font selection mechanism is likely to change once \XETEX\ +%D correctly supports \type{\doiffontcharelse}. + +\doifundefinedelse{XeTeXversion} + {\let\USymbChar \uchar + \let\USymbCharTwo \uchar + \let\USymbCharZapf\uchar} + {\def\USymbChar #1#2{\bgroup\UnicodeSymbolFont \uchar{#1}{#2}\relax\egroup} + \def\USymbCharTwo #1#2{\bgroup\UnicodeSymbolFontTwo \uchar{#1}{#2}\relax\egroup} + \def\USymbCharZapf#1#2{\bgroup\UnicodeSymbolFontZapf\uchar{#1}{#2}\relax\egroup} + \doifundefined{UnicodeSymbolFont} {\definefont[UnicodeSymbolFont] ["Apple Symbols" sa *]} + \doifundefined{UnicodeSymbolFontTwo} {\definefont[UnicodeSymbolFontTwo] ["Lucida Grande" sa *]} + \doifundefined{UnicodeSymbolFontZapf}{\definefont[UnicodeSymbolFontZapf]["Zapf Dingbats" sa *]}} + +\startsymbolset[Unicode Additional Punctuation] % 0x2000: Requires UnicodeRegular20 + + \definesymbol[Caret][\USymbChar{32}{56}] % CARET + \definesymbol[ReferenceMark][\USymbChar{32}{59}] % REFERENCE MARK + \definesymbol[DoubleExclamationMark][\USymbChar{32}{60}] % DOUBLE EXCLAMATION MARK + \definesymbol[Interrobang][\USymbChar{32}{61}] % INTERROBANG + \definesymbol[Overline][\USymbChar{32}{62}] % OVERLINE + \definesymbol[Undertie][\USymbChar{32}{63}] % UNDERTIE + \definesymbol[CharacterTie][\USymbChar{32}{64}] % CHARACTER TIE + \definesymbol[CaretInsertionPoint][\USymbChar{32}{65}] % CARET INSERTION POINT + \definesymbol[Asterism][\USymbChar{32}{66}] % ASTERISM + \definesymbol[HyphenBullet][\USymbChar{32}{67}] % HYPHEN BULLET + \definesymbol[FractionSlash][\USymbChar{32}{68}] % FRACTION SLASH + \definesymbol[LeftSquareBracketWithQuill][\USymbChar{32}{69}] % LEFT SQUARE BRACKET WITH QUILL + \definesymbol[RightSquareBracketWithQuill][\USymbChar{32}{70}] % RIGHT SQUARE BRACKET WITH QUILL + \definesymbol[QuestionExclamationMark][\USymbChar{32}{72}] % QUESTION EXCLAMATION MARK + \definesymbol[ExclamationQuestionMark][\USymbChar{32}{73}] % EXCLAMATION QUESTION MARK + \definesymbol[TironianSignEt][\USymbChar{32}{74}] % TIRONIAN SIGN ET + \definesymbol[ReversedPilcrowSign][\USymbChar{32}{75}] % REVERSED PILCROW SIGN + \definesymbol[BlackLeftwardsBullet][\USymbChar{32}{76}] % BLACK LEFTWARDS BULLET + \definesymbol[BlackRightwardsBullet][\USymbChar{32}{77}] % BLACK RIGHTWARDS BULLET + +\stopsymbolset + +\startsymbolset[Unicode Currency] % 0x20A0: Requires UnicodeRegular20 + + \definesymbol[Euro-currencySign][\USymbChar{32}{160}] % EURO-CURRENCY SIGN + \definesymbol[ColonSign][\USymbChar{32}{161}] % COLON SIGN + \definesymbol[CruzeiroSign][\USymbChar{32}{162}] % CRUZEIRO SIGN + \definesymbol[FrenchFrancSign][\USymbChar{32}{163}] % FRENCH FRANC SIGN + \definesymbol[LiraSign][\USymbChar{32}{164}] % LIRA SIGN + \definesymbol[MillSign][\USymbChar{32}{165}] % MILL SIGN + \definesymbol[NairaSign][\USymbChar{32}{166}] % NAIRA SIGN + \definesymbol[PesetaSign][\USymbChar{32}{167}] % PESETA SIGN + \definesymbol[RupeeSign][\USymbChar{32}{168}] % RUPEE SIGN + \definesymbol[WonSign][\USymbChar{32}{169}] % WON SIGN + \definesymbol[NewSheqelSign][\USymbChar{32}{170}] % NEW SHEQEL SIGN + \definesymbol[DongSign][\USymbChar{32}{171}] % DONG SIGN + \definesymbol[EuroSign][\USymbChar{32}{172}] % EURO SIGN + \definesymbol[KipSign][\USymbChar{32}{173}] % KIP SIGN + \definesymbol[TugrikSign][\USymbChar{32}{174}] % TUGRIK SIGN + \definesymbol[DrachmaSign][\USymbChar{32}{175}] % DRACHMA SIGN + \definesymbol[GermanPennySign][\USymbChar{32}{176}] % [Unassigned U+20B0] + \definesymbol[PfennigSign][\USymbChar{32}{176}] % Unofficial duplicate + \definesymbol[PesoSign][\USymbChar{32}{177}] % [Unassigned U+20B1] + +\stopsymbolset + + +\startsymbolset[Unicode Letterlike] % 0x2100: Requires UnicodeRegular21 + + \definesymbol[DegreeCelsius][\USymbChar{33}{3}] % DEGREE CELSIUS + \definesymbol[EulerConstant][\USymbChar{33}{7}] % EULER CONSTANT + \definesymbol[Scruple][\USymbChar{33}{8}] % SCRUPLE + \definesymbol[DegreeFahrenheit][\USymbChar{33}{9}] % DEGREE FAHRENHEIT + \definesymbol[PlanckConstant][\USymbChar{33}{14}] % PLANCK CONSTANT + \definesymbol[PlanckConstantOverTwoPi][\USymbChar{33}{15}] % PLANCK CONSTANT OVER TWO PI + \definesymbol[LBBarSymbol][\USymbChar{33}{20}] % L B BAR SYMBOL + \definesymbol[Versicle][\USymbChar{33}{35}] % VERSICLE + \definesymbol[OunceSign][\USymbChar{33}{37}] % OUNCE SIGN + \definesymbol[OhmSign][\USymbChar{33}{38}] % OHM SIGN + \definesymbol[InvertedOhmSign][\USymbChar{33}{39}] % INVERTED OHM SIGN + \definesymbol[KelvinSign][\USymbChar{33}{42}] % KELVIN SIGN + \definesymbol[AngstromSign][\USymbChar{33}{43}] % ANGSTROM SIGN + \definesymbol[EstimatedSymbol][\USymbChar{33}{46}] % ESTIMATED SYMBOL + +\stopsymbolset + +\startsymbolset[Unicode Letterlike Additional] % 0x2100: Requires UnicodeRegular21 + + \definesymbol[AccountOf][\USymbChar{33}{0}] % ACCOUNT OF + \definesymbol[AddressedToTheSubject][\USymbChar{33}{1}] % ADDRESSED TO THE SUBJECT + \definesymbol[CareOf][\USymbChar{33}{5}] % CARE OF + \definesymbol[CadaUna][\USymbChar{33}{6}] % CADA UNA + \definesymbol[CentreLineSymbol][\USymbChar{33}{4}] % CENTRE LINE SYMBOL + \definesymbol[NumeroSign][\USymbChar{33}{22}] % NUMERO SIGN + \definesymbol[SoundRecordingCopyright][\USymbChar{33}{23}] % SOUND RECORDING COPYRIGHT + \definesymbol[PrescriptionTake][\USymbChar{33}{30}] % PRESCRIPTION TAKE + \definesymbol[Response][\USymbChar{33}{31}] % RESPONSE + \definesymbol[ServiceMark][\USymbChar{33}{32}] % SERVICE MARK + \definesymbol[TelephoneSign][\USymbChar{33}{33}] % TELEPHONE SIGN + \definesymbol[TradeMarkSign][\USymbChar{33}{34}] % TRADE MARK SIGN + \definesymbol[InformationSource][\USymbChar{33}{57}] % INFORMATION SOURCE + \definesymbol[PropertyLine][\USymbChar{33}{74}] % [Unassigned U+214A] + +\stopsymbolset + +\startsymbolset[Unicode Script Letterlike] % 0x2100: Requires UnicodeRegular21 + + \definesymbol[ScriptSmallG][\USymbChar{33}{10}] % SCRIPT SMALL G + \definesymbol[ScriptCapitalH][\USymbChar{33}{11}] % SCRIPT CAPITAL H + \definesymbol[ScriptCapitalI][\USymbChar{33}{16}] % SCRIPT CAPITAL I + \definesymbol[ScriptCapitalL][\USymbChar{33}{18}] % SCRIPT CAPITAL L + \definesymbol[ScriptSmallL][\USymbChar{33}{19}] % SCRIPT SMALL L + \definesymbol[ScriptCapitalP][\USymbChar{33}{24}] % SCRIPT CAPITAL P + \definesymbol[ScriptCapitalR][\USymbChar{33}{27}] % SCRIPT CAPITAL R + \definesymbol[ScriptSmallE][\USymbChar{33}{47}] % SCRIPT SMALL E + \definesymbol[ScriptCapitalE][\USymbChar{33}{48}] % SCRIPT CAPITAL E + \definesymbol[ScriptCapitalF][\USymbChar{33}{49}] % SCRIPT CAPITAL F + \definesymbol[ScriptCapitalB][\USymbChar{33}{44}] % SCRIPT CAPITAL B + \definesymbol[ScriptCapitalM][\USymbChar{33}{51}] % SCRIPT CAPITAL M + \definesymbol[ScriptSmallO][\USymbChar{33}{52}] % SCRIPT SMALL O + +\stopsymbolset + +\startsymbolset[Unicode Hebrew Letterlike] % 0x2100: Requires UnicodeRegular21 + + \definesymbol[AlefSymbol][\USymbChar{33}{53}] % ALEF SYMBOL + \definesymbol[BetSymbol][\USymbChar{33}{54}] % BET SYMBOL + \definesymbol[GimelSymbol][\USymbChar{33}{55}] % GIMEL SYMBOL + \definesymbol[DaletSymbol][\USymbChar{33}{56}] % DALET SYMBOL + +\stopsymbolset + +\startsymbolset[Unicode Turned Letterlike] % 0x2100: Requires UnicodeRegular21 + + \definesymbol[RotatedCapitalQ][\USymbChar{33}{58}] % ROTATED CAPITAL Q + \definesymbol[TurnedSansSerifCapitalG][\USymbChar{33}{65}] % [Unassigned U+2141] + \definesymbol[TurnedSansSerifCapitalL][\USymbChar{33}{66}] % [Unassigned U+2142] + \definesymbol[ReversedSansSerifCapitalL][\USymbChar{33}{67}] % [Unassigned U+2143] + \definesymbol[TurnedSansSerifCapitalY][\USymbChar{33}{68}] % [Unassigned U+2144] + \definesymbol[TurnedAmpersand][\USymbChar{33}{75}] % [Unassigned U+214B] + \definesymbol[TurnedGreekSmallLetterIota][\USymbChar{33}{41}] % TURNED GREEK SMALL LETTER IOTA + \definesymbol[TurnedCapitalF][\USymbChar{33}{50}] % TURNED CAPITAL F + +\stopsymbolset + +\startsymbolset[Unicode Black-letter Letterlike] % 0x2100: Requires UnicodeRegular21 + + \definesymbol[BlackLetterCapitalH][\USymbChar{33}{12}] % BLACK-LETTER CAPITAL H + \definesymbol[BlackLetterCapitalI][\USymbChar{33}{17}] % BLACK-LETTER CAPITAL I + \definesymbol[BlackLetterCapitalR][\USymbChar{33}{28}] % BLACK-LETTER CAPITAL R + \definesymbol[BlackLetterCapitalZ][\USymbChar{33}{40}] % BLACK-LETTER CAPITAL Z + \definesymbol[BlackLetterCapitalC][\USymbChar{33}{45}] % BLACK-LETTER CAPITAL C + +\stopsymbolset + +\startsymbolset[Unicode Double-struck Letterlike Math] % 0x2100: Requires UnicodeRegular21 + + \definesymbol[DoubleStruckCapitalC][\USymbChar{33}{2}] % DOUBLE-STRUCK CAPITAL C + \definesymbol[DoubleStruckCapitalH][\USymbChar{33}{13}] % DOUBLE-STRUCK CAPITAL H + \definesymbol[DoubleStruckCapitalN][\USymbChar{33}{21}] % DOUBLE-STRUCK CAPITAL N + \definesymbol[DoubleStruckCapitalP][\USymbChar{33}{25}] % DOUBLE-STRUCK CAPITAL P + \definesymbol[DoubleStruckCapitalQ][\USymbChar{33}{26}] % DOUBLE-STRUCK CAPITAL Q + \definesymbol[DoubleStruckCapitalR][\USymbChar{33}{29}] % DOUBLE-STRUCK CAPITAL R + \definesymbol[DoubleStruckCapitalZ][\USymbChar{33}{36}] % DOUBLE-STRUCK CAPITAL Z + \definesymbol[DoubleStruckSmallGamma][\USymbChar{33}{61}] % [Unassigned U+213D] + \definesymbol[DoubleStruckCapitalGamma][\USymbChar{33}{62}] % [Unassigned U+213E] + \definesymbol[DoubleStruckCapitalPi][\USymbChar{33}{63}] % [Unassigned U+213F] + \definesymbol[DoubleStruckNArySummation][\USymbChar{33}{64}] % [Unassigned U+2140] + \definesymbol[DoubleStruckItalicCapitalD][\USymbChar{33}{69}] % [Unassigned U+2145] + \definesymbol[DoubleStruckItalicSmallD][\USymbChar{33}{70}] % [Unassigned U+2146] + \definesymbol[DoubleStruckItalicSmallE][\USymbChar{33}{71}] % [Unassigned U+2147] + \definesymbol[DoubleStruckItalicSmallI][\USymbChar{33}{72}] % [Unassigned U+2148] + \definesymbol[DoubleStruckItalicSmallJ][\USymbChar{33}{73}] % [Unassigned U+2149] + +\stopsymbolset + +\startsymbolset[Unicode Roman Numerals] % 0x2150: Requires UnicodeRegular21 + + \definesymbol[RomanNumeralOne][\USymbCharTwo{33}{96}] % ROMAN NUMERAL ONE + \definesymbol[RomanNumeralTwo][\USymbCharTwo{33}{97}] % ROMAN NUMERAL TWO + \definesymbol[RomanNumeralThree][\USymbCharTwo{33}{98}] % ROMAN NUMERAL THREE + \definesymbol[RomanNumeralFour][\USymbCharTwo{33}{99}] % ROMAN NUMERAL FOUR + \definesymbol[RomanNumeralFive][\USymbCharTwo{33}{100}] % ROMAN NUMERAL FIVE + \definesymbol[RomanNumeralSix][\USymbCharTwo{33}{101}] % ROMAN NUMERAL SIX + \definesymbol[RomanNumeralSeven][\USymbCharTwo{33}{102}] % ROMAN NUMERAL SEVEN + \definesymbol[RomanNumeralEight][\USymbCharTwo{33}{103}] % ROMAN NUMERAL EIGHT + \definesymbol[RomanNumeralNine][\USymbCharTwo{33}{104}] % ROMAN NUMERAL NINE + \definesymbol[RomanNumeralTen][\USymbCharTwo{33}{105}] % ROMAN NUMERAL TEN + \definesymbol[RomanNumeralEleven][\USymbCharTwo{33}{106}] % ROMAN NUMERAL ELEVEN + \definesymbol[RomanNumeralTwelve][\USymbCharTwo{33}{107}] % ROMAN NUMERAL TWELVE + \definesymbol[RomanNumeralFifty][\USymbCharTwo{33}{108}] % ROMAN NUMERAL FIFTY + \definesymbol[RomanNumeralOneHundred][\USymbCharTwo{33}{109}] % ROMAN NUMERAL ONE HUNDRED + \definesymbol[RomanNumeralFiveHundred][\USymbCharTwo{33}{110}] % ROMAN NUMERAL FIVE HUNDRED + \definesymbol[RomanNumeralOneThousand][\USymbCharTwo{33}{111}] % ROMAN NUMERAL ONE THOUSAND + \definesymbol[RomanNumeralOneThousandCD][\USymbCharTwo{33}{128}] % ROMAN NUMERAL ONE THOUSAND C D + \definesymbol[RomanNumeralFiveThousand][\USymbCharTwo{33}{129}] % ROMAN NUMERAL FIVE THOUSAND + \definesymbol[RomanNumeralTenThousand][\USymbCharTwo{33}{130}] % ROMAN NUMERAL TEN THOUSAND + \definesymbol[RomanNumeralReversedOneHundred][\USymbCharTwo{33}{131}] % ROMAN NUMERAL REVERSED ONE HUNDRED + +\stopsymbolset + +\startsymbolset[Unicode Small Roman Numerals] % 0x2150: Requires UnicodeRegular21 + + \definesymbol[SmallRomanNumeralOne][\USymbCharTwo{33}{112}] % SMALL ROMAN NUMERAL ONE + \definesymbol[SmallRomanNumeralTwo][\USymbCharTwo{33}{113}] % SMALL ROMAN NUMERAL TWO + \definesymbol[SmallRomanNumeralThree][\USymbCharTwo{33}{114}] % SMALL ROMAN NUMERAL THREE + \definesymbol[SmallRomanNumeralFour][\USymbCharTwo{33}{115}] % SMALL ROMAN NUMERAL FOUR + \definesymbol[SmallRomanNumeralFive][\USymbCharTwo{33}{116}] % SMALL ROMAN NUMERAL FIVE + \definesymbol[SmallRomanNumeralSix][\USymbCharTwo{33}{117}] % SMALL ROMAN NUMERAL SIX + \definesymbol[SmallRomanNumeralSeven][\USymbCharTwo{33}{118}] % SMALL ROMAN NUMERAL SEVEN + \definesymbol[SmallRomanNumeralEight][\USymbCharTwo{33}{119}] % SMALL ROMAN NUMERAL EIGHT + \definesymbol[SmallRomanNumeralNine][\USymbCharTwo{33}{120}] % SMALL ROMAN NUMERAL NINE + \definesymbol[SmallRomanNumeralTen][\USymbCharTwo{33}{121}] % SMALL ROMAN NUMERAL TEN + \definesymbol[SmallRomanNumeralEleven][\USymbCharTwo{33}{122}] % SMALL ROMAN NUMERAL ELEVEN + \definesymbol[SmallRomanNumeralTwelve][\USymbCharTwo{33}{123}] % SMALL ROMAN NUMERAL TWELVE + \definesymbol[SmallRomanNumeralFifty][\USymbCharTwo{33}{124}] % SMALL ROMAN NUMERAL FIFTY + \definesymbol[SmallRomanNumeralOneHundred][\USymbCharTwo{33}{125}] % SMALL ROMAN NUMERAL ONE HUNDRED + \definesymbol[SmallRomanNumeralFiveHundred][\USymbCharTwo{33}{126}] % SMALL ROMAN NUMERAL FIVE HUNDRED + \definesymbol[SmallRomanNumeralOneThousand][\USymbCharTwo{33}{127}] % SMALL ROMAN NUMERAL ONE THOUSAND + +\stopsymbolset + +\startsymbolset[Unicode Arrows] % 0x2190: Requires UnicodeRegular21 + + \definesymbol[LeftwardsArrow][\USymbChar{33}{144}] % LEFTWARDS ARROW + \definesymbol[UpwardsArrow][\USymbChar{33}{145}] % UPWARDS ARROW + \definesymbol[RightwardsArrow][\USymbChar{33}{146}] % RIGHTWARDS ARROW + \definesymbol[DownwardsArrow][\USymbChar{33}{147}] % DOWNWARDS ARROW + \definesymbol[LeftRightArrow][\USymbChar{33}{148}] % LEFT RIGHT ARROW + \definesymbol[UpDownArrow][\USymbChar{33}{149}] % UP DOWN ARROW + \definesymbol[NorthWestArrow][\USymbChar{33}{150}] % NORTH WEST ARROW + \definesymbol[NorthEastArrow][\USymbChar{33}{151}] % NORTH EAST ARROW + \definesymbol[SouthEastArrow][\USymbChar{33}{152}] % SOUTH EAST ARROW + \definesymbol[SouthWestArrow][\USymbChar{33}{153}] % SOUTH WEST ARROW + \definesymbol[LeftwardsArrowWithStroke][\USymbChar{33}{154}] % LEFTWARDS ARROW WITH STROKE + \definesymbol[RightwardsArrowWithStroke][\USymbChar{33}{155}] % RIGHTWARDS ARROW WITH STROKE + \definesymbol[LeftwardsWaveArrow][\USymbChar{33}{156}] % LEFTWARDS WAVE ARROW + \definesymbol[RightwardsWaveArrow][\USymbChar{33}{157}] % RIGHTWARDS WAVE ARROW + \definesymbol[LeftwardsTwoHeadedArrow][\USymbChar{33}{158}] % LEFTWARDS TWO HEADED ARROW + \definesymbol[UpwardsTwoHeadedArrow][\USymbChar{33}{159}] % UPWARDS TWO HEADED ARROW + \definesymbol[RightwardsTwoHeadedArrow][\USymbChar{33}{160}] % RIGHTWARDS TWO HEADED ARROW + \definesymbol[DownwardsTwoHeadedArrow][\USymbChar{33}{161}] % DOWNWARDS TWO HEADED ARROW + \definesymbol[LeftwardsArrowWithTail][\USymbChar{33}{162}] % LEFTWARDS ARROW WITH TAIL + \definesymbol[RightwardsArrowWithTail][\USymbChar{33}{163}] % RIGHTWARDS ARROW WITH TAIL + \definesymbol[LeftwardsArrowFromBar][\USymbChar{33}{164}] % LEFTWARDS ARROW FROM BAR + \definesymbol[UpwardsArrowFromBar][\USymbChar{33}{165}] % UPWARDS ARROW FROM BAR + \definesymbol[RightwardsArrowFromBar][\USymbChar{33}{166}] % RIGHTWARDS ARROW FROM BAR + \definesymbol[DownwardsArrowFromBar][\USymbChar{33}{167}] % DOWNWARDS ARROW FROM BAR + \definesymbol[UpDownArrowWithBase][\USymbChar{33}{168}] % UP DOWN ARROW WITH BASE + \definesymbol[LeftwardsArrowWithHook][\USymbChar{33}{169}] % LEFTWARDS ARROW WITH HOOK + \definesymbol[RightwardsArrowWithHook][\USymbChar{33}{170}] % RIGHTWARDS ARROW WITH HOOK + \definesymbol[LeftwardsArrowWithLoop][\USymbChar{33}{171}] % LEFTWARDS ARROW WITH LOOP + \definesymbol[RightwardsArrowWithLoop][\USymbChar{33}{172}] % RIGHTWARDS ARROW WITH LOOP + \definesymbol[LeftRightWaveArrow][\USymbChar{33}{173}] % LEFT RIGHT WAVE ARROW + \definesymbol[LeftRightArrowWithStroke][\USymbChar{33}{174}] % LEFT RIGHT ARROW WITH STROKE + \definesymbol[DownwardsZigzagArrow][\USymbChar{33}{175}] % DOWNWARDS ZIGZAG ARROW + \definesymbol[UpwardsArrowWithTipLeftwards][\USymbChar{33}{176}] % UPWARDS ARROW WITH TIP LEFTWARDS + \definesymbol[UpwardsArrowWithTipRightwards][\USymbChar{33}{177}] % UPWARDS ARROW WITH TIP RIGHTWARDS + \definesymbol[DownwardsArrowWithTipLeftwards][\USymbChar{33}{178}] % DOWNWARDS ARROW WITH TIP LEFTWARDS + \definesymbol[DownwardsArrowWithTipRightwards][\USymbChar{33}{179}] % DOWNWARDS ARROW WITH TIP RIGHTWARDS + \definesymbol[RightwardsArrowWithCornerDownwards][\USymbChar{33}{180}] % RIGHTWARDS ARROW WITH CORNER DOWNWARDS + \definesymbol[DownwardsArrowWithCornerLeftwards][\USymbChar{33}{181}] % DOWNWARDS ARROW WITH CORNER LEFTWARDS + \definesymbol[AnticlockwiseTopSemicircleArrow][\USymbChar{33}{182}] % ANTICLOCKWISE TOP SEMICIRCLE ARROW + \definesymbol[ClockwiseTopSemicircleArrow][\USymbChar{33}{183}] % CLOCKWISE TOP SEMICIRCLE ARROW + \definesymbol[NorthWestArrowToLongBar][\USymbChar{33}{184}] % NORTH WEST ARROW TO LONG BAR + \definesymbol[AnticlockwiseOpenCircleArrow][\USymbChar{33}{186}] % ANTICLOCKWISE OPEN CIRCLE ARROW + \definesymbol[ClockwiseOpenCircleArrow][\USymbChar{33}{187}] % CLOCKWISE OPEN CIRCLE ARROW + \definesymbol[LeftwardsHarpoonWithBarbUpwards][\USymbChar{33}{188}] % LEFTWARDS HARPOON WITH BARB UPWARDS + \definesymbol[LeftwardsHarpoonWithBarbDownwards][\USymbChar{33}{189}] % LEFTWARDS HARPOON WITH BARB DOWNWARDS + \definesymbol[UpwardsHarpoonWithBarbRightwards][\USymbChar{33}{190}] % UPWARDS HARPOON WITH BARB RIGHTWARDS + \definesymbol[UpwardsHarpoonWithBarbLeftwards][\USymbChar{33}{191}] % UPWARDS HARPOON WITH BARB LEFTWARDS + \definesymbol[RightwardsHarpoonWithBarbUpwards][\USymbChar{33}{192}] % RIGHTWARDS HARPOON WITH BARB UPWARDS + \definesymbol[RightwardsHarpoonWithBarbDownwards][\USymbChar{33}{193}] % RIGHTWARDS HARPOON WITH BARB DOWNWARDS + \definesymbol[DownwardsHarpoonWithBarbRightwards][\USymbChar{33}{194}] % DOWNWARDS HARPOON WITH BARB RIGHTWARDS + \definesymbol[DownwardsHarpoonWithBarbLeftwards][\USymbChar{33}{195}] % DOWNWARDS HARPOON WITH BARB LEFTWARDS + \definesymbol[LeftwardsSquiggleArrow][\USymbChar{33}{220}] % LEFTWARDS SQUIGGLE ARROW + \definesymbol[RightwardsSquiggleArrow][\USymbChar{33}{221}] % RIGHTWARDS SQUIGGLE ARROW + \definesymbol[UpwardsArrowWithDoubleStroke][\USymbChar{33}{222}] % UPWARDS ARROW WITH DOUBLE STROKE + \definesymbol[DownwardsArrowWithDoubleStroke][\USymbChar{33}{223}] % DOWNWARDS ARROW WITH DOUBLE STROKE + \definesymbol[LeftwardsDashedArrow][\USymbChar{33}{224}] % LEFTWARDS DASHED ARROW + \definesymbol[UpwardsDashedArrow][\USymbChar{33}{225}] % UPWARDS DASHED ARROW + \definesymbol[RightwardsDashedArrow][\USymbChar{33}{226}] % RIGHTWARDS DASHED ARROW + \definesymbol[DownwardsDashedArrow][\USymbChar{33}{227}] % DOWNWARDS DASHED ARROW + \definesymbol[LeftwardsArrowToBar][\USymbChar{33}{228}] % LEFTWARDS ARROW TO BAR + \definesymbol[RightwardsArrowToBar][\USymbChar{33}{229}] % RIGHTWARDS ARROW TO BAR + \definesymbol[LeftwardsWhiteArrow][\USymbChar{33}{230}] % LEFTWARDS WHITE ARROW + \definesymbol[UpwardsWhiteArrow][\USymbChar{33}{231}] % UPWARDS WHITE ARROW + \definesymbol[RightwardsWhiteArrow][\USymbChar{33}{232}] % RIGHTWARDS WHITE ARROW + \definesymbol[DownwardsWhiteArrow][\USymbChar{33}{233}] % DOWNWARDS WHITE ARROW + \definesymbol[UpwardsWhiteArrowFromBar][\USymbChar{33}{234}] % UPWARDS WHITE ARROW FROM BAR + \definesymbol[UpwardsWhiteArrowOnPedestal][\USymbChar{33}{235}] % UPWARDS WHITE ARROW ON PEDESTAL + \definesymbol[UpwardsWhiteArrowOnPedestalWithHorizontalBar][\USymbChar{33}{236}] % UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR + \definesymbol[UpwardsWhiteArrowOnPedestalWithVerticalBar][\USymbChar{33}{237}] % UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR + \definesymbol[RightwardsWhiteArrowFromWall][\USymbChar{33}{240}] % RIGHTWARDS WHITE ARROW FROM WALL + \definesymbol[NorthWestArrowToCorner][\USymbChar{33}{241}] % NORTH WEST ARROW TO CORNER + \definesymbol[SouthEastArrowToCorner][\USymbChar{33}{242}] % SOUTH EAST ARROW TO CORNER + \definesymbol[UpDownWhiteArrow][\USymbChar{33}{243}] % UP DOWN WHITE ARROW + +\stopsymbolset + +\startsymbolset[Unicode Multi Arrows] % 0x2190: Requires UnicodeRegular21 + + \definesymbol[LeftwardsArrowToBarOverRightwardsArrowToBar][\USymbChar{33}{185}] % LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR + \definesymbol[RightwardsArrowOverLeftwardsArrow][\USymbChar{33}{196}] % RIGHTWARDS ARROW OVER LEFTWARDS ARROW + \definesymbol[UpwardsArrowLeftwardsOfDownwardsArrow][\USymbChar{33}{197}] % UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW + \definesymbol[LeftwardsArrowOverRightwardsArrow][\USymbChar{33}{198}] % LEFTWARDS ARROW OVER RIGHTWARDS ARROW + \definesymbol[LeftwardsPairedArrows][\USymbChar{33}{199}] % LEFTWARDS PAIRED ARROWS + \definesymbol[UpwardsPairedArrows][\USymbChar{33}{200}] % UPWARDS PAIRED ARROWS + \definesymbol[RightwardsPairedArrows][\USymbChar{33}{201}] % RIGHTWARDS PAIRED ARROWS + \definesymbol[DownwardsPairedArrows][\USymbChar{33}{202}] % DOWNWARDS PAIRED ARROWS + \definesymbol[LeftwardsHarpoonOverRightwardsHarpoon][\USymbChar{33}{203}] % LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON + \definesymbol[RightwardsHarpoonOverLeftwardsHarpoon][\USymbChar{33}{204}] % RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON + \definesymbol[LeftwardsDoubleArrowWithStroke][\USymbChar{33}{205}] % LEFTWARDS DOUBLE ARROW WITH STROKE + \definesymbol[LeftRightDoubleArrowWithStroke][\USymbChar{33}{206}] % LEFT RIGHT DOUBLE ARROW WITH STROKE + \definesymbol[RightwardsDoubleArrowWithStroke][\USymbChar{33}{207}] % RIGHTWARDS DOUBLE ARROW WITH STROKE + \definesymbol[LeftwardsDoubleArrow][\USymbChar{33}{208}] % LEFTWARDS DOUBLE ARROW + \definesymbol[UpwardsDoubleArrow][\USymbChar{33}{209}] % UPWARDS DOUBLE ARROW + \definesymbol[RightwardsDoubleArrow][\USymbChar{33}{210}] % RIGHTWARDS DOUBLE ARROW + \definesymbol[DownwardsDoubleArrow][\USymbChar{33}{211}] % DOWNWARDS DOUBLE ARROW + \definesymbol[LeftRightDoubleArrow][\USymbChar{33}{212}] % LEFT RIGHT DOUBLE ARROW + \definesymbol[UpDownDoubleArrow][\USymbChar{33}{213}] % UP DOWN DOUBLE ARROW + \definesymbol[NorthWestDoubleArrow][\USymbChar{33}{214}] % NORTH WEST DOUBLE ARROW + \definesymbol[NorthEastDoubleArrow][\USymbChar{33}{215}] % NORTH EAST DOUBLE ARROW + \definesymbol[SouthEastDoubleArrow][\USymbChar{33}{216}] % SOUTH EAST DOUBLE ARROW + \definesymbol[SouthWestDoubleArrow][\USymbChar{33}{217}] % SOUTH WEST DOUBLE ARROW + \definesymbol[LeftwardsTripleArrow][\USymbChar{33}{218}] % LEFTWARDS TRIPLE ARROW + \definesymbol[RightwardsTripleArrow][\USymbChar{33}{219}] % RIGHTWARDS TRIPLE ARROW + \definesymbol[UpwardsWhiteDoubleArrow][\USymbChar{33}{238}] % UPWARDS WHITE DOUBLE ARROW + \definesymbol[UpwardsWhiteDoubleArrowOnPedestal][\USymbChar{33}{239}] % UPWARDS WHITE DOUBLE ARROW ON PEDESTAL + +\stopsymbolset + + +\startsymbolset[Unicode Optical Character Recognition] % 0x2440: Requires UnicodeRegular24 + + \definesymbol[OcrHook][\USymbChar{36}{64}] % OCR HOOK + \definesymbol[OcrChair][\USymbChar{36}{65}] % OCR CHAIR + \definesymbol[OcrFork][\USymbChar{36}{66}] % OCR FORK + \definesymbol[OcrInvertedFork][\USymbChar{36}{67}] % OCR INVERTED FORK + \definesymbol[OcrBeltBuckle][\USymbChar{36}{68}] % OCR BELT BUCKLE + \definesymbol[OcrBowTie][\USymbChar{36}{69}] % OCR BOW TIE + \definesymbol[OcrBranchBankIdentification][\USymbChar{36}{70}] % OCR BRANCH BANK IDENTIFICATION + \definesymbol[OcrAmountOfCheck][\USymbChar{36}{71}] % OCR AMOUNT OF CHECK + \definesymbol[OcrDash][\USymbChar{36}{72}] % OCR DASH + \definesymbol[OcrCustomerAccountNumber][\USymbChar{36}{73}] % OCR CUSTOMER ACCOUNT NUMBER + \definesymbol[OcrDoubleBackslash][\USymbChar{36}{74}] % OCR DOUBLE BACKSLASH + +\stopsymbolset + + +\startsymbolset[Unicode Box Drawing] % 0x2500: Requires UnicodeRegular25 + + \definesymbol[LightHorizontal][\USymbChar{37}{0}] % BOX DRAWINGS LIGHT HORIZONTAL + \definesymbol[HeavyHorizontal][\USymbChar{37}{1}] % BOX DRAWINGS HEAVY HORIZONTAL + \definesymbol[LightVertical][\USymbChar{37}{2}] % BOX DRAWINGS LIGHT VERTICAL + \definesymbol[HeavyVertical][\USymbChar{37}{3}] % BOX DRAWINGS HEAVY VERTICAL + \definesymbol[LightTripleDashHorizontal][\USymbChar{37}{4}] % BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL + \definesymbol[HeavyTripleDashHorizontal][\USymbChar{37}{5}] % BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL + \definesymbol[LightTripleDashVertical][\USymbChar{37}{6}] % BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL + \definesymbol[HeavyTripleDashVertical][\USymbChar{37}{7}] % BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL + \definesymbol[LightQuadrupleDashHorizontal][\USymbChar{37}{8}] % BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL + \definesymbol[HeavyQuadrupleDashHorizontal][\USymbChar{37}{9}] % BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL + \definesymbol[LightQuadrupleDashVertical][\USymbChar{37}{10}] % BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL + \definesymbol[HeavyQuadrupleDashVertical][\USymbChar{37}{11}] % BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL + \definesymbol[LightDownAndRight][\USymbChar{37}{12}] % BOX DRAWINGS LIGHT DOWN AND RIGHT + \definesymbol[DownLightAndRightHeavy][\USymbChar{37}{13}] % BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY + \definesymbol[DownHeavyAndRightLight][\USymbChar{37}{14}] % BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT + \definesymbol[HeavyDownAndRight][\USymbChar{37}{15}] % BOX DRAWINGS HEAVY DOWN AND RIGHT + \definesymbol[LightDownAndLeft][\USymbChar{37}{16}] % BOX DRAWINGS LIGHT DOWN AND LEFT + \definesymbol[DownLightAndLeftHeavy][\USymbChar{37}{17}] % BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY + \definesymbol[DownHeavyAndLeftLight][\USymbChar{37}{18}] % BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT + \definesymbol[HeavyDownAndLeft][\USymbChar{37}{19}] % BOX DRAWINGS HEAVY DOWN AND LEFT + \definesymbol[LightUpAndRight][\USymbChar{37}{20}] % BOX DRAWINGS LIGHT UP AND RIGHT + \definesymbol[UpLightAndRightHeavy][\USymbChar{37}{21}] % BOX DRAWINGS UP LIGHT AND RIGHT HEAVY + \definesymbol[UpHeavyAndRightLight][\USymbChar{37}{22}] % BOX DRAWINGS UP HEAVY AND RIGHT LIGHT + \definesymbol[HeavyUpAndRight][\USymbChar{37}{23}] % BOX DRAWINGS HEAVY UP AND RIGHT + \definesymbol[LightUpAndLeft][\USymbChar{37}{24}] % BOX DRAWINGS LIGHT UP AND LEFT + \definesymbol[UpLightAndLeftHeavy][\USymbChar{37}{25}] % BOX DRAWINGS UP LIGHT AND LEFT HEAVY + \definesymbol[UpHeavyAndLeftLight][\USymbChar{37}{26}] % BOX DRAWINGS UP HEAVY AND LEFT LIGHT + \definesymbol[HeavyUpAndLeft][\USymbChar{37}{27}] % BOX DRAWINGS HEAVY UP AND LEFT + \definesymbol[LightVerticalAndRight][\USymbChar{37}{28}] % BOX DRAWINGS LIGHT VERTICAL AND RIGHT + \definesymbol[VerticalLightAndRightHeavy][\USymbChar{37}{29}] % BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY + \definesymbol[UpHeavyAndRightDownLight][\USymbChar{37}{30}] % BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT + \definesymbol[DownHeavyAndRightUpLight][\USymbChar{37}{31}] % BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT + \definesymbol[VerticalHeavyAndRightLight][\USymbChar{37}{32}] % BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT + \definesymbol[DownLightAndRightUpHeavy][\USymbChar{37}{33}] % BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY + \definesymbol[UpLightAndRightDownHeavy][\USymbChar{37}{34}] % BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY + \definesymbol[HeavyVerticalAndRight][\USymbChar{37}{35}] % BOX DRAWINGS HEAVY VERTICAL AND RIGHT + \definesymbol[LightVerticalAndLeft][\USymbChar{37}{36}] % BOX DRAWINGS LIGHT VERTICAL AND LEFT + \definesymbol[VerticalLightAndLeftHeavy][\USymbChar{37}{37}] % BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY + \definesymbol[UpHeavyAndLeftDownLight][\USymbChar{37}{38}] % BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT + \definesymbol[DownHeavyAndLeftUpLight][\USymbChar{37}{39}] % BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT + \definesymbol[VerticalHeavyAndLeftLight][\USymbChar{37}{40}] % BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT + \definesymbol[DownLightAndLeftUpHeavy][\USymbChar{37}{41}] % BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY + \definesymbol[UpLightAndLeftDownHeavy][\USymbChar{37}{42}] % BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY + \definesymbol[HeavyVerticalAndLeft][\USymbChar{37}{43}] % BOX DRAWINGS HEAVY VERTICAL AND LEFT + \definesymbol[LightDownAndHorizontal][\USymbChar{37}{44}] % BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + \definesymbol[LeftHeavyAndRightDownLight][\USymbChar{37}{45}] % BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT + \definesymbol[RightHeavyAndLeftDownLight][\USymbChar{37}{46}] % BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT + \definesymbol[DownLightAndHorizontalHeavy][\USymbChar{37}{47}] % BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY + \definesymbol[DownHeavyAndHorizontalLight][\USymbChar{37}{48}] % BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT + \definesymbol[RightLightAndLeftDownHeavy][\USymbChar{37}{49}] % BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY + \definesymbol[LeftLightAndRightDownHeavy][\USymbChar{37}{50}] % BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY + \definesymbol[HeavyDownAndHorizontal][\USymbChar{37}{51}] % BOX DRAWINGS HEAVY DOWN AND HORIZONTAL + \definesymbol[LightUpAndHorizontal][\USymbChar{37}{52}] % BOX DRAWINGS LIGHT UP AND HORIZONTAL + \definesymbol[LeftHeavyAndRightUpLight][\USymbChar{37}{53}] % BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT + \definesymbol[RightHeavyAndLeftUpLight][\USymbChar{37}{54}] % BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT + \definesymbol[UpLightAndHorizontalHeavy][\USymbChar{37}{55}] % BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY + \definesymbol[UpHeavyAndHorizontalLight][\USymbChar{37}{56}] % BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT + \definesymbol[RightLightAndLeftUpHeavy][\USymbChar{37}{57}] % BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY + \definesymbol[LeftLightAndRightUpHeavy][\USymbChar{37}{58}] % BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY + \definesymbol[HeavyUpAndHorizontal][\USymbChar{37}{59}] % BOX DRAWINGS HEAVY UP AND HORIZONTAL + \definesymbol[LightVerticalAndHorizontal][\USymbChar{37}{60}] % BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + \definesymbol[LeftHeavyAndRightVerticalLight][\USymbChar{37}{61}] % BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT + \definesymbol[RightHeavyAndLeftVerticalLight][\USymbChar{37}{62}] % BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT + \definesymbol[VerticalLightAndHorizontalHeavy][\USymbChar{37}{63}] % BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY + \definesymbol[UpHeavyAndDownHorizontalLight][\USymbChar{37}{64}] % BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT + \definesymbol[DownHeavyAndUpHorizontalLight][\USymbChar{37}{65}] % BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT + \definesymbol[VerticalHeavyAndHorizontalLight][\USymbChar{37}{66}] % BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT + \definesymbol[LeftUpHeavyAndRightDownLight][\USymbChar{37}{67}] % BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT + \definesymbol[RightUpHeavyAndLeftDownLight][\USymbChar{37}{68}] % BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT + \definesymbol[LeftDownHeavyAndRightUpLight][\USymbChar{37}{69}] % BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT + \definesymbol[RightDownHeavyAndLeftUpLight][\USymbChar{37}{70}] % BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT + \definesymbol[DownLightAndUpHorizontalHeavy][\USymbChar{37}{71}] % BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY + \definesymbol[UpLightAndDownHorizontalHeavy][\USymbChar{37}{72}] % BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY + \definesymbol[RightLightAndLeftVerticalHeavy][\USymbChar{37}{73}] % BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY + \definesymbol[LeftLightAndRightVerticalHeavy][\USymbChar{37}{74}] % BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY + \definesymbol[HeavyVerticalAndHorizontal][\USymbChar{37}{75}] % BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL + \definesymbol[LightArcDownAndRight][\USymbChar{37}{109}] % BOX DRAWINGS LIGHT ARC DOWN AND RIGHT + \definesymbol[LightArcDownAndLeft][\USymbChar{37}{110}] % BOX DRAWINGS LIGHT ARC DOWN AND LEFT + \definesymbol[LightArcUpAndLeft][\USymbChar{37}{111}] % BOX DRAWINGS LIGHT ARC UP AND LEFT + \definesymbol[LightArcUpAndRight][\USymbChar{37}{112}] % BOX DRAWINGS LIGHT ARC UP AND RIGHT + \definesymbol[LightDiagonalUpperRightToLowerLeft][\USymbChar{37}{113}] % BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT + \definesymbol[LightDiagonalUpperLeftToLowerRight][\USymbChar{37}{114}] % BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT + \definesymbol[LightDiagonalCross][\USymbChar{37}{115}] % BOX DRAWINGS LIGHT DIAGONAL CROSS + \definesymbol[LightLeft][\USymbChar{37}{116}] % BOX DRAWINGS LIGHT LEFT + \definesymbol[LightUp][\USymbChar{37}{117}] % BOX DRAWINGS LIGHT UP + \definesymbol[LightRight][\USymbChar{37}{118}] % BOX DRAWINGS LIGHT RIGHT + \definesymbol[LightDown][\USymbChar{37}{119}] % BOX DRAWINGS LIGHT DOWN + \definesymbol[HeavyLeft][\USymbChar{37}{120}] % BOX DRAWINGS HEAVY LEFT + \definesymbol[HeavyUp][\USymbChar{37}{121}] % BOX DRAWINGS HEAVY UP + \definesymbol[HeavyRight][\USymbChar{37}{122}] % BOX DRAWINGS HEAVY RIGHT + \definesymbol[HeavyDown][\USymbChar{37}{123}] % BOX DRAWINGS HEAVY DOWN + \definesymbol[LightLeftAndHeavyRight][\USymbChar{37}{124}] % BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT + \definesymbol[LightUpAndHeavyDown][\USymbChar{37}{125}] % BOX DRAWINGS LIGHT UP AND HEAVY DOWN + \definesymbol[HeavyLeftAndLightRight][\USymbChar{37}{126}] % BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT + \definesymbol[HeavyUpAndLightDown][\USymbChar{37}{127}] % BOX DRAWINGS HEAVY UP AND LIGHT DOWN + +\stopsymbolset + +\startsymbolset[Unicode Circled Digits] % 0x2460: Requires UnicodeRegular24 + + \definesymbol[CircledOne][\USymbCharZapf{36}{96}] % CIRCLED DIGIT ONE + \definesymbol[CircledTwo][\USymbCharZapf{36}{97}] % CIRCLED DIGIT TWO + \definesymbol[CircledThree][\USymbCharZapf{36}{98}] % CIRCLED DIGIT THREE + \definesymbol[CircledFour][\USymbCharZapf{36}{99}] % CIRCLED DIGIT FOUR + \definesymbol[CircledFive][\USymbCharZapf{36}{100}] % CIRCLED DIGIT FIVE + \definesymbol[CircledSix][\USymbCharZapf{36}{101}] % CIRCLED DIGIT SIX + \definesymbol[CircledSeven][\USymbCharZapf{36}{102}] % CIRCLED DIGIT SEVEN + \definesymbol[CircledEight][\USymbCharZapf{36}{103}] % CIRCLED DIGIT EIGHT + \definesymbol[CircledNine][\USymbCharZapf{36}{104}] % CIRCLED DIGIT NINE + \definesymbol[CircledTen][\USymbCharZapf{36}{105}] % CIRCLED NUMBER TEN + +\stopsymbolset + +\startsymbolset[Unicode Double Box Drawing] % 0x2500: Requires UnicodeRegular25 + + \definesymbol[LightDoubleDashHorizontal][\USymbChar{37}{76}] % BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL + \definesymbol[HeavyDoubleDashHorizontal][\USymbChar{37}{77}] % BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL + \definesymbol[LightDoubleDashVertical][\USymbChar{37}{78}] % BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL + \definesymbol[HeavyDoubleDashVertical][\USymbChar{37}{79}] % BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL + \definesymbol[DoubleHorizontal][\USymbChar{37}{80}] % BOX DRAWINGS DOUBLE HORIZONTAL + \definesymbol[DoubleVertical][\USymbChar{37}{81}] % BOX DRAWINGS DOUBLE VERTICAL + \definesymbol[DownSingleAndRightDouble][\USymbChar{37}{82}] % BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + \definesymbol[DownDoubleAndRightSingle][\USymbChar{37}{83}] % BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + \definesymbol[DoubleDownAndRight][\USymbChar{37}{84}] % BOX DRAWINGS DOUBLE DOWN AND RIGHT + \definesymbol[DownSingleAndLeftDouble][\USymbChar{37}{85}] % BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + \definesymbol[DownDoubleAndLeftSingle][\USymbChar{37}{86}] % BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + \definesymbol[DoubleDownAndLeft][\USymbChar{37}{87}] % BOX DRAWINGS DOUBLE DOWN AND LEFT + \definesymbol[UpSingleAndRightDouble][\USymbChar{37}{88}] % BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + \definesymbol[UpDoubleAndRightSingle][\USymbChar{37}{89}] % BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + \definesymbol[DoubleUpAndRight][\USymbChar{37}{90}] % BOX DRAWINGS DOUBLE UP AND RIGHT + \definesymbol[UpSingleAndLeftDouble][\USymbChar{37}{91}] % BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + \definesymbol[UpDoubleAndLeftSingle][\USymbChar{37}{92}] % BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + \definesymbol[DoubleUpAndLeft][\USymbChar{37}{93}] % BOX DRAWINGS DOUBLE UP AND LEFT + \definesymbol[VerticalSingleAndRightDouble][\USymbChar{37}{94}] % BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + \definesymbol[VerticalDoubleAndRightSingle][\USymbChar{37}{95}] % BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + \definesymbol[DoubleVerticalAndRight][\USymbChar{37}{96}] % BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + \definesymbol[VerticalSingleAndLeftDouble][\USymbChar{37}{97}] % BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + \definesymbol[VerticalDoubleAndLeftSingle][\USymbChar{37}{98}] % BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + \definesymbol[DoubleVerticalAndLeft][\USymbChar{37}{99}] % BOX DRAWINGS DOUBLE VERTICAL AND LEFT + \definesymbol[DownSingleAndHorizontalDouble][\USymbChar{37}{100}] % BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + \definesymbol[DownDoubleAndHorizontalSingle][\USymbChar{37}{101}] % BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + \definesymbol[DoubleDownAndHorizontal][\USymbChar{37}{102}] % BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + \definesymbol[UpSingleAndHorizontalDouble][\USymbChar{37}{103}] % BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + \definesymbol[UpDoubleAndHorizontalSingle][\USymbChar{37}{104}] % BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + \definesymbol[DoubleUpAndHorizontal][\USymbChar{37}{105}] % BOX DRAWINGS DOUBLE UP AND HORIZONTAL + \definesymbol[VerticalSingleAndHorizontalDouble][\USymbChar{37}{106}] % BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + \definesymbol[VerticalDoubleAndHorizontalSingle][\USymbChar{37}{107}] % BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + \definesymbol[DoubleVerticalAndHorizontal][\USymbChar{37}{108}] % BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + +\stopsymbolset + +\startsymbolset[Unicode Block Elements] % 0x2580: Requires UnicodeRegular25 + + \definesymbol[UpperHalfBlock][\USymbChar{37}{128}] % UPPER HALF BLOCK + \definesymbol[LowerOneEighthBlock][\USymbChar{37}{129}] % LOWER ONE EIGHTH BLOCK + \definesymbol[LowerOneQuarterBlock][\USymbChar{37}{130}] % LOWER ONE QUARTER BLOCK + \definesymbol[LowerThreeEighthsBlock][\USymbChar{37}{131}] % LOWER THREE EIGHTHS BLOCK + \definesymbol[LowerHalfBlock][\USymbChar{37}{132}] % LOWER HALF BLOCK + \definesymbol[LowerFiveEighthsBlock][\USymbChar{37}{133}] % LOWER FIVE EIGHTHS BLOCK + \definesymbol[LowerThreeQuartersBlock][\USymbChar{37}{134}] % LOWER THREE QUARTERS BLOCK + \definesymbol[LowerSevenEighthsBlock][\USymbChar{37}{135}] % LOWER SEVEN EIGHTHS BLOCK + \definesymbol[FullBlock][\USymbChar{37}{136}] % FULL BLOCK + \definesymbol[LeftSevenEighthsBlock][\USymbChar{37}{137}] % LEFT SEVEN EIGHTHS BLOCK + \definesymbol[LeftThreeQuartersBlock][\USymbChar{37}{138}] % LEFT THREE QUARTERS BLOCK + \definesymbol[LeftFiveEighthsBlock][\USymbChar{37}{139}] % LEFT FIVE EIGHTHS BLOCK + \definesymbol[LeftHalfBlock][\USymbChar{37}{140}] % LEFT HALF BLOCK + \definesymbol[LeftThreeEighthsBlock][\USymbChar{37}{141}] % LEFT THREE EIGHTHS BLOCK + \definesymbol[LeftOneQuarterBlock][\USymbChar{37}{142}] % LEFT ONE QUARTER BLOCK + \definesymbol[LeftOneEighthBlock][\USymbChar{37}{143}] % LEFT ONE EIGHTH BLOCK + \definesymbol[RightHalfBlock][\USymbChar{37}{144}] % RIGHT HALF BLOCK + \definesymbol[UpperOneEighthBlock][\USymbChar{37}{148}] % UPPER ONE EIGHTH BLOCK + \definesymbol[RightOneEighthBlock][\USymbChar{37}{149}] % RIGHT ONE EIGHTH BLOCK + +\stopsymbolset + +\startsymbolset[Unicode Shade Characters] % 0x2580: Requires UnicodeRegular25 + + \definesymbol[LightShade][\USymbChar{37}{145}] % LIGHT SHADE + \definesymbol[MediumShade][\USymbChar{37}{146}] % MEDIUM SHADE + \definesymbol[DarkShade][\USymbChar{37}{147}] % DARK SHADE + +\stopsymbolset + +\startsymbolset[Unicode Terminal Graphics] % 0x2580: Requires UnicodeRegular25 + + \definesymbol[QuadrantLowerLeft][\USymbChar{37}{150}] % [Unassigned U+2596] + \definesymbol[QuadrantLowerRight][\USymbChar{37}{151}] % [Unassigned U+2597] + \definesymbol[QuadrantUpperLeft][\USymbChar{37}{152}] % [Unassigned U+2598] + \definesymbol[QuadrantUpperLeftAndLowerLeftAndLowerRight][\USymbChar{37}{153}] % [Unassigned U+2599] + \definesymbol[QuadrantUpperLeftAndLowerRight][\USymbChar{37}{154}] % [Unassigned U+259A] + \definesymbol[QuadrantUpperLeftAndUpperRightandLowerLeft][\USymbChar{37}{155}] % [Unassigned U+259B] + \definesymbol[QuadrantUpperLeftAndUpperRightAndLowerRight][\USymbChar{37}{156}] % [Unassigned U+259C] + \definesymbol[QuadrantUpperRight][\USymbChar{37}{157}] % [Unassigned U+259D] + \definesymbol[QuadrantUpperRightAndLowerLeft][\USymbChar{37}{158}] % [Unassigned U+259E] + \definesymbol[QuadrantUpperRightAndLowerLeftAndLowerRight][\USymbChar{37}{159}] % [Unassigned U+259F] + +\stopsymbolset + +\startsymbolset[Unicode Geometric Shapes] % 0x25A0: Requires UnicodeRegular25 + + \definesymbol[BlackSquare][\USymbChar{37}{160}] % BLACK SQUARE + \definesymbol[WhiteSquare][\USymbChar{37}{161}] % WHITE SQUARE + \definesymbol[WhiteSquareWithRoundedCorners][\USymbChar{37}{162}] % WHITE SQUARE WITH ROUNDED CORNERS + \definesymbol[WhiteSquareContainingBlackSmallSquare][\USymbChar{37}{163}] % WHITE SQUARE CONTAINING BLACK SMALL SQUARE + \definesymbol[SquareWithHorizontalFill][\USymbChar{37}{164}] % SQUARE WITH HORIZONTAL FILL + \definesymbol[SquareWithVerticalFill][\USymbChar{37}{165}] % SQUARE WITH VERTICAL FILL + \definesymbol[SquareWithOrthogonalCrosshatchFill][\USymbChar{37}{166}] % SQUARE WITH ORTHOGONAL CROSSHATCH FILL + \definesymbol[SquareWithUpperLeftToLowerRightFill][\USymbChar{37}{167}] % SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL + \definesymbol[SquareWithUpperRightToLowerLeftFill][\USymbChar{37}{168}] % SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL + \definesymbol[SquareWithDiagonalCrosshatchFill][\USymbChar{37}{169}] % SQUARE WITH DIAGONAL CROSSHATCH FILL + \definesymbol[BlackSmallSquare][\USymbChar{37}{170}] % BLACK SMALL SQUARE + \definesymbol[WhiteSmallSquare][\USymbChar{37}{171}] % WHITE SMALL SQUARE + \definesymbol[BlackRectangle][\USymbChar{37}{172}] % BLACK RECTANGLE + \definesymbol[WhiteRectangle][\USymbChar{37}{173}] % WHITE RECTANGLE + \definesymbol[BlackVerticalRectangle][\USymbChar{37}{174}] % BLACK VERTICAL RECTANGLE + \definesymbol[WhiteVerticalRectangle][\USymbChar{37}{175}] % WHITE VERTICAL RECTANGLE + \definesymbol[BlackParallelogram][\USymbChar{37}{176}] % BLACK PARALLELOGRAM + \definesymbol[WhiteParallelogram][\USymbChar{37}{177}] % WHITE PARALLELOGRAM + \definesymbol[BlackUpPointingTriangle][\USymbChar{37}{178}] % BLACK UP-POINTING TRIANGLE + \definesymbol[WhiteUpPointingTriangle][\USymbChar{37}{179}] % WHITE UP-POINTING TRIANGLE + \definesymbol[BlackUpPointingSmallTriangle][\USymbChar{37}{180}] % BLACK UP-POINTING SMALL TRIANGLE + \definesymbol[WhiteUpPointingSmallTriangle][\USymbChar{37}{181}] % WHITE UP-POINTING SMALL TRIANGLE + \definesymbol[BlackRightPointingTriangle][\USymbChar{37}{182}] % BLACK RIGHT-POINTING TRIANGLE + \definesymbol[WhiteRightPointingTriangle][\USymbChar{37}{183}] % WHITE RIGHT-POINTING TRIANGLE + \definesymbol[BlackRightPointingSmallTriangle][\USymbChar{37}{184}] % BLACK RIGHT-POINTING SMALL TRIANGLE + \definesymbol[WhiteRightPointingSmallTriangle][\USymbChar{37}{185}] % WHITE RIGHT-POINTING SMALL TRIANGLE + \definesymbol[BlackRightPointingPointer][\USymbChar{37}{186}] % BLACK RIGHT-POINTING POINTER + \definesymbol[WhiteRightPointingPointer][\USymbChar{37}{187}] % WHITE RIGHT-POINTING POINTER + \definesymbol[BlackDownPointingTriangle][\USymbChar{37}{188}] % BLACK DOWN-POINTING TRIANGLE + \definesymbol[WhiteDownPointingTriangle][\USymbChar{37}{189}] % WHITE DOWN-POINTING TRIANGLE + \definesymbol[BlackDownPointingSmallTriangle][\USymbChar{37}{190}] % BLACK DOWN-POINTING SMALL TRIANGLE + \definesymbol[WhiteDownPointingSmallTriangle][\USymbChar{37}{191}] % WHITE DOWN-POINTING SMALL TRIANGLE + \definesymbol[BlackLeftPointingTriangle][\USymbChar{37}{192}] % BLACK LEFT-POINTING TRIANGLE + \definesymbol[WhiteLeftPointingTriangle][\USymbChar{37}{193}] % WHITE LEFT-POINTING TRIANGLE + \definesymbol[BlackLeftPointingSmallTriangle][\USymbChar{37}{194}] % BLACK LEFT-POINTING SMALL TRIANGLE + \definesymbol[WhiteLeftPointingSmallTriangle][\USymbChar{37}{195}] % WHITE LEFT-POINTING SMALL TRIANGLE + \definesymbol[BlackLeftPointingPointer][\USymbChar{37}{196}] % BLACK LEFT-POINTING POINTER + \definesymbol[WhiteLeftPointingPointer][\USymbChar{37}{197}] % WHITE LEFT-POINTING POINTER + \definesymbol[BlackDiamond][\USymbChar{37}{198}] % BLACK DIAMOND + \definesymbol[WhiteDiamond][\USymbChar{37}{199}] % WHITE DIAMOND + \definesymbol[WhiteDiamondContainingBlackSmallDiamond][\USymbChar{37}{200}] % WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND + \definesymbol[Fisheye][\USymbChar{37}{201}] % FISHEYE + \definesymbol[Lozenge][\USymbChar{37}{202}] % LOZENGE + \definesymbol[WhiteCircle][\USymbChar{37}{203}] % WHITE CIRCLE + \definesymbol[DottedCircle][\USymbChar{37}{204}] % DOTTED CIRCLE + \definesymbol[CircleWithVerticalFill][\USymbChar{37}{205}] % CIRCLE WITH VERTICAL FILL + \definesymbol[Bullseye][\USymbChar{37}{206}] % BULLSEYE + \definesymbol[BlackCircle][\USymbChar{37}{207}] % BLACK CIRCLE + \definesymbol[CircleWithLeftHalfBlack][\USymbChar{37}{208}] % CIRCLE WITH LEFT HALF BLACK + \definesymbol[CircleWithRightHalfBlack][\USymbChar{37}{209}] % CIRCLE WITH RIGHT HALF BLACK + \definesymbol[CircleWithLowerHalfBlack][\USymbChar{37}{210}] % CIRCLE WITH LOWER HALF BLACK + \definesymbol[CircleWithUpperHalfBlack][\USymbChar{37}{211}] % CIRCLE WITH UPPER HALF BLACK + \definesymbol[CircleWithUpperRightQuadrantBlack][\USymbChar{37}{212}] % CIRCLE WITH UPPER RIGHT QUADRANT BLACK + \definesymbol[CircleWithAllButUpperLeftQuadrantBlack][\USymbChar{37}{213}] % CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK + \definesymbol[LeftHalfBlackCircle][\USymbChar{37}{214}] % LEFT HALF BLACK CIRCLE + \definesymbol[RightHalfBlackCircle][\USymbChar{37}{215}] % RIGHT HALF BLACK CIRCLE + \definesymbol[InverseBullet][\USymbChar{37}{216}] % INVERSE BULLET + \definesymbol[InverseWhiteCircle][\USymbChar{37}{217}] % INVERSE WHITE CIRCLE + \definesymbol[UpperHalfInverseWhiteCircle][\USymbChar{37}{218}] % UPPER HALF INVERSE WHITE CIRCLE + \definesymbol[LowerHalfInverseWhiteCircle][\USymbChar{37}{219}] % LOWER HALF INVERSE WHITE CIRCLE + \definesymbol[UpperLeftQuadrantCircularArc][\USymbChar{37}{220}] % UPPER LEFT QUADRANT CIRCULAR ARC + \definesymbol[UpperRightQuadrantCircularArc][\USymbChar{37}{221}] % UPPER RIGHT QUADRANT CIRCULAR ARC + \definesymbol[LowerRightQuadrantCircularArc][\USymbChar{37}{222}] % LOWER RIGHT QUADRANT CIRCULAR ARC + \definesymbol[LowerLeftQuadrantCircularArc][\USymbChar{37}{223}] % LOWER LEFT QUADRANT CIRCULAR ARC + \definesymbol[LowerHalfCircle][\USymbChar{37}{225}] % LOWER HALF CIRCLE + \definesymbol[BlackLowerRightTriangle][\USymbChar{37}{226}] % BLACK LOWER RIGHT TRIANGLE + \definesymbol[BlackLowerLeftTriangle][\USymbChar{37}{227}] % BLACK LOWER LEFT TRIANGLE + \definesymbol[BlackUpperLeftTriangle][\USymbChar{37}{228}] % BLACK UPPER LEFT TRIANGLE + \definesymbol[BlackUpperRightTriangle][\USymbChar{37}{229}] % BLACK UPPER RIGHT TRIANGLE + \definesymbol[WhiteBullet][\USymbChar{37}{230}] % WHITE BULLET + \definesymbol[SquareWithLeftHalfBlack][\USymbChar{37}{231}] % SQUARE WITH LEFT HALF BLACK + \definesymbol[SquareWithRightHalfBlack][\USymbChar{37}{232}] % SQUARE WITH RIGHT HALF BLACK + \definesymbol[SquareWithUpperLeftDiagonalHalfBlack][\USymbChar{37}{233}] % SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK + \definesymbol[SquareWithLowerRightDiagonalHalfBlack][\USymbChar{37}{234}] % SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK + \definesymbol[WhiteSquareWithVerticalBisectingLine][\USymbChar{37}{235}] % WHITE SQUARE WITH VERTICAL BISECTING LINE + \definesymbol[WhiteUpPointingTriangleWithDot][\USymbChar{37}{236}] % WHITE UP-POINTING TRIANGLE WITH DOT + \definesymbol[UpPointingTriangleWithLeftHalfBlack][\USymbChar{37}{237}] % UP-POINTING TRIANGLE WITH LEFT HALF BLACK + \definesymbol[UpPointingTriangleWithRightHalfBlack][\USymbChar{37}{238}] % UP-POINTING TRIANGLE WITH RIGHT HALF BLACK + \definesymbol[LargeCircle][\USymbChar{37}{239}] % LARGE CIRCLE + \definesymbol[UpperLeftTriangle][\USymbChar{37}{248}] % [Unassigned U+25F8] + \definesymbol[UpperRightTriangle][\USymbChar{37}{249}] % [Unassigned U+25F9] + \definesymbol[LowerLeftTriangle][\USymbChar{37}{250}] % [Unassigned U+25FA] + \definesymbol[WhiteMediumSquare][\USymbChar{37}{251}] % [Unassigned U+25FB] + \definesymbol[BlackMediumSquare][\USymbChar{37}{252}] % [Unassigned U+25FC] + \definesymbol[WhiteMediumSmallSquare][\USymbChar{37}{253}] % [Unassigned U+25FD] + \definesymbol[BlackMediumSmallSquare][\USymbChar{37}{254}] % [Unassigned U+25FE] + \definesymbol[LowerRightTriangle][\USymbChar{37}{255}] % [Unassigned U+25FF] + +\stopsymbolset + +\startsymbolset[Unicode Control Code Graphics] % 0x25A0: Requires UnicodeRegular25 + + \definesymbol[WhiteSquareWithUpperLeftQuadrant][\USymbChar{37}{240}] % WHITE SQUARE WITH UPPER LEFT QUADRANT + \definesymbol[WhiteSquareWithLowerLeftQuadrant][\USymbChar{37}{241}] % WHITE SQUARE WITH LOWER LEFT QUADRANT + \definesymbol[WhiteSquareWithLowerRightQuadrant][\USymbChar{37}{242}] % WHITE SQUARE WITH LOWER RIGHT QUADRANT + \definesymbol[WhiteSquareWithUpperRightQuadrant][\USymbChar{37}{243}] % WHITE SQUARE WITH UPPER RIGHT QUADRANT + \definesymbol[WhiteCircleWithUpperLeftQuadrant][\USymbChar{37}{244}] % WHITE CIRCLE WITH UPPER LEFT QUADRANT + \definesymbol[WhiteCircleWithLowerLeftQuadrant][\USymbChar{37}{245}] % WHITE CIRCLE WITH LOWER LEFT QUADRANT + \definesymbol[WhiteCircleWithLowerRightQuadrant][\USymbChar{37}{246}] % WHITE CIRCLE WITH LOWER RIGHT QUADRANT + \definesymbol[WhiteCircleWithUpperRightQuadrant][\USymbChar{37}{247}] % WHITE CIRCLE WITH UPPER RIGHT QUADRANT + +\stopsymbolset + +\startsymbolset[Unicode Weather and Astrological] % 0x2600: Requires UnicodeRegular26 + + \definesymbol[BlackSunWithRays][\USymbChar{38}{0}] % BLACK SUN WITH RAYS + \definesymbol[Cloud][\USymbChar{38}{1}] % CLOUD + \definesymbol[Umbrella][\USymbChar{38}{2}] % UMBRELLA + \definesymbol[Snowman][\USymbChar{38}{3}] % SNOWMAN + \definesymbol[Comet][\USymbChar{38}{4}] % COMET + \definesymbol[BlackStar][\USymbChar{38}{5}] % BLACK STAR + \definesymbol[WhiteStar][\USymbChar{38}{6}] % WHITE STAR + \definesymbol[Lightning][\USymbChar{38}{7}] % LIGHTNING + \definesymbol[Thunderstorm][\USymbChar{38}{8}] % THUNDERSTORM + \definesymbol[Sun][\USymbChar{38}{9}] % SUN + \definesymbol[AscendingNode][\USymbChar{38}{10}] % ASCENDING NODE + \definesymbol[DescendingNode][\USymbChar{38}{11}] % DESCENDING NODE + \definesymbol[Conjunction][\USymbChar{38}{12}] % CONJUNCTION + \definesymbol[Opposition][\USymbChar{38}{13}] % OPPOSITION + \definesymbol[FirstQuarterMoon][\USymbChar{38}{61}] % FIRST QUARTER MOON + \definesymbol[LastQuarterMoon][\USymbChar{38}{62}] % LAST QUARTER MOON + \definesymbol[Mercury][\USymbChar{38}{63}] % MERCURY + \definesymbol[FemaleSign][\USymbChar{38}{64}] % FEMALE SIGN + \definesymbol[Earth][\USymbChar{38}{65}] % EARTH + \definesymbol[MaleSign][\USymbChar{38}{66}] % MALE SIGN + \definesymbol[Jupiter][\USymbChar{38}{67}] % JUPITER + \definesymbol[Saturn][\USymbChar{38}{68}] % SATURN + \definesymbol[Uranus][\USymbChar{38}{69}] % URANUS + \definesymbol[Neptune][\USymbChar{38}{70}] % NEPTUNE + \definesymbol[Pluto][\USymbChar{38}{71}] % PLUTO + +\stopsymbolset + +\startsymbolset[Unicode Miscellaneous] % 0x2600: Requires UnicodeRegular26 + + \definesymbol[BlackTelephone][\USymbChar{38}{14}] % BLACK TELEPHONE + \definesymbol[WhiteTelephone][\USymbChar{38}{15}] % WHITE TELEPHONE + \definesymbol[BallotBox][\USymbChar{38}{16}] % BALLOT BOX + \definesymbol[BallotBoxWithCheck][\USymbChar{38}{17}] % BALLOT BOX WITH CHECK + \definesymbol[BallotBoxWithX][\USymbChar{38}{18}] % BALLOT BOX WITH X + \definesymbol[Saltire][\USymbChar{38}{19}] % SALTIRE + \definesymbol[ReversedRotatedFloralHeartBullet][\USymbChar{38}{25}] % REVERSED ROTATED FLORAL HEART BULLET + \definesymbol[WheelOfDharma][\USymbChar{38}{56}] % WHEEL OF DHARMA + \definesymbol[WhiteFrowningFace][\USymbChar{38}{57}] % WHITE FROWNING FACE + \definesymbol[WhiteSmilingFace][\USymbChar{38}{58}] % WHITE SMILING FACE + \definesymbol[BlackSmilingFace][\USymbChar{38}{59}] % BLACK SMILING FACE + \definesymbol[WhiteSunWithRays][\USymbChar{38}{60}] % WHITE SUN WITH RAYS + \definesymbol[HotSprings][\USymbChar{38}{104}] % HOT SPRINGS + +\stopsymbolset + +\startsymbolset[Unicode Japanese Chess] % 0x2600: Requires UnicodeRegular26 + + \definesymbol[WhiteShogiPiece][\USymbChar{38}{22}] % [Unassigned U+2616] + \definesymbol[BlackShogiPiece][\USymbChar{38}{23}] % [Unassigned U+2617] + +\stopsymbolset + +\startsymbolset[Unicode Pointing Hand] % 0x2600: Requires UnicodeRegular26 + + \definesymbol[BlackLeftPointingIndex][\USymbChar{38}{26}] % BLACK LEFT POINTING INDEX + \definesymbol[BlackRightPointingIndex][\USymbChar{38}{27}] % BLACK RIGHT POINTING INDEX + \definesymbol[WhiteLeftPointingIndex][\USymbChar{38}{28}] % WHITE LEFT POINTING INDEX + \definesymbol[WhiteUpPointingIndex][\USymbChar{38}{29}] % WHITE UP POINTING INDEX + \definesymbol[WhiteRightPointingIndex][\USymbChar{38}{30}] % WHITE RIGHT POINTING INDEX + \definesymbol[WhiteDownPointingIndex][\USymbChar{38}{31}] % WHITE DOWN POINTING INDEX + +\stopsymbolset + +\startsymbolset[Unicode Warning Signs] % 0x2600: Requires UnicodeRegular26 + + \definesymbol[SkullAndCrossbones][\USymbChar{38}{32}] % SKULL AND CROSSBONES + \definesymbol[CautionSign][\USymbChar{38}{33}] % CAUTION SIGN + \definesymbol[RadioactiveSign][\USymbChar{38}{34}] % RADIOACTIVE SIGN + \definesymbol[BiohazardSign][\USymbChar{38}{35}] % BIOHAZARD SIGN + +\stopsymbolset + +\startsymbolset[Unicode Healing Signs] % 0x2600: Requires UnicodeRegular26 + \definesymbol[Caduceus][\USymbChar{38}{36}] % CADUCEUS + \definesymbol[Ankh][\USymbChar{38}{37}] % ANKH +\stopsymbolset + +\startsymbolset[Unicode Religious and Political] % 0x2600: Requires UnicodeRegular26 and 27 + + \definesymbol[OrthodoxCross][\USymbChar{38}{38}] % ORTHODOX CROSS + \definesymbol[ChiRho][\USymbChar{38}{39}] % CHI RHO + \definesymbol[CrossOfLorraine][\USymbChar{38}{40}] % CROSS OF LORRAINE + \definesymbol[CrossOfJerusalem][\USymbChar{38}{41}] % CROSS OF JERUSALEM + \definesymbol[StarAndCrescent][\USymbChar{38}{42}] % STAR AND CRESCENT + \definesymbol[FarsiSymbol][\USymbChar{38}{43}] % FARSI SYMBOL + \definesymbol[AdiShakti][\USymbChar{38}{44}] % ADI SHAKTI + \definesymbol[HammerAndSickle][\USymbChar{38}{45}] % HAMMER AND SICKLE + \definesymbol[PeaceSymbol][\USymbChar{38}{46}] % PEACE SYMBOL + \definesymbol[YinYang][\USymbChar{38}{47}] % YIN YANG + \definesymbol[WestSyriacCross][\USymbChar{38}{112}] % WEST SYRIAC CROSS + \definesymbol[EastSyriacCross][\USymbChar{38}{113}] % EAST SYRIAC CROSS +% 27xx starts here + \definesymbol[OutlinedGreekCross][\USymbCharZapf{39}{25}] % OUTLINED GREEK CROSS + \definesymbol[HeavyGreekCross][\USymbCharZapf{39}{26}] % HEAVY GREEK CROSS + \definesymbol[OpenCentreCross][\USymbCharZapf{39}{27}] % OPEN CENTRE CROSS + \definesymbol[HeavyOpenCentreCross][\USymbCharZapf{39}{28}] % HEAVY OPEN CENTRE CROSS + \definesymbol[LatinCross][\USymbCharZapf{39}{29}] % LATIN CROSS + \definesymbol[ShadowedWhiteLatinCross][\USymbCharZapf{39}{30}] % SHADOWED WHITE LATIN CROSS + \definesymbol[OutlinedLatinCross][\USymbCharZapf{39}{31}] % OUTLINED LATIN CROSS + \definesymbol[MalteseCross][\USymbCharZapf{39}{32}] % MALTESE CROSS + \definesymbol[StarOfDavid][\USymbCharZapf{39}{33}] % STAR OF DAVID + + +\stopsymbolset + +\startsymbolset[Unicode Trigram] % 0x2600: Requires UnicodeRegular26 + + \definesymbol[TrigramForHeaven][\USymbChar{38}{48}] % TRIGRAM FOR HEAVEN + \definesymbol[TrigramForLake][\USymbChar{38}{49}] % TRIGRAM FOR LAKE + \definesymbol[TrigramForFire][\USymbChar{38}{50}] % TRIGRAM FOR FIRE + \definesymbol[TrigramForThunder][\USymbChar{38}{51}] % TRIGRAM FOR THUNDER + \definesymbol[TrigramForWind][\USymbChar{38}{52}] % TRIGRAM FOR WIND + \definesymbol[TrigramForWater][\USymbChar{38}{53}] % TRIGRAM FOR WATER + \definesymbol[TrigramForMountain][\USymbChar{38}{54}] % TRIGRAM FOR MOUNTAIN + \definesymbol[TrigramForEarth][\USymbChar{38}{55}] % TRIGRAM FOR EARTH + +\stopsymbolset + +\startsymbolset[Unicode Zodiac] % 0x2600: Requires UnicodeRegular26 + + \definesymbol[Aries][\USymbChar{38}{72}] % ARIES + \definesymbol[Taurus][\USymbChar{38}{73}] % TAURUS + \definesymbol[Gemini][\USymbChar{38}{74}] % GEMINI + \definesymbol[Cancer][\USymbChar{38}{75}] % CANCER + \definesymbol[Leo][\USymbChar{38}{76}] % LEO + \definesymbol[Virgo][\USymbChar{38}{77}] % VIRGO + \definesymbol[Libra][\USymbChar{38}{78}] % LIBRA + \definesymbol[Scorpius][\USymbChar{38}{79}] % SCORPIUS + \definesymbol[Sagittarius][\USymbChar{38}{80}] % SAGITTARIUS + \definesymbol[Capricorn][\USymbChar{38}{81}] % CAPRICORN + \definesymbol[Aquarius][\USymbChar{38}{82}] % AQUARIUS + \definesymbol[Pisces][\USymbChar{38}{83}] % PISCES + +\stopsymbolset + +\startsymbolset[Unicode Chess] % 0x2600: Requires UnicodeRegular26 + + \definesymbol[WhiteChessKing][\USymbChar{38}{84}] % WHITE CHESS KING + \definesymbol[WhiteChessQueen][\USymbChar{38}{85}] % WHITE CHESS QUEEN + \definesymbol[WhiteChessRook][\USymbChar{38}{86}] % WHITE CHESS ROOK + \definesymbol[WhiteChessBishop][\USymbChar{38}{87}] % WHITE CHESS BISHOP + \definesymbol[WhiteChessKnight][\USymbChar{38}{88}] % WHITE CHESS KNIGHT + \definesymbol[WhiteChessPawn][\USymbChar{38}{89}] % WHITE CHESS PAWN + \definesymbol[BlackChessKing][\USymbChar{38}{90}] % BLACK CHESS KING + \definesymbol[BlackChessQueen][\USymbChar{38}{91}] % BLACK CHESS QUEEN + \definesymbol[BlackChessRook][\USymbChar{38}{92}] % BLACK CHESS ROOK + \definesymbol[BlackChessBishop][\USymbChar{38}{93}] % BLACK CHESS BISHOP + \definesymbol[BlackChessKnight][\USymbChar{38}{94}] % BLACK CHESS KNIGHT + \definesymbol[BlackChessPawn][\USymbChar{38}{95}] % BLACK CHESS PAWN + +\stopsymbolset + +\startsymbolset[Unicode Playing Card] % 0x2600: Requires UnicodeRegular26 + + \definesymbol[BlackSpadeSuit][\USymbChar{38}{96}] % BLACK SPADE SUIT + \definesymbol[WhiteHeartSuit][\USymbChar{38}{97}] % WHITE HEART SUIT + \definesymbol[WhiteDiamondSuit][\USymbChar{38}{98}] % WHITE DIAMOND SUIT + \definesymbol[BlackClubSuit][\USymbChar{38}{99}] % BLACK CLUB SUIT + \definesymbol[WhiteSpadeSuit][\USymbChar{38}{100}] % WHITE SPADE SUIT + \definesymbol[BlackHeartSuit][\USymbChar{38}{101}] % BLACK HEART SUIT + \definesymbol[BlackDiamondSuit][\USymbChar{38}{102}] % BLACK DIAMOND SUIT + \definesymbol[WhiteClubSuit][\USymbChar{38}{103}] % WHITE CLUB SUIT + +\stopsymbolset + +\startsymbolset[Unicode Musical] % 0x2600: Requires UnicodeRegular26 + + \definesymbol[QuarterNote][\USymbChar{38}{105}] % QUARTER NOTE + \definesymbol[EighthNote][\USymbChar{38}{106}] % EIGHTH NOTE + \definesymbol[BeamedEighthNotes][\USymbChar{38}{107}] % BEAMED EIGHTH NOTES + \definesymbol[BeamedSixteenthNotes][\USymbChar{38}{108}] % BEAMED SIXTEENTH NOTES + \definesymbol[MusicFlatSign][\USymbChar{38}{109}] % MUSIC FLAT SIGN + \definesymbol[MusicNaturalSign][\USymbChar{38}{110}] % MUSIC NATURAL SIGN + \definesymbol[MusicSharpSign][\USymbChar{38}{111}] % MUSIC SHARP SIGN + +\stopsymbolset + +\startsymbolset[Unicode Recycling] % 0x2600: Requires UnicodeRegular26 + + \definesymbol[UniversalRecycling][\USymbChar{38}{114}] % [Unassigned U+2672] + \definesymbol[Type1Plastics][\USymbChar{38}{115}] % [Unassigned U+2673] + \definesymbol[Type2Plastics][\USymbChar{38}{116}] % [Unassigned U+2674] + \definesymbol[Type3Plastics][\USymbChar{38}{117}] % [Unassigned U+2675] + \definesymbol[Type4Plastics][\USymbChar{38}{118}] % [Unassigned U+2676] + \definesymbol[Type5Plastics][\USymbChar{38}{119}] % [Unassigned U+2677] + \definesymbol[Type6Plastics][\USymbChar{38}{120}] % [Unassigned U+2678] + \definesymbol[Type7Plastics][\USymbChar{38}{121}] % [Unassigned U+2679] + \definesymbol[GenericMaterials][\USymbChar{38}{122}] % [Unassigned U+267A] + \definesymbol[BlackUniversalRecycling][\USymbChar{38}{123}] % [Unassigned U+267B] + \definesymbol[RecycledPaper][\USymbChar{38}{124}] % [Unassigned U+267C] + \definesymbol[PartiallyRecycledPaper][\USymbChar{38}{125}] % [Unassigned U+267D] + +\stopsymbolset + +\startsymbolset[Unicode Dice] % 0x2600: Requires UnicodeRegular26 + + \definesymbol[DieFace1][\USymbChar{38}{128}] % [Unassigned U+2680] + \definesymbol[DieFace2][\USymbChar{38}{129}] % [Unassigned U+2681] + \definesymbol[DieFace3][\USymbChar{38}{130}] % [Unassigned U+2682] + \definesymbol[DieFace4][\USymbChar{38}{131}] % [Unassigned U+2683] + \definesymbol[DieFace5][\USymbChar{38}{132}] % [Unassigned U+2684] + \definesymbol[DieFace6][\USymbChar{38}{133}] % [Unassigned U+2685] + +\stopsymbolset + +\startsymbolset[Unicode Go Markers] % 0x2600: Requires UnicodeRegular26 + + \definesymbol[WhiteCircleWithDotRight][\USymbChar{38}{134}] % [Unassigned U+2686] + \definesymbol[WhiteCircleWithTwoDots][\USymbChar{38}{135}] % [Unassigned U+2687] + \definesymbol[BlackCircleWithWhiteDotRight][\USymbChar{38}{136}] % [Unassigned U+2688] + \definesymbol[BlackCircleWithTwoWhiteDots][\USymbChar{38}{137}] % [Unassigned U+2689] + +\stopsymbolset + +\startsymbolset[Unicode Scissors] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[UpperBladeScissors][\USymbCharZapf{39}{1}] % UPPER BLADE SCISSORS + \definesymbol[BlackScissors][\USymbCharZapf{39}{2}] % BLACK SCISSORS + \definesymbol[LowerBladeScissors][\USymbCharZapf{39}{3}] % LOWER BLADE SCISSORS + \definesymbol[WhiteScissors][\USymbCharZapf{39}{4}] % WHITE SCISSORS + +\stopsymbolset + +\startsymbolset[Unicode Dingbats] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[TelephoneLocationSign][\USymbCharZapf{39}{6}] % TELEPHONE LOCATION SIGN + \definesymbol[TapeDrive][\USymbCharZapf{39}{7}] % TAPE DRIVE + \definesymbol[Airplane][\USymbCharZapf{39}{8}] % AIRPLANE + \definesymbol[Envelope][\USymbCharZapf{39}{9}] % ENVELOPE + \definesymbol[VictoryHand][\USymbCharZapf{39}{12}] % VICTORY HAND + \definesymbol[WritingHand][\USymbCharZapf{39}{13}] % WRITING HAND + \definesymbol[LowerRightPencil][\USymbCharZapf{39}{14}] % LOWER RIGHT PENCIL + \definesymbol[Pencil][\USymbCharZapf{39}{15}] % PENCIL + \definesymbol[UpperRightPencil][\USymbCharZapf{39}{16}] % UPPER RIGHT PENCIL + \definesymbol[WhiteNib][\USymbCharZapf{39}{17}] % WHITE NIB + \definesymbol[BlackNib][\USymbCharZapf{39}{18}] % BLACK NIB + \definesymbol[BlackDiamondMinusWhiteX][\USymbCharZapf{39}{86}] % BLACK DIAMOND MINUS WHITE X + +\stopsymbolset + +\startsymbolset[Unicode Checks and Xs] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[CheckMark][\USymbCharZapf{39}{19}] % CHECK MARK + \definesymbol[HeavyCheckMark][\USymbCharZapf{39}{20}] % HEAVY CHECK MARK + \definesymbol[MultiplicationX][\USymbCharZapf{39}{21}] % MULTIPLICATION X + \definesymbol[HeavyMultiplicationX][\USymbCharZapf{39}{22}] % HEAVY MULTIPLICATION X + \definesymbol[BallotX][\USymbCharZapf{39}{23}] % BALLOT X + \definesymbol[HeavyBallotX][\USymbCharZapf{39}{24}] % HEAVY BALLOT X + +\stopsymbolset + +\startsymbolset[Unicode Stars] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[FourTeardropSpokedAsterisk][\USymbCharZapf{39}{34}] % FOUR TEARDROP-SPOKED ASTERISK + \definesymbol[FourBalloonSpokedAsterisk][\USymbCharZapf{39}{35}] % FOUR BALLOON-SPOKED ASTERISK + \definesymbol[HeavyFourBalloonSpokedAsterisk][\USymbCharZapf{39}{36}] % HEAVY FOUR BALLOON-SPOKED ASTERISK + \definesymbol[FourClubSpokedAsterisk][\USymbCharZapf{39}{37}] % FOUR CLUB-SPOKED ASTERISK + \definesymbol[BlackFourPointedStar][\USymbCharZapf{39}{38}] % BLACK FOUR POINTED STAR + \definesymbol[WhiteFourPointedStar][\USymbCharZapf{39}{39}] % WHITE FOUR POINTED STAR + \definesymbol[StressOutlinedWhiteStar][\USymbCharZapf{39}{41}] % STRESS OUTLINED WHITE STAR + \definesymbol[CircledWhiteStar][\USymbCharZapf{39}{42}] % CIRCLED WHITE STAR + \definesymbol[OpenCentreBlackStar][\USymbCharZapf{39}{43}] % OPEN CENTRE BLACK STAR + \definesymbol[BlackCentreWhiteStar][\USymbCharZapf{39}{44}] % BLACK CENTRE WHITE STAR + \definesymbol[OutlinedBlackStar][\USymbCharZapf{39}{45}] % OUTLINED BLACK STAR + \definesymbol[HeavyOutlinedBlackStar][\USymbCharZapf{39}{46}] % HEAVY OUTLINED BLACK STAR + \definesymbol[PinwheelStar][\USymbCharZapf{39}{47}] % PINWHEEL STAR + \definesymbol[ShadowedWhiteStar][\USymbCharZapf{39}{48}] % SHADOWED WHITE STAR + \definesymbol[HeavyAsterisk][\USymbCharZapf{39}{49}] % HEAVY ASTERISK + \definesymbol[OpenCentreAsterisk][\USymbCharZapf{39}{50}] % OPEN CENTRE ASTERISK + \definesymbol[EightSpokedAsterisk][\USymbCharZapf{39}{51}] % EIGHT SPOKED ASTERISK + \definesymbol[EightPointedBlackStar][\USymbCharZapf{39}{52}] % EIGHT POINTED BLACK STAR + \definesymbol[EightPointedPinwheelStar][\USymbCharZapf{39}{53}] % EIGHT POINTED PINWHEEL STAR + \definesymbol[SixPointedBlackStar][\USymbCharZapf{39}{54}] % SIX POINTED BLACK STAR + \definesymbol[EightPointedRectilinearBlackStar][\USymbCharZapf{39}{55}] % EIGHT POINTED RECTILINEAR BLACK STAR + \definesymbol[HeavyEightPointedRectilinearBlackStar][\USymbCharZapf{39}{56}] % HEAVY EIGHT POINTED RECTILINEAR BLACK STAR + \definesymbol[TwelvePointedBlackStar][\USymbCharZapf{39}{57}] % TWELVE POINTED BLACK STAR + \definesymbol[SixteenPointedAsterisk][\USymbCharZapf{39}{58}] % SIXTEEN POINTED ASTERISK + \definesymbol[TeardropSpokedAsterisk][\USymbCharZapf{39}{59}] % TEARDROP-SPOKED ASTERISK + \definesymbol[OpenCentreTeardropSpokedAsterisk][\USymbCharZapf{39}{60}] % OPEN CENTRE TEARDROP-SPOKED ASTERISK + \definesymbol[HeavyTeardropSpokedAsterisk][\USymbCharZapf{39}{61}] % HEAVY TEARDROP-SPOKED ASTERISK + \definesymbol[SixPetalledBlackAndWhiteFlorette][\USymbCharZapf{39}{62}] % SIX PETALLED BLACK AND WHITE FLORETTE + \definesymbol[BlackFlorette][\USymbCharZapf{39}{63}] % BLACK FLORETTE + \definesymbol[WhiteFlorette][\USymbCharZapf{39}{64}] % WHITE FLORETTE + \definesymbol[EightPetalledOutlinedBlackFlorette][\USymbCharZapf{39}{65}] % EIGHT PETALLED OUTLINED BLACK FLORETTE + \definesymbol[CircledOpenCentreEightPointedStar][\USymbCharZapf{39}{66}] % CIRCLED OPEN CENTRE EIGHT POINTED STAR + \definesymbol[HeavyTeardropSpokedPinwheelAsterisk][\USymbCharZapf{39}{67}] % HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK + \definesymbol[Sparkle][\USymbCharZapf{39}{71}] % SPARKLE + \definesymbol[HeavySparkle][\USymbCharZapf{39}{72}] % HEAVY SPARKLE + \definesymbol[Balloon-spokedAsterisk][\USymbCharZapf{39}{73}] % BALLOON-SPOKED ASTERISK + \definesymbol[EightTeardrop-spokedPropellerAsterisk][\USymbCharZapf{39}{74}] % EIGHT TEARDROP-SPOKED PROPELLER ASTERISK + \definesymbol[HeavyEightTeardrop-spokedPropellerAsterisk][\USymbCharZapf{39}{75}] % HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK + +\stopsymbolset + +\startsymbolset[Unicode Snowflakes] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[Snowflake][\USymbCharZapf{39}{68}] % SNOWFLAKE + \definesymbol[TightTrifoliateSnowflake][\USymbCharZapf{39}{69}] % TIGHT TRIFOLIATE SNOWFLAKE + \definesymbol[HeavyChevronSnowflake][\USymbCharZapf{39}{70}] % HEAVY CHEVRON SNOWFLAKE + +\stopsymbolset + +\startsymbolset[Unicode Shadowed Shapes] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[ShadowedWhiteCircle][\USymbCharZapf{39}{77}] % SHADOWED WHITE CIRCLE + \definesymbol[LowerRightDrop-shadowedWhiteSquare][\USymbCharZapf{39}{79}] % LOWER RIGHT DROP-SHADOWED WHITE SQUARE + \definesymbol[UpperRightDrop-shadowedWhiteSquare][\USymbCharZapf{39}{80}] % UPPER RIGHT DROP-SHADOWED WHITE SQUARE + \definesymbol[LowerRightShadowedWhiteSquare][\USymbCharZapf{39}{81}] % LOWER RIGHT SHADOWED WHITE SQUARE + \definesymbol[UpperRightShadowedWhiteSquare][\USymbCharZapf{39}{82}] % UPPER RIGHT SHADOWED WHITE SQUARE + +\stopsymbolset + +\startsymbolset[Unicode Bars] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[LightVerticalBar][\USymbCharZapf{39}{88}] % LIGHT VERTICAL BAR + \definesymbol[MediumVerticalBar][\USymbCharZapf{39}{89}] % MEDIUM VERTICAL BAR + \definesymbol[HeavyVerticalBar][\USymbCharZapf{39}{90}] % HEAVY VERTICAL BAR + +\stopsymbolset + +\startsymbolset[Unicode Dingbat Punctuation] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[HeavySingleTurnedCommaQuotationMark][\USymbCharZapf{39}{91}] % HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT + \definesymbol[HeavySingleCommaQuotationMark][\USymbCharZapf{39}{92}] % HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT + \definesymbol[HeavyDoubleTurnedCommaQuotationMark][\USymbCharZapf{39}{93}] % HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT + \definesymbol[HeavyDoubleCommaQuotationMark][\USymbCharZapf{39}{94}] % HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT + \definesymbol[CurvedStemParagraphSign][\USymbCharZapf{39}{97}] % CURVED STEM PARAGRAPH SIGN ORNAMENT + \definesymbol[HeavyExclamationMark][\USymbCharZapf{39}{98}] % HEAVY EXCLAMATION MARK ORNAMENT + \definesymbol[HeavyHeartExclamationMark][\USymbCharZapf{39}{99}] % HEAVY HEART EXCLAMATION MARK ORNAMENT + +\stopsymbolset + +\startsymbolset[Unicode Hearts] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[HeavyBlackHeart][\USymbCharZapf{39}{100}] % HEAVY BLACK HEART + \definesymbol[RotatedHeavyBlackHeartBullet][\USymbCharZapf{39}{101}] % ROTATED HEAVY BLACK HEART BULLET + \definesymbol[FloralHeart][\USymbCharZapf{39}{102}] % FLORAL HEART + \definesymbol[RotatedFloralHeartBullet][\USymbCharZapf{39}{103}] % ROTATED FLORAL HEART BULLET + +\stopsymbolset + +\startsymbolset[Unicode Negative Circled Digits] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[CircledOne][\USymbCharZapf{39}{118}] % DINGBAT NEGATIVE CIRCLED DIGIT ONE + \definesymbol[CircledTwo][\USymbCharZapf{39}{119}] % DINGBAT NEGATIVE CIRCLED DIGIT TWO + \definesymbol[CircledThree][\USymbCharZapf{39}{120}] % DINGBAT NEGATIVE CIRCLED DIGIT THREE + \definesymbol[CircledFour][\USymbCharZapf{39}{121}] % DINGBAT NEGATIVE CIRCLED DIGIT FOUR + \definesymbol[CircledFive][\USymbCharZapf{39}{122}] % DINGBAT NEGATIVE CIRCLED DIGIT FIVE + \definesymbol[CircledSix][\USymbCharZapf{39}{123}] % DINGBAT NEGATIVE CIRCLED DIGIT SIX + \definesymbol[CircledSeven][\USymbCharZapf{39}{124}] % DINGBAT NEGATIVE CIRCLED DIGIT SEVEN + \definesymbol[CircledEight][\USymbCharZapf{39}{125}] % DINGBAT NEGATIVE CIRCLED DIGIT EIGHT + \definesymbol[CircledNine][\USymbCharZapf{39}{126}] % DINGBAT NEGATIVE CIRCLED DIGIT NINE + \definesymbol[CircledTen][\USymbCharZapf{39}{127}] % DINGBAT NEGATIVE CIRCLED NUMBER TEN + +\stopsymbolset + +\startsymbolset[Unicode Circled Sans-serif Digits] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[CircledOne][\USymbCharZapf{39}{128}] % DINGBAT CIRCLED SANS-SERIF DIGIT ONE + \definesymbol[CircledTwo][\USymbCharZapf{39}{129}] % DINGBAT CIRCLED SANS-SERIF DIGIT TWO + \definesymbol[CircledThree][\USymbCharZapf{39}{130}] % DINGBAT CIRCLED SANS-SERIF DIGIT THREE + \definesymbol[CircledFour][\USymbCharZapf{39}{131}] % DINGBAT CIRCLED SANS-SERIF DIGIT FOUR + \definesymbol[CircledFive][\USymbCharZapf{39}{132}] % DINGBAT CIRCLED SANS-SERIF DIGIT FIVE + \definesymbol[CircledSix][\USymbCharZapf{39}{133}] % DINGBAT CIRCLED SANS-SERIF DIGIT SIX + \definesymbol[CircledSeven][\USymbCharZapf{39}{134}] % DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN + \definesymbol[CircledEight][\USymbCharZapf{39}{135}] % DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT + \definesymbol[CircledNine][\USymbCharZapf{39}{136}] % DINGBAT CIRCLED SANS-SERIF DIGIT NINE + \definesymbol[CircledTen][\USymbCharZapf{39}{137}] % DINGBAT CIRCLED SANS-SERIF NUMBER TEN + +\stopsymbolset + +\startsymbolset[Unicode Negative Circled Sans-serif Digits] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[CircledOne][\USymbCharZapf{39}{138}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE + \definesymbol[CircledTwo][\USymbCharZapf{39}{139}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO + \definesymbol[CircledThree][\USymbCharZapf{39}{140}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE + \definesymbol[CircledFour][\USymbCharZapf{39}{141}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR + \definesymbol[CircledFive][\USymbCharZapf{39}{142}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE + \definesymbol[CircledSix][\USymbCharZapf{39}{143}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX + \definesymbol[CircledSeven][\USymbCharZapf{39}{144}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN + \definesymbol[CircledEight][\USymbCharZapf{39}{145}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT + \definesymbol[CircledNine][\USymbCharZapf{39}{146}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE + \definesymbol[CircledTen][\USymbCharZapf{39}{147}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN + +\stopsymbolset + +\startsymbolset[Unicode Dingbat Arrows] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[HeavyWideHeadedRightwardsArrow][\USymbCharZapf{39}{148}] % HEAVY WIDE-HEADED RIGHTWARDS ARROW + \definesymbol[HeavySouthEastArrow][\USymbCharZapf{39}{152}] % HEAVY SOUTH EAST ARROW + \definesymbol[HeavyRightwardsArrow][\USymbCharZapf{39}{153}] % HEAVY RIGHTWARDS ARROW + \definesymbol[HeavyNorthEastArrow][\USymbCharZapf{39}{154}] % HEAVY NORTH EAST ARROW + \definesymbol[DraftingPointRightwardsArrow][\USymbCharZapf{39}{155}] % DRAFTING POINT RIGHTWARDS ARROW + \definesymbol[HeavyRoundTippedRightwardsArrow][\USymbCharZapf{39}{156}] % HEAVY ROUND-TIPPED RIGHTWARDS ARROW + \definesymbol[TriangleHeadedRightwardsArrow][\USymbCharZapf{39}{157}] % TRIANGLE-HEADED RIGHTWARDS ARROW + \definesymbol[HeavyTriangleHeadedRightwardsArrow][\USymbCharZapf{39}{158}] % HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW + \definesymbol[DashedTriangleHeadedRightwardsArrow][\USymbCharZapf{39}{159}] % DASHED TRIANGLE-HEADED RIGHTWARDS ARROW + \definesymbol[HeavyDashedTriangleHeadedRightwardsArrow][\USymbCharZapf{39}{160}] % HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW + \definesymbol[BlackRightwardsArrow][\USymbCharZapf{39}{161}] % BLACK RIGHTWARDS ARROW + \definesymbol[3DTopLightedRightwardsArrowhead][\USymbCharZapf{39}{162}] % THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD + \definesymbol[3DBottomLightedRightwardsArrowhead][\USymbCharZapf{39}{163}] % THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD + \definesymbol[BlackRightwardsArrowhead][\USymbCharZapf{39}{164}] % BLACK RIGHTWARDS ARROWHEAD + \definesymbol[HeavyBlackCurvedDownwardsAndRightwardsArrow][\USymbCharZapf{39}{165}] % HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW + \definesymbol[HeavyBlackCurvedUpwardsAndRightwardsArrow][\USymbCharZapf{39}{166}] % HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW + \definesymbol[SquatBlackRightwardsArrow][\USymbCharZapf{39}{167}] % SQUAT BLACK RIGHTWARDS ARROW + \definesymbol[HeavyConcavePointedBlackRightwardsArrow][\USymbCharZapf{39}{168}] % HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW + \definesymbol[CircledHeavyWhiteRightwardsArrow][\USymbCharZapf{39}{178}] % CIRCLED HEAVY WHITE RIGHTWARDS ARROW + \definesymbol[OpenOutlinedRightwardsArrow][\USymbCharZapf{39}{190}] % OPEN-OUTLINED RIGHTWARDS ARROW + +\stopsymbolset + +\startsymbolset[Unicode Shadowed Arrows] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[RightShadedWhiteRightwardsArrow][\USymbCharZapf{39}{169}] % RIGHT-SHADED WHITE RIGHTWARDS ARROW + \definesymbol[LeftShadedWhiteRightwardsArrow][\USymbCharZapf{39}{170}] % LEFT-SHADED WHITE RIGHTWARDS ARROW + \definesymbol[BackTiltedShadowedWhiteRightwardsArrow][\USymbCharZapf{39}{171}] % BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW + \definesymbol[FrontTiltedShadowedWhiteRightwardsArrow][\USymbCharZapf{39}{172}] % FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW + \definesymbol[HeavyLowerRightShadowedWhiteRightwardsArrow][\USymbCharZapf{39}{173}] % HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW + \definesymbol[HeavyUpperRightShadowedWhiteRightwardsArrow][\USymbCharZapf{39}{174}] % HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW + \definesymbol[NotchedLowerRightShadowedWhiteRightwardsArrow][\USymbCharZapf{39}{175}] % NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW + \definesymbol[NotchedUpperRightShadowedWhiteRightwardsArrow][\USymbCharZapf{39}{177}] % NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW + +\stopsymbolset + +\startsymbolset[Unicode Tailed Arrows] % 0x2700: Requires UnicodeRegular27 + + \definesymbol[WhiteFeatheredRightwardsArrow][\USymbCharZapf{39}{179}] % WHITE-FEATHERED RIGHTWARDS ARROW + \definesymbol[BlackFeatheredSouthEastArrow][\USymbCharZapf{39}{180}] % BLACK-FEATHERED SOUTH EAST ARROW + \definesymbol[BlackFeatheredRightwardsArrow][\USymbCharZapf{39}{181}] % BLACK-FEATHERED RIGHTWARDS ARROW + \definesymbol[BlackFeatheredNorthEastArrow][\USymbCharZapf{39}{182}] % BLACK-FEATHERED NORTH EAST ARROW + \definesymbol[HeavyBlack-featheredSouthEastArrow][\USymbCharZapf{39}{183}] % HEAVY BLACK-FEATHERED SOUTH EAST ARROW + \definesymbol[HeavyBlackFeatheredRightwardsArrow][\USymbCharZapf{39}{184}] % HEAVY BLACK-FEATHERED RIGHTWARDS ARROW + \definesymbol[HeavyBlackFeatheredNorthEastArrow][\USymbCharZapf{39}{185}] % HEAVY BLACK-FEATHERED NORTH EAST ARROW + \definesymbol[TeardropBarbedRightwardsArrow][\USymbCharZapf{39}{186}] % TEARDROP-BARBED RIGHTWARDS ARROW + \definesymbol[HeavyTeardropShankedRightwardsArrow][\USymbCharZapf{39}{187}] % HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW + \definesymbol[WedgeTailedRightwardsArrow][\USymbCharZapf{39}{188}] % WEDGE-TAILED RIGHTWARDS ARROW + \definesymbol[HeavyWedgeTailedRightwardsArrow][\USymbCharZapf{39}{189}] % HEAVY WEDGE-TAILED RIGHTWARDS ARROW + +\stopsymbolset + +\endinput diff --git a/tex/context/base/symb-uni.tex b/tex/context/base/symb-uni.tex deleted file mode 100644 index fcd613e7f..000000000 --- a/tex/context/base/symb-uni.tex +++ /dev/null @@ -1,1123 +0,0 @@ -%D \module -%D [ file=symb-uni, -%D version=2004.11.15, -%D title=\CONTEXT\ Symbol Libraries, -%D subtitle=Unicode Symbols, -%D author=Adam T. Lindsay, -%D date=\currentdate, -%D copyright={Adam T. Lindsay / PRAGMA}] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C prepared by Adam T. Lindsay. - -%D The content of this file originates from the Unicode standard, via some -%D original XSLT scripts and some hand-editing. This file is open for use -%D with the ConTeXt typesetting system. -%D -%D Adam considers the symbol names and categories to be stable, as they're -%D directly derived from the Unicode standard. -%D -%D \startitemize[packed] -%D \item Originated 2004-01-05 by Adam T. Lindsay -%D \item Updated 2004-01-16 with Unicode vector 0x27xx and some in -%D 215x and 246x -%D \item Updated 2004-11-15 to include default fonts for MacOSX and -%D \XETEX. -%D \stopitemize -%D -%D The following macros adapt to default fonts (that contain the characters) -%D in MacOSX. The font selection mechanism is likely to change once \XETEX\ -%D correctly supports \type{\doiffontcharelse}. - -\doifundefinedelse{XeTeXversion} - {\let\USymbChar \uchar - \let\USymbCharTwo \uchar - \let\USymbCharZapf\uchar} - {\def\USymbChar #1#2{\bgroup\UnicodeSymbolFont \uchar{#1}{#2}\relax\egroup} - \def\USymbCharTwo #1#2{\bgroup\UnicodeSymbolFontTwo \uchar{#1}{#2}\relax\egroup} - \def\USymbCharZapf#1#2{\bgroup\UnicodeSymbolFontZapf\uchar{#1}{#2}\relax\egroup} - \doifundefined{UnicodeSymbolFont} {\definefont[UnicodeSymbolFont] ["Apple Symbols" sa *]} - \doifundefined{UnicodeSymbolFontTwo} {\definefont[UnicodeSymbolFontTwo] ["Lucida Grande" sa *]} - \doifundefined{UnicodeSymbolFontZapf}{\definefont[UnicodeSymbolFontZapf]["Zapf Dingbats" sa *]}} - -\startsymbolset[Unicode Additional Punctuation] % 0x2000: Requires UnicodeRegular20 - - \definesymbol[Caret][\USymbChar{32}{56}] % CARET - \definesymbol[ReferenceMark][\USymbChar{32}{59}] % REFERENCE MARK - \definesymbol[DoubleExclamationMark][\USymbChar{32}{60}] % DOUBLE EXCLAMATION MARK - \definesymbol[Interrobang][\USymbChar{32}{61}] % INTERROBANG - \definesymbol[Overline][\USymbChar{32}{62}] % OVERLINE - \definesymbol[Undertie][\USymbChar{32}{63}] % UNDERTIE - \definesymbol[CharacterTie][\USymbChar{32}{64}] % CHARACTER TIE - \definesymbol[CaretInsertionPoint][\USymbChar{32}{65}] % CARET INSERTION POINT - \definesymbol[Asterism][\USymbChar{32}{66}] % ASTERISM - \definesymbol[HyphenBullet][\USymbChar{32}{67}] % HYPHEN BULLET - \definesymbol[FractionSlash][\USymbChar{32}{68}] % FRACTION SLASH - \definesymbol[LeftSquareBracketWithQuill][\USymbChar{32}{69}] % LEFT SQUARE BRACKET WITH QUILL - \definesymbol[RightSquareBracketWithQuill][\USymbChar{32}{70}] % RIGHT SQUARE BRACKET WITH QUILL - \definesymbol[QuestionExclamationMark][\USymbChar{32}{72}] % QUESTION EXCLAMATION MARK - \definesymbol[ExclamationQuestionMark][\USymbChar{32}{73}] % EXCLAMATION QUESTION MARK - \definesymbol[TironianSignEt][\USymbChar{32}{74}] % TIRONIAN SIGN ET - \definesymbol[ReversedPilcrowSign][\USymbChar{32}{75}] % REVERSED PILCROW SIGN - \definesymbol[BlackLeftwardsBullet][\USymbChar{32}{76}] % BLACK LEFTWARDS BULLET - \definesymbol[BlackRightwardsBullet][\USymbChar{32}{77}] % BLACK RIGHTWARDS BULLET - -\stopsymbolset - -\startsymbolset[Unicode Currency] % 0x20A0: Requires UnicodeRegular20 - - \definesymbol[Euro-currencySign][\USymbChar{32}{160}] % EURO-CURRENCY SIGN - \definesymbol[ColonSign][\USymbChar{32}{161}] % COLON SIGN - \definesymbol[CruzeiroSign][\USymbChar{32}{162}] % CRUZEIRO SIGN - \definesymbol[FrenchFrancSign][\USymbChar{32}{163}] % FRENCH FRANC SIGN - \definesymbol[LiraSign][\USymbChar{32}{164}] % LIRA SIGN - \definesymbol[MillSign][\USymbChar{32}{165}] % MILL SIGN - \definesymbol[NairaSign][\USymbChar{32}{166}] % NAIRA SIGN - \definesymbol[PesetaSign][\USymbChar{32}{167}] % PESETA SIGN - \definesymbol[RupeeSign][\USymbChar{32}{168}] % RUPEE SIGN - \definesymbol[WonSign][\USymbChar{32}{169}] % WON SIGN - \definesymbol[NewSheqelSign][\USymbChar{32}{170}] % NEW SHEQEL SIGN - \definesymbol[DongSign][\USymbChar{32}{171}] % DONG SIGN - \definesymbol[EuroSign][\USymbChar{32}{172}] % EURO SIGN - \definesymbol[KipSign][\USymbChar{32}{173}] % KIP SIGN - \definesymbol[TugrikSign][\USymbChar{32}{174}] % TUGRIK SIGN - \definesymbol[DrachmaSign][\USymbChar{32}{175}] % DRACHMA SIGN - \definesymbol[GermanPennySign][\USymbChar{32}{176}] % [Unassigned U+20B0] - \definesymbol[PfennigSign][\USymbChar{32}{176}] % Unofficial duplicate - \definesymbol[PesoSign][\USymbChar{32}{177}] % [Unassigned U+20B1] - -\stopsymbolset - - -\startsymbolset[Unicode Letterlike] % 0x2100: Requires UnicodeRegular21 - - \definesymbol[DegreeCelsius][\USymbChar{33}{3}] % DEGREE CELSIUS - \definesymbol[EulerConstant][\USymbChar{33}{7}] % EULER CONSTANT - \definesymbol[Scruple][\USymbChar{33}{8}] % SCRUPLE - \definesymbol[DegreeFahrenheit][\USymbChar{33}{9}] % DEGREE FAHRENHEIT - \definesymbol[PlanckConstant][\USymbChar{33}{14}] % PLANCK CONSTANT - \definesymbol[PlanckConstantOverTwoPi][\USymbChar{33}{15}] % PLANCK CONSTANT OVER TWO PI - \definesymbol[LBBarSymbol][\USymbChar{33}{20}] % L B BAR SYMBOL - \definesymbol[Versicle][\USymbChar{33}{35}] % VERSICLE - \definesymbol[OunceSign][\USymbChar{33}{37}] % OUNCE SIGN - \definesymbol[OhmSign][\USymbChar{33}{38}] % OHM SIGN - \definesymbol[InvertedOhmSign][\USymbChar{33}{39}] % INVERTED OHM SIGN - \definesymbol[KelvinSign][\USymbChar{33}{42}] % KELVIN SIGN - \definesymbol[AngstromSign][\USymbChar{33}{43}] % ANGSTROM SIGN - \definesymbol[EstimatedSymbol][\USymbChar{33}{46}] % ESTIMATED SYMBOL - -\stopsymbolset - -\startsymbolset[Unicode Letterlike Additional] % 0x2100: Requires UnicodeRegular21 - - \definesymbol[AccountOf][\USymbChar{33}{0}] % ACCOUNT OF - \definesymbol[AddressedToTheSubject][\USymbChar{33}{1}] % ADDRESSED TO THE SUBJECT - \definesymbol[CareOf][\USymbChar{33}{5}] % CARE OF - \definesymbol[CadaUna][\USymbChar{33}{6}] % CADA UNA - \definesymbol[CentreLineSymbol][\USymbChar{33}{4}] % CENTRE LINE SYMBOL - \definesymbol[NumeroSign][\USymbChar{33}{22}] % NUMERO SIGN - \definesymbol[SoundRecordingCopyright][\USymbChar{33}{23}] % SOUND RECORDING COPYRIGHT - \definesymbol[PrescriptionTake][\USymbChar{33}{30}] % PRESCRIPTION TAKE - \definesymbol[Response][\USymbChar{33}{31}] % RESPONSE - \definesymbol[ServiceMark][\USymbChar{33}{32}] % SERVICE MARK - \definesymbol[TelephoneSign][\USymbChar{33}{33}] % TELEPHONE SIGN - \definesymbol[TradeMarkSign][\USymbChar{33}{34}] % TRADE MARK SIGN - \definesymbol[InformationSource][\USymbChar{33}{57}] % INFORMATION SOURCE - \definesymbol[PropertyLine][\USymbChar{33}{74}] % [Unassigned U+214A] - -\stopsymbolset - -\startsymbolset[Unicode Script Letterlike] % 0x2100: Requires UnicodeRegular21 - - \definesymbol[ScriptSmallG][\USymbChar{33}{10}] % SCRIPT SMALL G - \definesymbol[ScriptCapitalH][\USymbChar{33}{11}] % SCRIPT CAPITAL H - \definesymbol[ScriptCapitalI][\USymbChar{33}{16}] % SCRIPT CAPITAL I - \definesymbol[ScriptCapitalL][\USymbChar{33}{18}] % SCRIPT CAPITAL L - \definesymbol[ScriptSmallL][\USymbChar{33}{19}] % SCRIPT SMALL L - \definesymbol[ScriptCapitalP][\USymbChar{33}{24}] % SCRIPT CAPITAL P - \definesymbol[ScriptCapitalR][\USymbChar{33}{27}] % SCRIPT CAPITAL R - \definesymbol[ScriptSmallE][\USymbChar{33}{47}] % SCRIPT SMALL E - \definesymbol[ScriptCapitalE][\USymbChar{33}{48}] % SCRIPT CAPITAL E - \definesymbol[ScriptCapitalF][\USymbChar{33}{49}] % SCRIPT CAPITAL F - \definesymbol[ScriptCapitalB][\USymbChar{33}{44}] % SCRIPT CAPITAL B - \definesymbol[ScriptCapitalM][\USymbChar{33}{51}] % SCRIPT CAPITAL M - \definesymbol[ScriptSmallO][\USymbChar{33}{52}] % SCRIPT SMALL O - -\stopsymbolset - -\startsymbolset[Unicode Hebrew Letterlike] % 0x2100: Requires UnicodeRegular21 - - \definesymbol[AlefSymbol][\USymbChar{33}{53}] % ALEF SYMBOL - \definesymbol[BetSymbol][\USymbChar{33}{54}] % BET SYMBOL - \definesymbol[GimelSymbol][\USymbChar{33}{55}] % GIMEL SYMBOL - \definesymbol[DaletSymbol][\USymbChar{33}{56}] % DALET SYMBOL - -\stopsymbolset - -\startsymbolset[Unicode Turned Letterlike] % 0x2100: Requires UnicodeRegular21 - - \definesymbol[RotatedCapitalQ][\USymbChar{33}{58}] % ROTATED CAPITAL Q - \definesymbol[TurnedSansSerifCapitalG][\USymbChar{33}{65}] % [Unassigned U+2141] - \definesymbol[TurnedSansSerifCapitalL][\USymbChar{33}{66}] % [Unassigned U+2142] - \definesymbol[ReversedSansSerifCapitalL][\USymbChar{33}{67}] % [Unassigned U+2143] - \definesymbol[TurnedSansSerifCapitalY][\USymbChar{33}{68}] % [Unassigned U+2144] - \definesymbol[TurnedAmpersand][\USymbChar{33}{75}] % [Unassigned U+214B] - \definesymbol[TurnedGreekSmallLetterIota][\USymbChar{33}{41}] % TURNED GREEK SMALL LETTER IOTA - \definesymbol[TurnedCapitalF][\USymbChar{33}{50}] % TURNED CAPITAL F - -\stopsymbolset - -\startsymbolset[Unicode Black-letter Letterlike] % 0x2100: Requires UnicodeRegular21 - - \definesymbol[BlackLetterCapitalH][\USymbChar{33}{12}] % BLACK-LETTER CAPITAL H - \definesymbol[BlackLetterCapitalI][\USymbChar{33}{17}] % BLACK-LETTER CAPITAL I - \definesymbol[BlackLetterCapitalR][\USymbChar{33}{28}] % BLACK-LETTER CAPITAL R - \definesymbol[BlackLetterCapitalZ][\USymbChar{33}{40}] % BLACK-LETTER CAPITAL Z - \definesymbol[BlackLetterCapitalC][\USymbChar{33}{45}] % BLACK-LETTER CAPITAL C - -\stopsymbolset - -\startsymbolset[Unicode Double-struck Letterlike Math] % 0x2100: Requires UnicodeRegular21 - - \definesymbol[DoubleStruckCapitalC][\USymbChar{33}{2}] % DOUBLE-STRUCK CAPITAL C - \definesymbol[DoubleStruckCapitalH][\USymbChar{33}{13}] % DOUBLE-STRUCK CAPITAL H - \definesymbol[DoubleStruckCapitalN][\USymbChar{33}{21}] % DOUBLE-STRUCK CAPITAL N - \definesymbol[DoubleStruckCapitalP][\USymbChar{33}{25}] % DOUBLE-STRUCK CAPITAL P - \definesymbol[DoubleStruckCapitalQ][\USymbChar{33}{26}] % DOUBLE-STRUCK CAPITAL Q - \definesymbol[DoubleStruckCapitalR][\USymbChar{33}{29}] % DOUBLE-STRUCK CAPITAL R - \definesymbol[DoubleStruckCapitalZ][\USymbChar{33}{36}] % DOUBLE-STRUCK CAPITAL Z - \definesymbol[DoubleStruckSmallGamma][\USymbChar{33}{61}] % [Unassigned U+213D] - \definesymbol[DoubleStruckCapitalGamma][\USymbChar{33}{62}] % [Unassigned U+213E] - \definesymbol[DoubleStruckCapitalPi][\USymbChar{33}{63}] % [Unassigned U+213F] - \definesymbol[DoubleStruckNArySummation][\USymbChar{33}{64}] % [Unassigned U+2140] - \definesymbol[DoubleStruckItalicCapitalD][\USymbChar{33}{69}] % [Unassigned U+2145] - \definesymbol[DoubleStruckItalicSmallD][\USymbChar{33}{70}] % [Unassigned U+2146] - \definesymbol[DoubleStruckItalicSmallE][\USymbChar{33}{71}] % [Unassigned U+2147] - \definesymbol[DoubleStruckItalicSmallI][\USymbChar{33}{72}] % [Unassigned U+2148] - \definesymbol[DoubleStruckItalicSmallJ][\USymbChar{33}{73}] % [Unassigned U+2149] - -\stopsymbolset - -\startsymbolset[Unicode Roman Numerals] % 0x2150: Requires UnicodeRegular21 - - \definesymbol[RomanNumeralOne][\USymbCharTwo{33}{96}] % ROMAN NUMERAL ONE - \definesymbol[RomanNumeralTwo][\USymbCharTwo{33}{97}] % ROMAN NUMERAL TWO - \definesymbol[RomanNumeralThree][\USymbCharTwo{33}{98}] % ROMAN NUMERAL THREE - \definesymbol[RomanNumeralFour][\USymbCharTwo{33}{99}] % ROMAN NUMERAL FOUR - \definesymbol[RomanNumeralFive][\USymbCharTwo{33}{100}] % ROMAN NUMERAL FIVE - \definesymbol[RomanNumeralSix][\USymbCharTwo{33}{101}] % ROMAN NUMERAL SIX - \definesymbol[RomanNumeralSeven][\USymbCharTwo{33}{102}] % ROMAN NUMERAL SEVEN - \definesymbol[RomanNumeralEight][\USymbCharTwo{33}{103}] % ROMAN NUMERAL EIGHT - \definesymbol[RomanNumeralNine][\USymbCharTwo{33}{104}] % ROMAN NUMERAL NINE - \definesymbol[RomanNumeralTen][\USymbCharTwo{33}{105}] % ROMAN NUMERAL TEN - \definesymbol[RomanNumeralEleven][\USymbCharTwo{33}{106}] % ROMAN NUMERAL ELEVEN - \definesymbol[RomanNumeralTwelve][\USymbCharTwo{33}{107}] % ROMAN NUMERAL TWELVE - \definesymbol[RomanNumeralFifty][\USymbCharTwo{33}{108}] % ROMAN NUMERAL FIFTY - \definesymbol[RomanNumeralOneHundred][\USymbCharTwo{33}{109}] % ROMAN NUMERAL ONE HUNDRED - \definesymbol[RomanNumeralFiveHundred][\USymbCharTwo{33}{110}] % ROMAN NUMERAL FIVE HUNDRED - \definesymbol[RomanNumeralOneThousand][\USymbCharTwo{33}{111}] % ROMAN NUMERAL ONE THOUSAND - \definesymbol[RomanNumeralOneThousandCD][\USymbCharTwo{33}{128}] % ROMAN NUMERAL ONE THOUSAND C D - \definesymbol[RomanNumeralFiveThousand][\USymbCharTwo{33}{129}] % ROMAN NUMERAL FIVE THOUSAND - \definesymbol[RomanNumeralTenThousand][\USymbCharTwo{33}{130}] % ROMAN NUMERAL TEN THOUSAND - \definesymbol[RomanNumeralReversedOneHundred][\USymbCharTwo{33}{131}] % ROMAN NUMERAL REVERSED ONE HUNDRED - -\stopsymbolset - -\startsymbolset[Unicode Small Roman Numerals] % 0x2150: Requires UnicodeRegular21 - - \definesymbol[SmallRomanNumeralOne][\USymbCharTwo{33}{112}] % SMALL ROMAN NUMERAL ONE - \definesymbol[SmallRomanNumeralTwo][\USymbCharTwo{33}{113}] % SMALL ROMAN NUMERAL TWO - \definesymbol[SmallRomanNumeralThree][\USymbCharTwo{33}{114}] % SMALL ROMAN NUMERAL THREE - \definesymbol[SmallRomanNumeralFour][\USymbCharTwo{33}{115}] % SMALL ROMAN NUMERAL FOUR - \definesymbol[SmallRomanNumeralFive][\USymbCharTwo{33}{116}] % SMALL ROMAN NUMERAL FIVE - \definesymbol[SmallRomanNumeralSix][\USymbCharTwo{33}{117}] % SMALL ROMAN NUMERAL SIX - \definesymbol[SmallRomanNumeralSeven][\USymbCharTwo{33}{118}] % SMALL ROMAN NUMERAL SEVEN - \definesymbol[SmallRomanNumeralEight][\USymbCharTwo{33}{119}] % SMALL ROMAN NUMERAL EIGHT - \definesymbol[SmallRomanNumeralNine][\USymbCharTwo{33}{120}] % SMALL ROMAN NUMERAL NINE - \definesymbol[SmallRomanNumeralTen][\USymbCharTwo{33}{121}] % SMALL ROMAN NUMERAL TEN - \definesymbol[SmallRomanNumeralEleven][\USymbCharTwo{33}{122}] % SMALL ROMAN NUMERAL ELEVEN - \definesymbol[SmallRomanNumeralTwelve][\USymbCharTwo{33}{123}] % SMALL ROMAN NUMERAL TWELVE - \definesymbol[SmallRomanNumeralFifty][\USymbCharTwo{33}{124}] % SMALL ROMAN NUMERAL FIFTY - \definesymbol[SmallRomanNumeralOneHundred][\USymbCharTwo{33}{125}] % SMALL ROMAN NUMERAL ONE HUNDRED - \definesymbol[SmallRomanNumeralFiveHundred][\USymbCharTwo{33}{126}] % SMALL ROMAN NUMERAL FIVE HUNDRED - \definesymbol[SmallRomanNumeralOneThousand][\USymbCharTwo{33}{127}] % SMALL ROMAN NUMERAL ONE THOUSAND - -\stopsymbolset - -\startsymbolset[Unicode Arrows] % 0x2190: Requires UnicodeRegular21 - - \definesymbol[LeftwardsArrow][\USymbChar{33}{144}] % LEFTWARDS ARROW - \definesymbol[UpwardsArrow][\USymbChar{33}{145}] % UPWARDS ARROW - \definesymbol[RightwardsArrow][\USymbChar{33}{146}] % RIGHTWARDS ARROW - \definesymbol[DownwardsArrow][\USymbChar{33}{147}] % DOWNWARDS ARROW - \definesymbol[LeftRightArrow][\USymbChar{33}{148}] % LEFT RIGHT ARROW - \definesymbol[UpDownArrow][\USymbChar{33}{149}] % UP DOWN ARROW - \definesymbol[NorthWestArrow][\USymbChar{33}{150}] % NORTH WEST ARROW - \definesymbol[NorthEastArrow][\USymbChar{33}{151}] % NORTH EAST ARROW - \definesymbol[SouthEastArrow][\USymbChar{33}{152}] % SOUTH EAST ARROW - \definesymbol[SouthWestArrow][\USymbChar{33}{153}] % SOUTH WEST ARROW - \definesymbol[LeftwardsArrowWithStroke][\USymbChar{33}{154}] % LEFTWARDS ARROW WITH STROKE - \definesymbol[RightwardsArrowWithStroke][\USymbChar{33}{155}] % RIGHTWARDS ARROW WITH STROKE - \definesymbol[LeftwardsWaveArrow][\USymbChar{33}{156}] % LEFTWARDS WAVE ARROW - \definesymbol[RightwardsWaveArrow][\USymbChar{33}{157}] % RIGHTWARDS WAVE ARROW - \definesymbol[LeftwardsTwoHeadedArrow][\USymbChar{33}{158}] % LEFTWARDS TWO HEADED ARROW - \definesymbol[UpwardsTwoHeadedArrow][\USymbChar{33}{159}] % UPWARDS TWO HEADED ARROW - \definesymbol[RightwardsTwoHeadedArrow][\USymbChar{33}{160}] % RIGHTWARDS TWO HEADED ARROW - \definesymbol[DownwardsTwoHeadedArrow][\USymbChar{33}{161}] % DOWNWARDS TWO HEADED ARROW - \definesymbol[LeftwardsArrowWithTail][\USymbChar{33}{162}] % LEFTWARDS ARROW WITH TAIL - \definesymbol[RightwardsArrowWithTail][\USymbChar{33}{163}] % RIGHTWARDS ARROW WITH TAIL - \definesymbol[LeftwardsArrowFromBar][\USymbChar{33}{164}] % LEFTWARDS ARROW FROM BAR - \definesymbol[UpwardsArrowFromBar][\USymbChar{33}{165}] % UPWARDS ARROW FROM BAR - \definesymbol[RightwardsArrowFromBar][\USymbChar{33}{166}] % RIGHTWARDS ARROW FROM BAR - \definesymbol[DownwardsArrowFromBar][\USymbChar{33}{167}] % DOWNWARDS ARROW FROM BAR - \definesymbol[UpDownArrowWithBase][\USymbChar{33}{168}] % UP DOWN ARROW WITH BASE - \definesymbol[LeftwardsArrowWithHook][\USymbChar{33}{169}] % LEFTWARDS ARROW WITH HOOK - \definesymbol[RightwardsArrowWithHook][\USymbChar{33}{170}] % RIGHTWARDS ARROW WITH HOOK - \definesymbol[LeftwardsArrowWithLoop][\USymbChar{33}{171}] % LEFTWARDS ARROW WITH LOOP - \definesymbol[RightwardsArrowWithLoop][\USymbChar{33}{172}] % RIGHTWARDS ARROW WITH LOOP - \definesymbol[LeftRightWaveArrow][\USymbChar{33}{173}] % LEFT RIGHT WAVE ARROW - \definesymbol[LeftRightArrowWithStroke][\USymbChar{33}{174}] % LEFT RIGHT ARROW WITH STROKE - \definesymbol[DownwardsZigzagArrow][\USymbChar{33}{175}] % DOWNWARDS ZIGZAG ARROW - \definesymbol[UpwardsArrowWithTipLeftwards][\USymbChar{33}{176}] % UPWARDS ARROW WITH TIP LEFTWARDS - \definesymbol[UpwardsArrowWithTipRightwards][\USymbChar{33}{177}] % UPWARDS ARROW WITH TIP RIGHTWARDS - \definesymbol[DownwardsArrowWithTipLeftwards][\USymbChar{33}{178}] % DOWNWARDS ARROW WITH TIP LEFTWARDS - \definesymbol[DownwardsArrowWithTipRightwards][\USymbChar{33}{179}] % DOWNWARDS ARROW WITH TIP RIGHTWARDS - \definesymbol[RightwardsArrowWithCornerDownwards][\USymbChar{33}{180}] % RIGHTWARDS ARROW WITH CORNER DOWNWARDS - \definesymbol[DownwardsArrowWithCornerLeftwards][\USymbChar{33}{181}] % DOWNWARDS ARROW WITH CORNER LEFTWARDS - \definesymbol[AnticlockwiseTopSemicircleArrow][\USymbChar{33}{182}] % ANTICLOCKWISE TOP SEMICIRCLE ARROW - \definesymbol[ClockwiseTopSemicircleArrow][\USymbChar{33}{183}] % CLOCKWISE TOP SEMICIRCLE ARROW - \definesymbol[NorthWestArrowToLongBar][\USymbChar{33}{184}] % NORTH WEST ARROW TO LONG BAR - \definesymbol[AnticlockwiseOpenCircleArrow][\USymbChar{33}{186}] % ANTICLOCKWISE OPEN CIRCLE ARROW - \definesymbol[ClockwiseOpenCircleArrow][\USymbChar{33}{187}] % CLOCKWISE OPEN CIRCLE ARROW - \definesymbol[LeftwardsHarpoonWithBarbUpwards][\USymbChar{33}{188}] % LEFTWARDS HARPOON WITH BARB UPWARDS - \definesymbol[LeftwardsHarpoonWithBarbDownwards][\USymbChar{33}{189}] % LEFTWARDS HARPOON WITH BARB DOWNWARDS - \definesymbol[UpwardsHarpoonWithBarbRightwards][\USymbChar{33}{190}] % UPWARDS HARPOON WITH BARB RIGHTWARDS - \definesymbol[UpwardsHarpoonWithBarbLeftwards][\USymbChar{33}{191}] % UPWARDS HARPOON WITH BARB LEFTWARDS - \definesymbol[RightwardsHarpoonWithBarbUpwards][\USymbChar{33}{192}] % RIGHTWARDS HARPOON WITH BARB UPWARDS - \definesymbol[RightwardsHarpoonWithBarbDownwards][\USymbChar{33}{193}] % RIGHTWARDS HARPOON WITH BARB DOWNWARDS - \definesymbol[DownwardsHarpoonWithBarbRightwards][\USymbChar{33}{194}] % DOWNWARDS HARPOON WITH BARB RIGHTWARDS - \definesymbol[DownwardsHarpoonWithBarbLeftwards][\USymbChar{33}{195}] % DOWNWARDS HARPOON WITH BARB LEFTWARDS - \definesymbol[LeftwardsSquiggleArrow][\USymbChar{33}{220}] % LEFTWARDS SQUIGGLE ARROW - \definesymbol[RightwardsSquiggleArrow][\USymbChar{33}{221}] % RIGHTWARDS SQUIGGLE ARROW - \definesymbol[UpwardsArrowWithDoubleStroke][\USymbChar{33}{222}] % UPWARDS ARROW WITH DOUBLE STROKE - \definesymbol[DownwardsArrowWithDoubleStroke][\USymbChar{33}{223}] % DOWNWARDS ARROW WITH DOUBLE STROKE - \definesymbol[LeftwardsDashedArrow][\USymbChar{33}{224}] % LEFTWARDS DASHED ARROW - \definesymbol[UpwardsDashedArrow][\USymbChar{33}{225}] % UPWARDS DASHED ARROW - \definesymbol[RightwardsDashedArrow][\USymbChar{33}{226}] % RIGHTWARDS DASHED ARROW - \definesymbol[DownwardsDashedArrow][\USymbChar{33}{227}] % DOWNWARDS DASHED ARROW - \definesymbol[LeftwardsArrowToBar][\USymbChar{33}{228}] % LEFTWARDS ARROW TO BAR - \definesymbol[RightwardsArrowToBar][\USymbChar{33}{229}] % RIGHTWARDS ARROW TO BAR - \definesymbol[LeftwardsWhiteArrow][\USymbChar{33}{230}] % LEFTWARDS WHITE ARROW - \definesymbol[UpwardsWhiteArrow][\USymbChar{33}{231}] % UPWARDS WHITE ARROW - \definesymbol[RightwardsWhiteArrow][\USymbChar{33}{232}] % RIGHTWARDS WHITE ARROW - \definesymbol[DownwardsWhiteArrow][\USymbChar{33}{233}] % DOWNWARDS WHITE ARROW - \definesymbol[UpwardsWhiteArrowFromBar][\USymbChar{33}{234}] % UPWARDS WHITE ARROW FROM BAR - \definesymbol[UpwardsWhiteArrowOnPedestal][\USymbChar{33}{235}] % UPWARDS WHITE ARROW ON PEDESTAL - \definesymbol[UpwardsWhiteArrowOnPedestalWithHorizontalBar][\USymbChar{33}{236}] % UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR - \definesymbol[UpwardsWhiteArrowOnPedestalWithVerticalBar][\USymbChar{33}{237}] % UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR - \definesymbol[RightwardsWhiteArrowFromWall][\USymbChar{33}{240}] % RIGHTWARDS WHITE ARROW FROM WALL - \definesymbol[NorthWestArrowToCorner][\USymbChar{33}{241}] % NORTH WEST ARROW TO CORNER - \definesymbol[SouthEastArrowToCorner][\USymbChar{33}{242}] % SOUTH EAST ARROW TO CORNER - \definesymbol[UpDownWhiteArrow][\USymbChar{33}{243}] % UP DOWN WHITE ARROW - -\stopsymbolset - -\startsymbolset[Unicode Multi Arrows] % 0x2190: Requires UnicodeRegular21 - - \definesymbol[LeftwardsArrowToBarOverRightwardsArrowToBar][\USymbChar{33}{185}] % LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR - \definesymbol[RightwardsArrowOverLeftwardsArrow][\USymbChar{33}{196}] % RIGHTWARDS ARROW OVER LEFTWARDS ARROW - \definesymbol[UpwardsArrowLeftwardsOfDownwardsArrow][\USymbChar{33}{197}] % UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW - \definesymbol[LeftwardsArrowOverRightwardsArrow][\USymbChar{33}{198}] % LEFTWARDS ARROW OVER RIGHTWARDS ARROW - \definesymbol[LeftwardsPairedArrows][\USymbChar{33}{199}] % LEFTWARDS PAIRED ARROWS - \definesymbol[UpwardsPairedArrows][\USymbChar{33}{200}] % UPWARDS PAIRED ARROWS - \definesymbol[RightwardsPairedArrows][\USymbChar{33}{201}] % RIGHTWARDS PAIRED ARROWS - \definesymbol[DownwardsPairedArrows][\USymbChar{33}{202}] % DOWNWARDS PAIRED ARROWS - \definesymbol[LeftwardsHarpoonOverRightwardsHarpoon][\USymbChar{33}{203}] % LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON - \definesymbol[RightwardsHarpoonOverLeftwardsHarpoon][\USymbChar{33}{204}] % RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON - \definesymbol[LeftwardsDoubleArrowWithStroke][\USymbChar{33}{205}] % LEFTWARDS DOUBLE ARROW WITH STROKE - \definesymbol[LeftRightDoubleArrowWithStroke][\USymbChar{33}{206}] % LEFT RIGHT DOUBLE ARROW WITH STROKE - \definesymbol[RightwardsDoubleArrowWithStroke][\USymbChar{33}{207}] % RIGHTWARDS DOUBLE ARROW WITH STROKE - \definesymbol[LeftwardsDoubleArrow][\USymbChar{33}{208}] % LEFTWARDS DOUBLE ARROW - \definesymbol[UpwardsDoubleArrow][\USymbChar{33}{209}] % UPWARDS DOUBLE ARROW - \definesymbol[RightwardsDoubleArrow][\USymbChar{33}{210}] % RIGHTWARDS DOUBLE ARROW - \definesymbol[DownwardsDoubleArrow][\USymbChar{33}{211}] % DOWNWARDS DOUBLE ARROW - \definesymbol[LeftRightDoubleArrow][\USymbChar{33}{212}] % LEFT RIGHT DOUBLE ARROW - \definesymbol[UpDownDoubleArrow][\USymbChar{33}{213}] % UP DOWN DOUBLE ARROW - \definesymbol[NorthWestDoubleArrow][\USymbChar{33}{214}] % NORTH WEST DOUBLE ARROW - \definesymbol[NorthEastDoubleArrow][\USymbChar{33}{215}] % NORTH EAST DOUBLE ARROW - \definesymbol[SouthEastDoubleArrow][\USymbChar{33}{216}] % SOUTH EAST DOUBLE ARROW - \definesymbol[SouthWestDoubleArrow][\USymbChar{33}{217}] % SOUTH WEST DOUBLE ARROW - \definesymbol[LeftwardsTripleArrow][\USymbChar{33}{218}] % LEFTWARDS TRIPLE ARROW - \definesymbol[RightwardsTripleArrow][\USymbChar{33}{219}] % RIGHTWARDS TRIPLE ARROW - \definesymbol[UpwardsWhiteDoubleArrow][\USymbChar{33}{238}] % UPWARDS WHITE DOUBLE ARROW - \definesymbol[UpwardsWhiteDoubleArrowOnPedestal][\USymbChar{33}{239}] % UPWARDS WHITE DOUBLE ARROW ON PEDESTAL - -\stopsymbolset - - -\startsymbolset[Unicode Optical Character Recognition] % 0x2440: Requires UnicodeRegular24 - - \definesymbol[OcrHook][\USymbChar{36}{64}] % OCR HOOK - \definesymbol[OcrChair][\USymbChar{36}{65}] % OCR CHAIR - \definesymbol[OcrFork][\USymbChar{36}{66}] % OCR FORK - \definesymbol[OcrInvertedFork][\USymbChar{36}{67}] % OCR INVERTED FORK - \definesymbol[OcrBeltBuckle][\USymbChar{36}{68}] % OCR BELT BUCKLE - \definesymbol[OcrBowTie][\USymbChar{36}{69}] % OCR BOW TIE - \definesymbol[OcrBranchBankIdentification][\USymbChar{36}{70}] % OCR BRANCH BANK IDENTIFICATION - \definesymbol[OcrAmountOfCheck][\USymbChar{36}{71}] % OCR AMOUNT OF CHECK - \definesymbol[OcrDash][\USymbChar{36}{72}] % OCR DASH - \definesymbol[OcrCustomerAccountNumber][\USymbChar{36}{73}] % OCR CUSTOMER ACCOUNT NUMBER - \definesymbol[OcrDoubleBackslash][\USymbChar{36}{74}] % OCR DOUBLE BACKSLASH - -\stopsymbolset - - -\startsymbolset[Unicode Box Drawing] % 0x2500: Requires UnicodeRegular25 - - \definesymbol[LightHorizontal][\USymbChar{37}{0}] % BOX DRAWINGS LIGHT HORIZONTAL - \definesymbol[HeavyHorizontal][\USymbChar{37}{1}] % BOX DRAWINGS HEAVY HORIZONTAL - \definesymbol[LightVertical][\USymbChar{37}{2}] % BOX DRAWINGS LIGHT VERTICAL - \definesymbol[HeavyVertical][\USymbChar{37}{3}] % BOX DRAWINGS HEAVY VERTICAL - \definesymbol[LightTripleDashHorizontal][\USymbChar{37}{4}] % BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL - \definesymbol[HeavyTripleDashHorizontal][\USymbChar{37}{5}] % BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL - \definesymbol[LightTripleDashVertical][\USymbChar{37}{6}] % BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL - \definesymbol[HeavyTripleDashVertical][\USymbChar{37}{7}] % BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL - \definesymbol[LightQuadrupleDashHorizontal][\USymbChar{37}{8}] % BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL - \definesymbol[HeavyQuadrupleDashHorizontal][\USymbChar{37}{9}] % BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL - \definesymbol[LightQuadrupleDashVertical][\USymbChar{37}{10}] % BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL - \definesymbol[HeavyQuadrupleDashVertical][\USymbChar{37}{11}] % BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL - \definesymbol[LightDownAndRight][\USymbChar{37}{12}] % BOX DRAWINGS LIGHT DOWN AND RIGHT - \definesymbol[DownLightAndRightHeavy][\USymbChar{37}{13}] % BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY - \definesymbol[DownHeavyAndRightLight][\USymbChar{37}{14}] % BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT - \definesymbol[HeavyDownAndRight][\USymbChar{37}{15}] % BOX DRAWINGS HEAVY DOWN AND RIGHT - \definesymbol[LightDownAndLeft][\USymbChar{37}{16}] % BOX DRAWINGS LIGHT DOWN AND LEFT - \definesymbol[DownLightAndLeftHeavy][\USymbChar{37}{17}] % BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY - \definesymbol[DownHeavyAndLeftLight][\USymbChar{37}{18}] % BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT - \definesymbol[HeavyDownAndLeft][\USymbChar{37}{19}] % BOX DRAWINGS HEAVY DOWN AND LEFT - \definesymbol[LightUpAndRight][\USymbChar{37}{20}] % BOX DRAWINGS LIGHT UP AND RIGHT - \definesymbol[UpLightAndRightHeavy][\USymbChar{37}{21}] % BOX DRAWINGS UP LIGHT AND RIGHT HEAVY - \definesymbol[UpHeavyAndRightLight][\USymbChar{37}{22}] % BOX DRAWINGS UP HEAVY AND RIGHT LIGHT - \definesymbol[HeavyUpAndRight][\USymbChar{37}{23}] % BOX DRAWINGS HEAVY UP AND RIGHT - \definesymbol[LightUpAndLeft][\USymbChar{37}{24}] % BOX DRAWINGS LIGHT UP AND LEFT - \definesymbol[UpLightAndLeftHeavy][\USymbChar{37}{25}] % BOX DRAWINGS UP LIGHT AND LEFT HEAVY - \definesymbol[UpHeavyAndLeftLight][\USymbChar{37}{26}] % BOX DRAWINGS UP HEAVY AND LEFT LIGHT - \definesymbol[HeavyUpAndLeft][\USymbChar{37}{27}] % BOX DRAWINGS HEAVY UP AND LEFT - \definesymbol[LightVerticalAndRight][\USymbChar{37}{28}] % BOX DRAWINGS LIGHT VERTICAL AND RIGHT - \definesymbol[VerticalLightAndRightHeavy][\USymbChar{37}{29}] % BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY - \definesymbol[UpHeavyAndRightDownLight][\USymbChar{37}{30}] % BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT - \definesymbol[DownHeavyAndRightUpLight][\USymbChar{37}{31}] % BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT - \definesymbol[VerticalHeavyAndRightLight][\USymbChar{37}{32}] % BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT - \definesymbol[DownLightAndRightUpHeavy][\USymbChar{37}{33}] % BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY - \definesymbol[UpLightAndRightDownHeavy][\USymbChar{37}{34}] % BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY - \definesymbol[HeavyVerticalAndRight][\USymbChar{37}{35}] % BOX DRAWINGS HEAVY VERTICAL AND RIGHT - \definesymbol[LightVerticalAndLeft][\USymbChar{37}{36}] % BOX DRAWINGS LIGHT VERTICAL AND LEFT - \definesymbol[VerticalLightAndLeftHeavy][\USymbChar{37}{37}] % BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY - \definesymbol[UpHeavyAndLeftDownLight][\USymbChar{37}{38}] % BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT - \definesymbol[DownHeavyAndLeftUpLight][\USymbChar{37}{39}] % BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT - \definesymbol[VerticalHeavyAndLeftLight][\USymbChar{37}{40}] % BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT - \definesymbol[DownLightAndLeftUpHeavy][\USymbChar{37}{41}] % BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY - \definesymbol[UpLightAndLeftDownHeavy][\USymbChar{37}{42}] % BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY - \definesymbol[HeavyVerticalAndLeft][\USymbChar{37}{43}] % BOX DRAWINGS HEAVY VERTICAL AND LEFT - \definesymbol[LightDownAndHorizontal][\USymbChar{37}{44}] % BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - \definesymbol[LeftHeavyAndRightDownLight][\USymbChar{37}{45}] % BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT - \definesymbol[RightHeavyAndLeftDownLight][\USymbChar{37}{46}] % BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT - \definesymbol[DownLightAndHorizontalHeavy][\USymbChar{37}{47}] % BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY - \definesymbol[DownHeavyAndHorizontalLight][\USymbChar{37}{48}] % BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT - \definesymbol[RightLightAndLeftDownHeavy][\USymbChar{37}{49}] % BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY - \definesymbol[LeftLightAndRightDownHeavy][\USymbChar{37}{50}] % BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY - \definesymbol[HeavyDownAndHorizontal][\USymbChar{37}{51}] % BOX DRAWINGS HEAVY DOWN AND HORIZONTAL - \definesymbol[LightUpAndHorizontal][\USymbChar{37}{52}] % BOX DRAWINGS LIGHT UP AND HORIZONTAL - \definesymbol[LeftHeavyAndRightUpLight][\USymbChar{37}{53}] % BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT - \definesymbol[RightHeavyAndLeftUpLight][\USymbChar{37}{54}] % BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT - \definesymbol[UpLightAndHorizontalHeavy][\USymbChar{37}{55}] % BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY - \definesymbol[UpHeavyAndHorizontalLight][\USymbChar{37}{56}] % BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT - \definesymbol[RightLightAndLeftUpHeavy][\USymbChar{37}{57}] % BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY - \definesymbol[LeftLightAndRightUpHeavy][\USymbChar{37}{58}] % BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY - \definesymbol[HeavyUpAndHorizontal][\USymbChar{37}{59}] % BOX DRAWINGS HEAVY UP AND HORIZONTAL - \definesymbol[LightVerticalAndHorizontal][\USymbChar{37}{60}] % BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - \definesymbol[LeftHeavyAndRightVerticalLight][\USymbChar{37}{61}] % BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT - \definesymbol[RightHeavyAndLeftVerticalLight][\USymbChar{37}{62}] % BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT - \definesymbol[VerticalLightAndHorizontalHeavy][\USymbChar{37}{63}] % BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY - \definesymbol[UpHeavyAndDownHorizontalLight][\USymbChar{37}{64}] % BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT - \definesymbol[DownHeavyAndUpHorizontalLight][\USymbChar{37}{65}] % BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT - \definesymbol[VerticalHeavyAndHorizontalLight][\USymbChar{37}{66}] % BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT - \definesymbol[LeftUpHeavyAndRightDownLight][\USymbChar{37}{67}] % BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT - \definesymbol[RightUpHeavyAndLeftDownLight][\USymbChar{37}{68}] % BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT - \definesymbol[LeftDownHeavyAndRightUpLight][\USymbChar{37}{69}] % BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT - \definesymbol[RightDownHeavyAndLeftUpLight][\USymbChar{37}{70}] % BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT - \definesymbol[DownLightAndUpHorizontalHeavy][\USymbChar{37}{71}] % BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY - \definesymbol[UpLightAndDownHorizontalHeavy][\USymbChar{37}{72}] % BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY - \definesymbol[RightLightAndLeftVerticalHeavy][\USymbChar{37}{73}] % BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY - \definesymbol[LeftLightAndRightVerticalHeavy][\USymbChar{37}{74}] % BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY - \definesymbol[HeavyVerticalAndHorizontal][\USymbChar{37}{75}] % BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL - \definesymbol[LightArcDownAndRight][\USymbChar{37}{109}] % BOX DRAWINGS LIGHT ARC DOWN AND RIGHT - \definesymbol[LightArcDownAndLeft][\USymbChar{37}{110}] % BOX DRAWINGS LIGHT ARC DOWN AND LEFT - \definesymbol[LightArcUpAndLeft][\USymbChar{37}{111}] % BOX DRAWINGS LIGHT ARC UP AND LEFT - \definesymbol[LightArcUpAndRight][\USymbChar{37}{112}] % BOX DRAWINGS LIGHT ARC UP AND RIGHT - \definesymbol[LightDiagonalUpperRightToLowerLeft][\USymbChar{37}{113}] % BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT - \definesymbol[LightDiagonalUpperLeftToLowerRight][\USymbChar{37}{114}] % BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT - \definesymbol[LightDiagonalCross][\USymbChar{37}{115}] % BOX DRAWINGS LIGHT DIAGONAL CROSS - \definesymbol[LightLeft][\USymbChar{37}{116}] % BOX DRAWINGS LIGHT LEFT - \definesymbol[LightUp][\USymbChar{37}{117}] % BOX DRAWINGS LIGHT UP - \definesymbol[LightRight][\USymbChar{37}{118}] % BOX DRAWINGS LIGHT RIGHT - \definesymbol[LightDown][\USymbChar{37}{119}] % BOX DRAWINGS LIGHT DOWN - \definesymbol[HeavyLeft][\USymbChar{37}{120}] % BOX DRAWINGS HEAVY LEFT - \definesymbol[HeavyUp][\USymbChar{37}{121}] % BOX DRAWINGS HEAVY UP - \definesymbol[HeavyRight][\USymbChar{37}{122}] % BOX DRAWINGS HEAVY RIGHT - \definesymbol[HeavyDown][\USymbChar{37}{123}] % BOX DRAWINGS HEAVY DOWN - \definesymbol[LightLeftAndHeavyRight][\USymbChar{37}{124}] % BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT - \definesymbol[LightUpAndHeavyDown][\USymbChar{37}{125}] % BOX DRAWINGS LIGHT UP AND HEAVY DOWN - \definesymbol[HeavyLeftAndLightRight][\USymbChar{37}{126}] % BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT - \definesymbol[HeavyUpAndLightDown][\USymbChar{37}{127}] % BOX DRAWINGS HEAVY UP AND LIGHT DOWN - -\stopsymbolset - -\startsymbolset[Unicode Circled Digits] % 0x2460: Requires UnicodeRegular24 - - \definesymbol[CircledOne][\USymbCharZapf{36}{96}] % CIRCLED DIGIT ONE - \definesymbol[CircledTwo][\USymbCharZapf{36}{97}] % CIRCLED DIGIT TWO - \definesymbol[CircledThree][\USymbCharZapf{36}{98}] % CIRCLED DIGIT THREE - \definesymbol[CircledFour][\USymbCharZapf{36}{99}] % CIRCLED DIGIT FOUR - \definesymbol[CircledFive][\USymbCharZapf{36}{100}] % CIRCLED DIGIT FIVE - \definesymbol[CircledSix][\USymbCharZapf{36}{101}] % CIRCLED DIGIT SIX - \definesymbol[CircledSeven][\USymbCharZapf{36}{102}] % CIRCLED DIGIT SEVEN - \definesymbol[CircledEight][\USymbCharZapf{36}{103}] % CIRCLED DIGIT EIGHT - \definesymbol[CircledNine][\USymbCharZapf{36}{104}] % CIRCLED DIGIT NINE - \definesymbol[CircledTen][\USymbCharZapf{36}{105}] % CIRCLED NUMBER TEN - -\stopsymbolset - -\startsymbolset[Unicode Double Box Drawing] % 0x2500: Requires UnicodeRegular25 - - \definesymbol[LightDoubleDashHorizontal][\USymbChar{37}{76}] % BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL - \definesymbol[HeavyDoubleDashHorizontal][\USymbChar{37}{77}] % BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL - \definesymbol[LightDoubleDashVertical][\USymbChar{37}{78}] % BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL - \definesymbol[HeavyDoubleDashVertical][\USymbChar{37}{79}] % BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL - \definesymbol[DoubleHorizontal][\USymbChar{37}{80}] % BOX DRAWINGS DOUBLE HORIZONTAL - \definesymbol[DoubleVertical][\USymbChar{37}{81}] % BOX DRAWINGS DOUBLE VERTICAL - \definesymbol[DownSingleAndRightDouble][\USymbChar{37}{82}] % BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - \definesymbol[DownDoubleAndRightSingle][\USymbChar{37}{83}] % BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - \definesymbol[DoubleDownAndRight][\USymbChar{37}{84}] % BOX DRAWINGS DOUBLE DOWN AND RIGHT - \definesymbol[DownSingleAndLeftDouble][\USymbChar{37}{85}] % BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - \definesymbol[DownDoubleAndLeftSingle][\USymbChar{37}{86}] % BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - \definesymbol[DoubleDownAndLeft][\USymbChar{37}{87}] % BOX DRAWINGS DOUBLE DOWN AND LEFT - \definesymbol[UpSingleAndRightDouble][\USymbChar{37}{88}] % BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - \definesymbol[UpDoubleAndRightSingle][\USymbChar{37}{89}] % BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - \definesymbol[DoubleUpAndRight][\USymbChar{37}{90}] % BOX DRAWINGS DOUBLE UP AND RIGHT - \definesymbol[UpSingleAndLeftDouble][\USymbChar{37}{91}] % BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - \definesymbol[UpDoubleAndLeftSingle][\USymbChar{37}{92}] % BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - \definesymbol[DoubleUpAndLeft][\USymbChar{37}{93}] % BOX DRAWINGS DOUBLE UP AND LEFT - \definesymbol[VerticalSingleAndRightDouble][\USymbChar{37}{94}] % BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - \definesymbol[VerticalDoubleAndRightSingle][\USymbChar{37}{95}] % BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - \definesymbol[DoubleVerticalAndRight][\USymbChar{37}{96}] % BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - \definesymbol[VerticalSingleAndLeftDouble][\USymbChar{37}{97}] % BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - \definesymbol[VerticalDoubleAndLeftSingle][\USymbChar{37}{98}] % BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - \definesymbol[DoubleVerticalAndLeft][\USymbChar{37}{99}] % BOX DRAWINGS DOUBLE VERTICAL AND LEFT - \definesymbol[DownSingleAndHorizontalDouble][\USymbChar{37}{100}] % BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - \definesymbol[DownDoubleAndHorizontalSingle][\USymbChar{37}{101}] % BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - \definesymbol[DoubleDownAndHorizontal][\USymbChar{37}{102}] % BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - \definesymbol[UpSingleAndHorizontalDouble][\USymbChar{37}{103}] % BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - \definesymbol[UpDoubleAndHorizontalSingle][\USymbChar{37}{104}] % BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - \definesymbol[DoubleUpAndHorizontal][\USymbChar{37}{105}] % BOX DRAWINGS DOUBLE UP AND HORIZONTAL - \definesymbol[VerticalSingleAndHorizontalDouble][\USymbChar{37}{106}] % BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - \definesymbol[VerticalDoubleAndHorizontalSingle][\USymbChar{37}{107}] % BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - \definesymbol[DoubleVerticalAndHorizontal][\USymbChar{37}{108}] % BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - -\stopsymbolset - -\startsymbolset[Unicode Block Elements] % 0x2580: Requires UnicodeRegular25 - - \definesymbol[UpperHalfBlock][\USymbChar{37}{128}] % UPPER HALF BLOCK - \definesymbol[LowerOneEighthBlock][\USymbChar{37}{129}] % LOWER ONE EIGHTH BLOCK - \definesymbol[LowerOneQuarterBlock][\USymbChar{37}{130}] % LOWER ONE QUARTER BLOCK - \definesymbol[LowerThreeEighthsBlock][\USymbChar{37}{131}] % LOWER THREE EIGHTHS BLOCK - \definesymbol[LowerHalfBlock][\USymbChar{37}{132}] % LOWER HALF BLOCK - \definesymbol[LowerFiveEighthsBlock][\USymbChar{37}{133}] % LOWER FIVE EIGHTHS BLOCK - \definesymbol[LowerThreeQuartersBlock][\USymbChar{37}{134}] % LOWER THREE QUARTERS BLOCK - \definesymbol[LowerSevenEighthsBlock][\USymbChar{37}{135}] % LOWER SEVEN EIGHTHS BLOCK - \definesymbol[FullBlock][\USymbChar{37}{136}] % FULL BLOCK - \definesymbol[LeftSevenEighthsBlock][\USymbChar{37}{137}] % LEFT SEVEN EIGHTHS BLOCK - \definesymbol[LeftThreeQuartersBlock][\USymbChar{37}{138}] % LEFT THREE QUARTERS BLOCK - \definesymbol[LeftFiveEighthsBlock][\USymbChar{37}{139}] % LEFT FIVE EIGHTHS BLOCK - \definesymbol[LeftHalfBlock][\USymbChar{37}{140}] % LEFT HALF BLOCK - \definesymbol[LeftThreeEighthsBlock][\USymbChar{37}{141}] % LEFT THREE EIGHTHS BLOCK - \definesymbol[LeftOneQuarterBlock][\USymbChar{37}{142}] % LEFT ONE QUARTER BLOCK - \definesymbol[LeftOneEighthBlock][\USymbChar{37}{143}] % LEFT ONE EIGHTH BLOCK - \definesymbol[RightHalfBlock][\USymbChar{37}{144}] % RIGHT HALF BLOCK - \definesymbol[UpperOneEighthBlock][\USymbChar{37}{148}] % UPPER ONE EIGHTH BLOCK - \definesymbol[RightOneEighthBlock][\USymbChar{37}{149}] % RIGHT ONE EIGHTH BLOCK - -\stopsymbolset - -\startsymbolset[Unicode Shade Characters] % 0x2580: Requires UnicodeRegular25 - - \definesymbol[LightShade][\USymbChar{37}{145}] % LIGHT SHADE - \definesymbol[MediumShade][\USymbChar{37}{146}] % MEDIUM SHADE - \definesymbol[DarkShade][\USymbChar{37}{147}] % DARK SHADE - -\stopsymbolset - -\startsymbolset[Unicode Terminal Graphics] % 0x2580: Requires UnicodeRegular25 - - \definesymbol[QuadrantLowerLeft][\USymbChar{37}{150}] % [Unassigned U+2596] - \definesymbol[QuadrantLowerRight][\USymbChar{37}{151}] % [Unassigned U+2597] - \definesymbol[QuadrantUpperLeft][\USymbChar{37}{152}] % [Unassigned U+2598] - \definesymbol[QuadrantUpperLeftAndLowerLeftAndLowerRight][\USymbChar{37}{153}] % [Unassigned U+2599] - \definesymbol[QuadrantUpperLeftAndLowerRight][\USymbChar{37}{154}] % [Unassigned U+259A] - \definesymbol[QuadrantUpperLeftAndUpperRightandLowerLeft][\USymbChar{37}{155}] % [Unassigned U+259B] - \definesymbol[QuadrantUpperLeftAndUpperRightAndLowerRight][\USymbChar{37}{156}] % [Unassigned U+259C] - \definesymbol[QuadrantUpperRight][\USymbChar{37}{157}] % [Unassigned U+259D] - \definesymbol[QuadrantUpperRightAndLowerLeft][\USymbChar{37}{158}] % [Unassigned U+259E] - \definesymbol[QuadrantUpperRightAndLowerLeftAndLowerRight][\USymbChar{37}{159}] % [Unassigned U+259F] - -\stopsymbolset - -\startsymbolset[Unicode Geometric Shapes] % 0x25A0: Requires UnicodeRegular25 - - \definesymbol[BlackSquare][\USymbChar{37}{160}] % BLACK SQUARE - \definesymbol[WhiteSquare][\USymbChar{37}{161}] % WHITE SQUARE - \definesymbol[WhiteSquareWithRoundedCorners][\USymbChar{37}{162}] % WHITE SQUARE WITH ROUNDED CORNERS - \definesymbol[WhiteSquareContainingBlackSmallSquare][\USymbChar{37}{163}] % WHITE SQUARE CONTAINING BLACK SMALL SQUARE - \definesymbol[SquareWithHorizontalFill][\USymbChar{37}{164}] % SQUARE WITH HORIZONTAL FILL - \definesymbol[SquareWithVerticalFill][\USymbChar{37}{165}] % SQUARE WITH VERTICAL FILL - \definesymbol[SquareWithOrthogonalCrosshatchFill][\USymbChar{37}{166}] % SQUARE WITH ORTHOGONAL CROSSHATCH FILL - \definesymbol[SquareWithUpperLeftToLowerRightFill][\USymbChar{37}{167}] % SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL - \definesymbol[SquareWithUpperRightToLowerLeftFill][\USymbChar{37}{168}] % SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL - \definesymbol[SquareWithDiagonalCrosshatchFill][\USymbChar{37}{169}] % SQUARE WITH DIAGONAL CROSSHATCH FILL - \definesymbol[BlackSmallSquare][\USymbChar{37}{170}] % BLACK SMALL SQUARE - \definesymbol[WhiteSmallSquare][\USymbChar{37}{171}] % WHITE SMALL SQUARE - \definesymbol[BlackRectangle][\USymbChar{37}{172}] % BLACK RECTANGLE - \definesymbol[WhiteRectangle][\USymbChar{37}{173}] % WHITE RECTANGLE - \definesymbol[BlackVerticalRectangle][\USymbChar{37}{174}] % BLACK VERTICAL RECTANGLE - \definesymbol[WhiteVerticalRectangle][\USymbChar{37}{175}] % WHITE VERTICAL RECTANGLE - \definesymbol[BlackParallelogram][\USymbChar{37}{176}] % BLACK PARALLELOGRAM - \definesymbol[WhiteParallelogram][\USymbChar{37}{177}] % WHITE PARALLELOGRAM - \definesymbol[BlackUpPointingTriangle][\USymbChar{37}{178}] % BLACK UP-POINTING TRIANGLE - \definesymbol[WhiteUpPointingTriangle][\USymbChar{37}{179}] % WHITE UP-POINTING TRIANGLE - \definesymbol[BlackUpPointingSmallTriangle][\USymbChar{37}{180}] % BLACK UP-POINTING SMALL TRIANGLE - \definesymbol[WhiteUpPointingSmallTriangle][\USymbChar{37}{181}] % WHITE UP-POINTING SMALL TRIANGLE - \definesymbol[BlackRightPointingTriangle][\USymbChar{37}{182}] % BLACK RIGHT-POINTING TRIANGLE - \definesymbol[WhiteRightPointingTriangle][\USymbChar{37}{183}] % WHITE RIGHT-POINTING TRIANGLE - \definesymbol[BlackRightPointingSmallTriangle][\USymbChar{37}{184}] % BLACK RIGHT-POINTING SMALL TRIANGLE - \definesymbol[WhiteRightPointingSmallTriangle][\USymbChar{37}{185}] % WHITE RIGHT-POINTING SMALL TRIANGLE - \definesymbol[BlackRightPointingPointer][\USymbChar{37}{186}] % BLACK RIGHT-POINTING POINTER - \definesymbol[WhiteRightPointingPointer][\USymbChar{37}{187}] % WHITE RIGHT-POINTING POINTER - \definesymbol[BlackDownPointingTriangle][\USymbChar{37}{188}] % BLACK DOWN-POINTING TRIANGLE - \definesymbol[WhiteDownPointingTriangle][\USymbChar{37}{189}] % WHITE DOWN-POINTING TRIANGLE - \definesymbol[BlackDownPointingSmallTriangle][\USymbChar{37}{190}] % BLACK DOWN-POINTING SMALL TRIANGLE - \definesymbol[WhiteDownPointingSmallTriangle][\USymbChar{37}{191}] % WHITE DOWN-POINTING SMALL TRIANGLE - \definesymbol[BlackLeftPointingTriangle][\USymbChar{37}{192}] % BLACK LEFT-POINTING TRIANGLE - \definesymbol[WhiteLeftPointingTriangle][\USymbChar{37}{193}] % WHITE LEFT-POINTING TRIANGLE - \definesymbol[BlackLeftPointingSmallTriangle][\USymbChar{37}{194}] % BLACK LEFT-POINTING SMALL TRIANGLE - \definesymbol[WhiteLeftPointingSmallTriangle][\USymbChar{37}{195}] % WHITE LEFT-POINTING SMALL TRIANGLE - \definesymbol[BlackLeftPointingPointer][\USymbChar{37}{196}] % BLACK LEFT-POINTING POINTER - \definesymbol[WhiteLeftPointingPointer][\USymbChar{37}{197}] % WHITE LEFT-POINTING POINTER - \definesymbol[BlackDiamond][\USymbChar{37}{198}] % BLACK DIAMOND - \definesymbol[WhiteDiamond][\USymbChar{37}{199}] % WHITE DIAMOND - \definesymbol[WhiteDiamondContainingBlackSmallDiamond][\USymbChar{37}{200}] % WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND - \definesymbol[Fisheye][\USymbChar{37}{201}] % FISHEYE - \definesymbol[Lozenge][\USymbChar{37}{202}] % LOZENGE - \definesymbol[WhiteCircle][\USymbChar{37}{203}] % WHITE CIRCLE - \definesymbol[DottedCircle][\USymbChar{37}{204}] % DOTTED CIRCLE - \definesymbol[CircleWithVerticalFill][\USymbChar{37}{205}] % CIRCLE WITH VERTICAL FILL - \definesymbol[Bullseye][\USymbChar{37}{206}] % BULLSEYE - \definesymbol[BlackCircle][\USymbChar{37}{207}] % BLACK CIRCLE - \definesymbol[CircleWithLeftHalfBlack][\USymbChar{37}{208}] % CIRCLE WITH LEFT HALF BLACK - \definesymbol[CircleWithRightHalfBlack][\USymbChar{37}{209}] % CIRCLE WITH RIGHT HALF BLACK - \definesymbol[CircleWithLowerHalfBlack][\USymbChar{37}{210}] % CIRCLE WITH LOWER HALF BLACK - \definesymbol[CircleWithUpperHalfBlack][\USymbChar{37}{211}] % CIRCLE WITH UPPER HALF BLACK - \definesymbol[CircleWithUpperRightQuadrantBlack][\USymbChar{37}{212}] % CIRCLE WITH UPPER RIGHT QUADRANT BLACK - \definesymbol[CircleWithAllButUpperLeftQuadrantBlack][\USymbChar{37}{213}] % CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK - \definesymbol[LeftHalfBlackCircle][\USymbChar{37}{214}] % LEFT HALF BLACK CIRCLE - \definesymbol[RightHalfBlackCircle][\USymbChar{37}{215}] % RIGHT HALF BLACK CIRCLE - \definesymbol[InverseBullet][\USymbChar{37}{216}] % INVERSE BULLET - \definesymbol[InverseWhiteCircle][\USymbChar{37}{217}] % INVERSE WHITE CIRCLE - \definesymbol[UpperHalfInverseWhiteCircle][\USymbChar{37}{218}] % UPPER HALF INVERSE WHITE CIRCLE - \definesymbol[LowerHalfInverseWhiteCircle][\USymbChar{37}{219}] % LOWER HALF INVERSE WHITE CIRCLE - \definesymbol[UpperLeftQuadrantCircularArc][\USymbChar{37}{220}] % UPPER LEFT QUADRANT CIRCULAR ARC - \definesymbol[UpperRightQuadrantCircularArc][\USymbChar{37}{221}] % UPPER RIGHT QUADRANT CIRCULAR ARC - \definesymbol[LowerRightQuadrantCircularArc][\USymbChar{37}{222}] % LOWER RIGHT QUADRANT CIRCULAR ARC - \definesymbol[LowerLeftQuadrantCircularArc][\USymbChar{37}{223}] % LOWER LEFT QUADRANT CIRCULAR ARC - \definesymbol[LowerHalfCircle][\USymbChar{37}{225}] % LOWER HALF CIRCLE - \definesymbol[BlackLowerRightTriangle][\USymbChar{37}{226}] % BLACK LOWER RIGHT TRIANGLE - \definesymbol[BlackLowerLeftTriangle][\USymbChar{37}{227}] % BLACK LOWER LEFT TRIANGLE - \definesymbol[BlackUpperLeftTriangle][\USymbChar{37}{228}] % BLACK UPPER LEFT TRIANGLE - \definesymbol[BlackUpperRightTriangle][\USymbChar{37}{229}] % BLACK UPPER RIGHT TRIANGLE - \definesymbol[WhiteBullet][\USymbChar{37}{230}] % WHITE BULLET - \definesymbol[SquareWithLeftHalfBlack][\USymbChar{37}{231}] % SQUARE WITH LEFT HALF BLACK - \definesymbol[SquareWithRightHalfBlack][\USymbChar{37}{232}] % SQUARE WITH RIGHT HALF BLACK - \definesymbol[SquareWithUpperLeftDiagonalHalfBlack][\USymbChar{37}{233}] % SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK - \definesymbol[SquareWithLowerRightDiagonalHalfBlack][\USymbChar{37}{234}] % SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK - \definesymbol[WhiteSquareWithVerticalBisectingLine][\USymbChar{37}{235}] % WHITE SQUARE WITH VERTICAL BISECTING LINE - \definesymbol[WhiteUpPointingTriangleWithDot][\USymbChar{37}{236}] % WHITE UP-POINTING TRIANGLE WITH DOT - \definesymbol[UpPointingTriangleWithLeftHalfBlack][\USymbChar{37}{237}] % UP-POINTING TRIANGLE WITH LEFT HALF BLACK - \definesymbol[UpPointingTriangleWithRightHalfBlack][\USymbChar{37}{238}] % UP-POINTING TRIANGLE WITH RIGHT HALF BLACK - \definesymbol[LargeCircle][\USymbChar{37}{239}] % LARGE CIRCLE - \definesymbol[UpperLeftTriangle][\USymbChar{37}{248}] % [Unassigned U+25F8] - \definesymbol[UpperRightTriangle][\USymbChar{37}{249}] % [Unassigned U+25F9] - \definesymbol[LowerLeftTriangle][\USymbChar{37}{250}] % [Unassigned U+25FA] - \definesymbol[WhiteMediumSquare][\USymbChar{37}{251}] % [Unassigned U+25FB] - \definesymbol[BlackMediumSquare][\USymbChar{37}{252}] % [Unassigned U+25FC] - \definesymbol[WhiteMediumSmallSquare][\USymbChar{37}{253}] % [Unassigned U+25FD] - \definesymbol[BlackMediumSmallSquare][\USymbChar{37}{254}] % [Unassigned U+25FE] - \definesymbol[LowerRightTriangle][\USymbChar{37}{255}] % [Unassigned U+25FF] - -\stopsymbolset - -\startsymbolset[Unicode Control Code Graphics] % 0x25A0: Requires UnicodeRegular25 - - \definesymbol[WhiteSquareWithUpperLeftQuadrant][\USymbChar{37}{240}] % WHITE SQUARE WITH UPPER LEFT QUADRANT - \definesymbol[WhiteSquareWithLowerLeftQuadrant][\USymbChar{37}{241}] % WHITE SQUARE WITH LOWER LEFT QUADRANT - \definesymbol[WhiteSquareWithLowerRightQuadrant][\USymbChar{37}{242}] % WHITE SQUARE WITH LOWER RIGHT QUADRANT - \definesymbol[WhiteSquareWithUpperRightQuadrant][\USymbChar{37}{243}] % WHITE SQUARE WITH UPPER RIGHT QUADRANT - \definesymbol[WhiteCircleWithUpperLeftQuadrant][\USymbChar{37}{244}] % WHITE CIRCLE WITH UPPER LEFT QUADRANT - \definesymbol[WhiteCircleWithLowerLeftQuadrant][\USymbChar{37}{245}] % WHITE CIRCLE WITH LOWER LEFT QUADRANT - \definesymbol[WhiteCircleWithLowerRightQuadrant][\USymbChar{37}{246}] % WHITE CIRCLE WITH LOWER RIGHT QUADRANT - \definesymbol[WhiteCircleWithUpperRightQuadrant][\USymbChar{37}{247}] % WHITE CIRCLE WITH UPPER RIGHT QUADRANT - -\stopsymbolset - -\startsymbolset[Unicode Weather and Astrological] % 0x2600: Requires UnicodeRegular26 - - \definesymbol[BlackSunWithRays][\USymbChar{38}{0}] % BLACK SUN WITH RAYS - \definesymbol[Cloud][\USymbChar{38}{1}] % CLOUD - \definesymbol[Umbrella][\USymbChar{38}{2}] % UMBRELLA - \definesymbol[Snowman][\USymbChar{38}{3}] % SNOWMAN - \definesymbol[Comet][\USymbChar{38}{4}] % COMET - \definesymbol[BlackStar][\USymbChar{38}{5}] % BLACK STAR - \definesymbol[WhiteStar][\USymbChar{38}{6}] % WHITE STAR - \definesymbol[Lightning][\USymbChar{38}{7}] % LIGHTNING - \definesymbol[Thunderstorm][\USymbChar{38}{8}] % THUNDERSTORM - \definesymbol[Sun][\USymbChar{38}{9}] % SUN - \definesymbol[AscendingNode][\USymbChar{38}{10}] % ASCENDING NODE - \definesymbol[DescendingNode][\USymbChar{38}{11}] % DESCENDING NODE - \definesymbol[Conjunction][\USymbChar{38}{12}] % CONJUNCTION - \definesymbol[Opposition][\USymbChar{38}{13}] % OPPOSITION - \definesymbol[FirstQuarterMoon][\USymbChar{38}{61}] % FIRST QUARTER MOON - \definesymbol[LastQuarterMoon][\USymbChar{38}{62}] % LAST QUARTER MOON - \definesymbol[Mercury][\USymbChar{38}{63}] % MERCURY - \definesymbol[FemaleSign][\USymbChar{38}{64}] % FEMALE SIGN - \definesymbol[Earth][\USymbChar{38}{65}] % EARTH - \definesymbol[MaleSign][\USymbChar{38}{66}] % MALE SIGN - \definesymbol[Jupiter][\USymbChar{38}{67}] % JUPITER - \definesymbol[Saturn][\USymbChar{38}{68}] % SATURN - \definesymbol[Uranus][\USymbChar{38}{69}] % URANUS - \definesymbol[Neptune][\USymbChar{38}{70}] % NEPTUNE - \definesymbol[Pluto][\USymbChar{38}{71}] % PLUTO - -\stopsymbolset - -\startsymbolset[Unicode Miscellaneous] % 0x2600: Requires UnicodeRegular26 - - \definesymbol[BlackTelephone][\USymbChar{38}{14}] % BLACK TELEPHONE - \definesymbol[WhiteTelephone][\USymbChar{38}{15}] % WHITE TELEPHONE - \definesymbol[BallotBox][\USymbChar{38}{16}] % BALLOT BOX - \definesymbol[BallotBoxWithCheck][\USymbChar{38}{17}] % BALLOT BOX WITH CHECK - \definesymbol[BallotBoxWithX][\USymbChar{38}{18}] % BALLOT BOX WITH X - \definesymbol[Saltire][\USymbChar{38}{19}] % SALTIRE - \definesymbol[ReversedRotatedFloralHeartBullet][\USymbChar{38}{25}] % REVERSED ROTATED FLORAL HEART BULLET - \definesymbol[WheelOfDharma][\USymbChar{38}{56}] % WHEEL OF DHARMA - \definesymbol[WhiteFrowningFace][\USymbChar{38}{57}] % WHITE FROWNING FACE - \definesymbol[WhiteSmilingFace][\USymbChar{38}{58}] % WHITE SMILING FACE - \definesymbol[BlackSmilingFace][\USymbChar{38}{59}] % BLACK SMILING FACE - \definesymbol[WhiteSunWithRays][\USymbChar{38}{60}] % WHITE SUN WITH RAYS - \definesymbol[HotSprings][\USymbChar{38}{104}] % HOT SPRINGS - -\stopsymbolset - -\startsymbolset[Unicode Japanese Chess] % 0x2600: Requires UnicodeRegular26 - - \definesymbol[WhiteShogiPiece][\USymbChar{38}{22}] % [Unassigned U+2616] - \definesymbol[BlackShogiPiece][\USymbChar{38}{23}] % [Unassigned U+2617] - -\stopsymbolset - -\startsymbolset[Unicode Pointing Hand] % 0x2600: Requires UnicodeRegular26 - - \definesymbol[BlackLeftPointingIndex][\USymbChar{38}{26}] % BLACK LEFT POINTING INDEX - \definesymbol[BlackRightPointingIndex][\USymbChar{38}{27}] % BLACK RIGHT POINTING INDEX - \definesymbol[WhiteLeftPointingIndex][\USymbChar{38}{28}] % WHITE LEFT POINTING INDEX - \definesymbol[WhiteUpPointingIndex][\USymbChar{38}{29}] % WHITE UP POINTING INDEX - \definesymbol[WhiteRightPointingIndex][\USymbChar{38}{30}] % WHITE RIGHT POINTING INDEX - \definesymbol[WhiteDownPointingIndex][\USymbChar{38}{31}] % WHITE DOWN POINTING INDEX - -\stopsymbolset - -\startsymbolset[Unicode Warning Signs] % 0x2600: Requires UnicodeRegular26 - - \definesymbol[SkullAndCrossbones][\USymbChar{38}{32}] % SKULL AND CROSSBONES - \definesymbol[CautionSign][\USymbChar{38}{33}] % CAUTION SIGN - \definesymbol[RadioactiveSign][\USymbChar{38}{34}] % RADIOACTIVE SIGN - \definesymbol[BiohazardSign][\USymbChar{38}{35}] % BIOHAZARD SIGN - -\stopsymbolset - -\startsymbolset[Unicode Healing Signs] % 0x2600: Requires UnicodeRegular26 - \definesymbol[Caduceus][\USymbChar{38}{36}] % CADUCEUS - \definesymbol[Ankh][\USymbChar{38}{37}] % ANKH -\stopsymbolset - -\startsymbolset[Unicode Religious and Political] % 0x2600: Requires UnicodeRegular26 and 27 - - \definesymbol[OrthodoxCross][\USymbChar{38}{38}] % ORTHODOX CROSS - \definesymbol[ChiRho][\USymbChar{38}{39}] % CHI RHO - \definesymbol[CrossOfLorraine][\USymbChar{38}{40}] % CROSS OF LORRAINE - \definesymbol[CrossOfJerusalem][\USymbChar{38}{41}] % CROSS OF JERUSALEM - \definesymbol[StarAndCrescent][\USymbChar{38}{42}] % STAR AND CRESCENT - \definesymbol[FarsiSymbol][\USymbChar{38}{43}] % FARSI SYMBOL - \definesymbol[AdiShakti][\USymbChar{38}{44}] % ADI SHAKTI - \definesymbol[HammerAndSickle][\USymbChar{38}{45}] % HAMMER AND SICKLE - \definesymbol[PeaceSymbol][\USymbChar{38}{46}] % PEACE SYMBOL - \definesymbol[YinYang][\USymbChar{38}{47}] % YIN YANG - \definesymbol[WestSyriacCross][\USymbChar{38}{112}] % WEST SYRIAC CROSS - \definesymbol[EastSyriacCross][\USymbChar{38}{113}] % EAST SYRIAC CROSS -% 27xx starts here - \definesymbol[OutlinedGreekCross][\USymbCharZapf{39}{25}] % OUTLINED GREEK CROSS - \definesymbol[HeavyGreekCross][\USymbCharZapf{39}{26}] % HEAVY GREEK CROSS - \definesymbol[OpenCentreCross][\USymbCharZapf{39}{27}] % OPEN CENTRE CROSS - \definesymbol[HeavyOpenCentreCross][\USymbCharZapf{39}{28}] % HEAVY OPEN CENTRE CROSS - \definesymbol[LatinCross][\USymbCharZapf{39}{29}] % LATIN CROSS - \definesymbol[ShadowedWhiteLatinCross][\USymbCharZapf{39}{30}] % SHADOWED WHITE LATIN CROSS - \definesymbol[OutlinedLatinCross][\USymbCharZapf{39}{31}] % OUTLINED LATIN CROSS - \definesymbol[MalteseCross][\USymbCharZapf{39}{32}] % MALTESE CROSS - \definesymbol[StarOfDavid][\USymbCharZapf{39}{33}] % STAR OF DAVID - - -\stopsymbolset - -\startsymbolset[Unicode Trigram] % 0x2600: Requires UnicodeRegular26 - - \definesymbol[TrigramForHeaven][\USymbChar{38}{48}] % TRIGRAM FOR HEAVEN - \definesymbol[TrigramForLake][\USymbChar{38}{49}] % TRIGRAM FOR LAKE - \definesymbol[TrigramForFire][\USymbChar{38}{50}] % TRIGRAM FOR FIRE - \definesymbol[TrigramForThunder][\USymbChar{38}{51}] % TRIGRAM FOR THUNDER - \definesymbol[TrigramForWind][\USymbChar{38}{52}] % TRIGRAM FOR WIND - \definesymbol[TrigramForWater][\USymbChar{38}{53}] % TRIGRAM FOR WATER - \definesymbol[TrigramForMountain][\USymbChar{38}{54}] % TRIGRAM FOR MOUNTAIN - \definesymbol[TrigramForEarth][\USymbChar{38}{55}] % TRIGRAM FOR EARTH - -\stopsymbolset - -\startsymbolset[Unicode Zodiac] % 0x2600: Requires UnicodeRegular26 - - \definesymbol[Aries][\USymbChar{38}{72}] % ARIES - \definesymbol[Taurus][\USymbChar{38}{73}] % TAURUS - \definesymbol[Gemini][\USymbChar{38}{74}] % GEMINI - \definesymbol[Cancer][\USymbChar{38}{75}] % CANCER - \definesymbol[Leo][\USymbChar{38}{76}] % LEO - \definesymbol[Virgo][\USymbChar{38}{77}] % VIRGO - \definesymbol[Libra][\USymbChar{38}{78}] % LIBRA - \definesymbol[Scorpius][\USymbChar{38}{79}] % SCORPIUS - \definesymbol[Sagittarius][\USymbChar{38}{80}] % SAGITTARIUS - \definesymbol[Capricorn][\USymbChar{38}{81}] % CAPRICORN - \definesymbol[Aquarius][\USymbChar{38}{82}] % AQUARIUS - \definesymbol[Pisces][\USymbChar{38}{83}] % PISCES - -\stopsymbolset - -\startsymbolset[Unicode Chess] % 0x2600: Requires UnicodeRegular26 - - \definesymbol[WhiteChessKing][\USymbChar{38}{84}] % WHITE CHESS KING - \definesymbol[WhiteChessQueen][\USymbChar{38}{85}] % WHITE CHESS QUEEN - \definesymbol[WhiteChessRook][\USymbChar{38}{86}] % WHITE CHESS ROOK - \definesymbol[WhiteChessBishop][\USymbChar{38}{87}] % WHITE CHESS BISHOP - \definesymbol[WhiteChessKnight][\USymbChar{38}{88}] % WHITE CHESS KNIGHT - \definesymbol[WhiteChessPawn][\USymbChar{38}{89}] % WHITE CHESS PAWN - \definesymbol[BlackChessKing][\USymbChar{38}{90}] % BLACK CHESS KING - \definesymbol[BlackChessQueen][\USymbChar{38}{91}] % BLACK CHESS QUEEN - \definesymbol[BlackChessRook][\USymbChar{38}{92}] % BLACK CHESS ROOK - \definesymbol[BlackChessBishop][\USymbChar{38}{93}] % BLACK CHESS BISHOP - \definesymbol[BlackChessKnight][\USymbChar{38}{94}] % BLACK CHESS KNIGHT - \definesymbol[BlackChessPawn][\USymbChar{38}{95}] % BLACK CHESS PAWN - -\stopsymbolset - -\startsymbolset[Unicode Playing Card] % 0x2600: Requires UnicodeRegular26 - - \definesymbol[BlackSpadeSuit][\USymbChar{38}{96}] % BLACK SPADE SUIT - \definesymbol[WhiteHeartSuit][\USymbChar{38}{97}] % WHITE HEART SUIT - \definesymbol[WhiteDiamondSuit][\USymbChar{38}{98}] % WHITE DIAMOND SUIT - \definesymbol[BlackClubSuit][\USymbChar{38}{99}] % BLACK CLUB SUIT - \definesymbol[WhiteSpadeSuit][\USymbChar{38}{100}] % WHITE SPADE SUIT - \definesymbol[BlackHeartSuit][\USymbChar{38}{101}] % BLACK HEART SUIT - \definesymbol[BlackDiamondSuit][\USymbChar{38}{102}] % BLACK DIAMOND SUIT - \definesymbol[WhiteClubSuit][\USymbChar{38}{103}] % WHITE CLUB SUIT - -\stopsymbolset - -\startsymbolset[Unicode Musical] % 0x2600: Requires UnicodeRegular26 - - \definesymbol[QuarterNote][\USymbChar{38}{105}] % QUARTER NOTE - \definesymbol[EighthNote][\USymbChar{38}{106}] % EIGHTH NOTE - \definesymbol[BeamedEighthNotes][\USymbChar{38}{107}] % BEAMED EIGHTH NOTES - \definesymbol[BeamedSixteenthNotes][\USymbChar{38}{108}] % BEAMED SIXTEENTH NOTES - \definesymbol[MusicFlatSign][\USymbChar{38}{109}] % MUSIC FLAT SIGN - \definesymbol[MusicNaturalSign][\USymbChar{38}{110}] % MUSIC NATURAL SIGN - \definesymbol[MusicSharpSign][\USymbChar{38}{111}] % MUSIC SHARP SIGN - -\stopsymbolset - -\startsymbolset[Unicode Recycling] % 0x2600: Requires UnicodeRegular26 - - \definesymbol[UniversalRecycling][\USymbChar{38}{114}] % [Unassigned U+2672] - \definesymbol[Type1Plastics][\USymbChar{38}{115}] % [Unassigned U+2673] - \definesymbol[Type2Plastics][\USymbChar{38}{116}] % [Unassigned U+2674] - \definesymbol[Type3Plastics][\USymbChar{38}{117}] % [Unassigned U+2675] - \definesymbol[Type4Plastics][\USymbChar{38}{118}] % [Unassigned U+2676] - \definesymbol[Type5Plastics][\USymbChar{38}{119}] % [Unassigned U+2677] - \definesymbol[Type6Plastics][\USymbChar{38}{120}] % [Unassigned U+2678] - \definesymbol[Type7Plastics][\USymbChar{38}{121}] % [Unassigned U+2679] - \definesymbol[GenericMaterials][\USymbChar{38}{122}] % [Unassigned U+267A] - \definesymbol[BlackUniversalRecycling][\USymbChar{38}{123}] % [Unassigned U+267B] - \definesymbol[RecycledPaper][\USymbChar{38}{124}] % [Unassigned U+267C] - \definesymbol[PartiallyRecycledPaper][\USymbChar{38}{125}] % [Unassigned U+267D] - -\stopsymbolset - -\startsymbolset[Unicode Dice] % 0x2600: Requires UnicodeRegular26 - - \definesymbol[DieFace1][\USymbChar{38}{128}] % [Unassigned U+2680] - \definesymbol[DieFace2][\USymbChar{38}{129}] % [Unassigned U+2681] - \definesymbol[DieFace3][\USymbChar{38}{130}] % [Unassigned U+2682] - \definesymbol[DieFace4][\USymbChar{38}{131}] % [Unassigned U+2683] - \definesymbol[DieFace5][\USymbChar{38}{132}] % [Unassigned U+2684] - \definesymbol[DieFace6][\USymbChar{38}{133}] % [Unassigned U+2685] - -\stopsymbolset - -\startsymbolset[Unicode Go Markers] % 0x2600: Requires UnicodeRegular26 - - \definesymbol[WhiteCircleWithDotRight][\USymbChar{38}{134}] % [Unassigned U+2686] - \definesymbol[WhiteCircleWithTwoDots][\USymbChar{38}{135}] % [Unassigned U+2687] - \definesymbol[BlackCircleWithWhiteDotRight][\USymbChar{38}{136}] % [Unassigned U+2688] - \definesymbol[BlackCircleWithTwoWhiteDots][\USymbChar{38}{137}] % [Unassigned U+2689] - -\stopsymbolset - -\startsymbolset[Unicode Scissors] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[UpperBladeScissors][\USymbCharZapf{39}{1}] % UPPER BLADE SCISSORS - \definesymbol[BlackScissors][\USymbCharZapf{39}{2}] % BLACK SCISSORS - \definesymbol[LowerBladeScissors][\USymbCharZapf{39}{3}] % LOWER BLADE SCISSORS - \definesymbol[WhiteScissors][\USymbCharZapf{39}{4}] % WHITE SCISSORS - -\stopsymbolset - -\startsymbolset[Unicode Dingbats] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[TelephoneLocationSign][\USymbCharZapf{39}{6}] % TELEPHONE LOCATION SIGN - \definesymbol[TapeDrive][\USymbCharZapf{39}{7}] % TAPE DRIVE - \definesymbol[Airplane][\USymbCharZapf{39}{8}] % AIRPLANE - \definesymbol[Envelope][\USymbCharZapf{39}{9}] % ENVELOPE - \definesymbol[VictoryHand][\USymbCharZapf{39}{12}] % VICTORY HAND - \definesymbol[WritingHand][\USymbCharZapf{39}{13}] % WRITING HAND - \definesymbol[LowerRightPencil][\USymbCharZapf{39}{14}] % LOWER RIGHT PENCIL - \definesymbol[Pencil][\USymbCharZapf{39}{15}] % PENCIL - \definesymbol[UpperRightPencil][\USymbCharZapf{39}{16}] % UPPER RIGHT PENCIL - \definesymbol[WhiteNib][\USymbCharZapf{39}{17}] % WHITE NIB - \definesymbol[BlackNib][\USymbCharZapf{39}{18}] % BLACK NIB - \definesymbol[BlackDiamondMinusWhiteX][\USymbCharZapf{39}{86}] % BLACK DIAMOND MINUS WHITE X - -\stopsymbolset - -\startsymbolset[Unicode Checks and Xs] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[CheckMark][\USymbCharZapf{39}{19}] % CHECK MARK - \definesymbol[HeavyCheckMark][\USymbCharZapf{39}{20}] % HEAVY CHECK MARK - \definesymbol[MultiplicationX][\USymbCharZapf{39}{21}] % MULTIPLICATION X - \definesymbol[HeavyMultiplicationX][\USymbCharZapf{39}{22}] % HEAVY MULTIPLICATION X - \definesymbol[BallotX][\USymbCharZapf{39}{23}] % BALLOT X - \definesymbol[HeavyBallotX][\USymbCharZapf{39}{24}] % HEAVY BALLOT X - -\stopsymbolset - -\startsymbolset[Unicode Stars] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[FourTeardropSpokedAsterisk][\USymbCharZapf{39}{34}] % FOUR TEARDROP-SPOKED ASTERISK - \definesymbol[FourBalloonSpokedAsterisk][\USymbCharZapf{39}{35}] % FOUR BALLOON-SPOKED ASTERISK - \definesymbol[HeavyFourBalloonSpokedAsterisk][\USymbCharZapf{39}{36}] % HEAVY FOUR BALLOON-SPOKED ASTERISK - \definesymbol[FourClubSpokedAsterisk][\USymbCharZapf{39}{37}] % FOUR CLUB-SPOKED ASTERISK - \definesymbol[BlackFourPointedStar][\USymbCharZapf{39}{38}] % BLACK FOUR POINTED STAR - \definesymbol[WhiteFourPointedStar][\USymbCharZapf{39}{39}] % WHITE FOUR POINTED STAR - \definesymbol[StressOutlinedWhiteStar][\USymbCharZapf{39}{41}] % STRESS OUTLINED WHITE STAR - \definesymbol[CircledWhiteStar][\USymbCharZapf{39}{42}] % CIRCLED WHITE STAR - \definesymbol[OpenCentreBlackStar][\USymbCharZapf{39}{43}] % OPEN CENTRE BLACK STAR - \definesymbol[BlackCentreWhiteStar][\USymbCharZapf{39}{44}] % BLACK CENTRE WHITE STAR - \definesymbol[OutlinedBlackStar][\USymbCharZapf{39}{45}] % OUTLINED BLACK STAR - \definesymbol[HeavyOutlinedBlackStar][\USymbCharZapf{39}{46}] % HEAVY OUTLINED BLACK STAR - \definesymbol[PinwheelStar][\USymbCharZapf{39}{47}] % PINWHEEL STAR - \definesymbol[ShadowedWhiteStar][\USymbCharZapf{39}{48}] % SHADOWED WHITE STAR - \definesymbol[HeavyAsterisk][\USymbCharZapf{39}{49}] % HEAVY ASTERISK - \definesymbol[OpenCentreAsterisk][\USymbCharZapf{39}{50}] % OPEN CENTRE ASTERISK - \definesymbol[EightSpokedAsterisk][\USymbCharZapf{39}{51}] % EIGHT SPOKED ASTERISK - \definesymbol[EightPointedBlackStar][\USymbCharZapf{39}{52}] % EIGHT POINTED BLACK STAR - \definesymbol[EightPointedPinwheelStar][\USymbCharZapf{39}{53}] % EIGHT POINTED PINWHEEL STAR - \definesymbol[SixPointedBlackStar][\USymbCharZapf{39}{54}] % SIX POINTED BLACK STAR - \definesymbol[EightPointedRectilinearBlackStar][\USymbCharZapf{39}{55}] % EIGHT POINTED RECTILINEAR BLACK STAR - \definesymbol[HeavyEightPointedRectilinearBlackStar][\USymbCharZapf{39}{56}] % HEAVY EIGHT POINTED RECTILINEAR BLACK STAR - \definesymbol[TwelvePointedBlackStar][\USymbCharZapf{39}{57}] % TWELVE POINTED BLACK STAR - \definesymbol[SixteenPointedAsterisk][\USymbCharZapf{39}{58}] % SIXTEEN POINTED ASTERISK - \definesymbol[TeardropSpokedAsterisk][\USymbCharZapf{39}{59}] % TEARDROP-SPOKED ASTERISK - \definesymbol[OpenCentreTeardropSpokedAsterisk][\USymbCharZapf{39}{60}] % OPEN CENTRE TEARDROP-SPOKED ASTERISK - \definesymbol[HeavyTeardropSpokedAsterisk][\USymbCharZapf{39}{61}] % HEAVY TEARDROP-SPOKED ASTERISK - \definesymbol[SixPetalledBlackAndWhiteFlorette][\USymbCharZapf{39}{62}] % SIX PETALLED BLACK AND WHITE FLORETTE - \definesymbol[BlackFlorette][\USymbCharZapf{39}{63}] % BLACK FLORETTE - \definesymbol[WhiteFlorette][\USymbCharZapf{39}{64}] % WHITE FLORETTE - \definesymbol[EightPetalledOutlinedBlackFlorette][\USymbCharZapf{39}{65}] % EIGHT PETALLED OUTLINED BLACK FLORETTE - \definesymbol[CircledOpenCentreEightPointedStar][\USymbCharZapf{39}{66}] % CIRCLED OPEN CENTRE EIGHT POINTED STAR - \definesymbol[HeavyTeardropSpokedPinwheelAsterisk][\USymbCharZapf{39}{67}] % HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK - \definesymbol[Sparkle][\USymbCharZapf{39}{71}] % SPARKLE - \definesymbol[HeavySparkle][\USymbCharZapf{39}{72}] % HEAVY SPARKLE - \definesymbol[Balloon-spokedAsterisk][\USymbCharZapf{39}{73}] % BALLOON-SPOKED ASTERISK - \definesymbol[EightTeardrop-spokedPropellerAsterisk][\USymbCharZapf{39}{74}] % EIGHT TEARDROP-SPOKED PROPELLER ASTERISK - \definesymbol[HeavyEightTeardrop-spokedPropellerAsterisk][\USymbCharZapf{39}{75}] % HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK - -\stopsymbolset - -\startsymbolset[Unicode Snowflakes] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[Snowflake][\USymbCharZapf{39}{68}] % SNOWFLAKE - \definesymbol[TightTrifoliateSnowflake][\USymbCharZapf{39}{69}] % TIGHT TRIFOLIATE SNOWFLAKE - \definesymbol[HeavyChevronSnowflake][\USymbCharZapf{39}{70}] % HEAVY CHEVRON SNOWFLAKE - -\stopsymbolset - -\startsymbolset[Unicode Shadowed Shapes] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[ShadowedWhiteCircle][\USymbCharZapf{39}{77}] % SHADOWED WHITE CIRCLE - \definesymbol[LowerRightDrop-shadowedWhiteSquare][\USymbCharZapf{39}{79}] % LOWER RIGHT DROP-SHADOWED WHITE SQUARE - \definesymbol[UpperRightDrop-shadowedWhiteSquare][\USymbCharZapf{39}{80}] % UPPER RIGHT DROP-SHADOWED WHITE SQUARE - \definesymbol[LowerRightShadowedWhiteSquare][\USymbCharZapf{39}{81}] % LOWER RIGHT SHADOWED WHITE SQUARE - \definesymbol[UpperRightShadowedWhiteSquare][\USymbCharZapf{39}{82}] % UPPER RIGHT SHADOWED WHITE SQUARE - -\stopsymbolset - -\startsymbolset[Unicode Bars] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[LightVerticalBar][\USymbCharZapf{39}{88}] % LIGHT VERTICAL BAR - \definesymbol[MediumVerticalBar][\USymbCharZapf{39}{89}] % MEDIUM VERTICAL BAR - \definesymbol[HeavyVerticalBar][\USymbCharZapf{39}{90}] % HEAVY VERTICAL BAR - -\stopsymbolset - -\startsymbolset[Unicode Dingbat Punctuation] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[HeavySingleTurnedCommaQuotationMark][\USymbCharZapf{39}{91}] % HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT - \definesymbol[HeavySingleCommaQuotationMark][\USymbCharZapf{39}{92}] % HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT - \definesymbol[HeavyDoubleTurnedCommaQuotationMark][\USymbCharZapf{39}{93}] % HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT - \definesymbol[HeavyDoubleCommaQuotationMark][\USymbCharZapf{39}{94}] % HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT - \definesymbol[CurvedStemParagraphSign][\USymbCharZapf{39}{97}] % CURVED STEM PARAGRAPH SIGN ORNAMENT - \definesymbol[HeavyExclamationMark][\USymbCharZapf{39}{98}] % HEAVY EXCLAMATION MARK ORNAMENT - \definesymbol[HeavyHeartExclamationMark][\USymbCharZapf{39}{99}] % HEAVY HEART EXCLAMATION MARK ORNAMENT - -\stopsymbolset - -\startsymbolset[Unicode Hearts] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[HeavyBlackHeart][\USymbCharZapf{39}{100}] % HEAVY BLACK HEART - \definesymbol[RotatedHeavyBlackHeartBullet][\USymbCharZapf{39}{101}] % ROTATED HEAVY BLACK HEART BULLET - \definesymbol[FloralHeart][\USymbCharZapf{39}{102}] % FLORAL HEART - \definesymbol[RotatedFloralHeartBullet][\USymbCharZapf{39}{103}] % ROTATED FLORAL HEART BULLET - -\stopsymbolset - -\startsymbolset[Unicode Negative Circled Digits] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[CircledOne][\USymbCharZapf{39}{118}] % DINGBAT NEGATIVE CIRCLED DIGIT ONE - \definesymbol[CircledTwo][\USymbCharZapf{39}{119}] % DINGBAT NEGATIVE CIRCLED DIGIT TWO - \definesymbol[CircledThree][\USymbCharZapf{39}{120}] % DINGBAT NEGATIVE CIRCLED DIGIT THREE - \definesymbol[CircledFour][\USymbCharZapf{39}{121}] % DINGBAT NEGATIVE CIRCLED DIGIT FOUR - \definesymbol[CircledFive][\USymbCharZapf{39}{122}] % DINGBAT NEGATIVE CIRCLED DIGIT FIVE - \definesymbol[CircledSix][\USymbCharZapf{39}{123}] % DINGBAT NEGATIVE CIRCLED DIGIT SIX - \definesymbol[CircledSeven][\USymbCharZapf{39}{124}] % DINGBAT NEGATIVE CIRCLED DIGIT SEVEN - \definesymbol[CircledEight][\USymbCharZapf{39}{125}] % DINGBAT NEGATIVE CIRCLED DIGIT EIGHT - \definesymbol[CircledNine][\USymbCharZapf{39}{126}] % DINGBAT NEGATIVE CIRCLED DIGIT NINE - \definesymbol[CircledTen][\USymbCharZapf{39}{127}] % DINGBAT NEGATIVE CIRCLED NUMBER TEN - -\stopsymbolset - -\startsymbolset[Unicode Circled Sans-serif Digits] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[CircledOne][\USymbCharZapf{39}{128}] % DINGBAT CIRCLED SANS-SERIF DIGIT ONE - \definesymbol[CircledTwo][\USymbCharZapf{39}{129}] % DINGBAT CIRCLED SANS-SERIF DIGIT TWO - \definesymbol[CircledThree][\USymbCharZapf{39}{130}] % DINGBAT CIRCLED SANS-SERIF DIGIT THREE - \definesymbol[CircledFour][\USymbCharZapf{39}{131}] % DINGBAT CIRCLED SANS-SERIF DIGIT FOUR - \definesymbol[CircledFive][\USymbCharZapf{39}{132}] % DINGBAT CIRCLED SANS-SERIF DIGIT FIVE - \definesymbol[CircledSix][\USymbCharZapf{39}{133}] % DINGBAT CIRCLED SANS-SERIF DIGIT SIX - \definesymbol[CircledSeven][\USymbCharZapf{39}{134}] % DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN - \definesymbol[CircledEight][\USymbCharZapf{39}{135}] % DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT - \definesymbol[CircledNine][\USymbCharZapf{39}{136}] % DINGBAT CIRCLED SANS-SERIF DIGIT NINE - \definesymbol[CircledTen][\USymbCharZapf{39}{137}] % DINGBAT CIRCLED SANS-SERIF NUMBER TEN - -\stopsymbolset - -\startsymbolset[Unicode Negative Circled Sans-serif Digits] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[CircledOne][\USymbCharZapf{39}{138}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE - \definesymbol[CircledTwo][\USymbCharZapf{39}{139}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO - \definesymbol[CircledThree][\USymbCharZapf{39}{140}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE - \definesymbol[CircledFour][\USymbCharZapf{39}{141}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR - \definesymbol[CircledFive][\USymbCharZapf{39}{142}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE - \definesymbol[CircledSix][\USymbCharZapf{39}{143}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX - \definesymbol[CircledSeven][\USymbCharZapf{39}{144}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN - \definesymbol[CircledEight][\USymbCharZapf{39}{145}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT - \definesymbol[CircledNine][\USymbCharZapf{39}{146}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE - \definesymbol[CircledTen][\USymbCharZapf{39}{147}] % DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN - -\stopsymbolset - -\startsymbolset[Unicode Dingbat Arrows] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[HeavyWideHeadedRightwardsArrow][\USymbCharZapf{39}{148}] % HEAVY WIDE-HEADED RIGHTWARDS ARROW - \definesymbol[HeavySouthEastArrow][\USymbCharZapf{39}{152}] % HEAVY SOUTH EAST ARROW - \definesymbol[HeavyRightwardsArrow][\USymbCharZapf{39}{153}] % HEAVY RIGHTWARDS ARROW - \definesymbol[HeavyNorthEastArrow][\USymbCharZapf{39}{154}] % HEAVY NORTH EAST ARROW - \definesymbol[DraftingPointRightwardsArrow][\USymbCharZapf{39}{155}] % DRAFTING POINT RIGHTWARDS ARROW - \definesymbol[HeavyRoundTippedRightwardsArrow][\USymbCharZapf{39}{156}] % HEAVY ROUND-TIPPED RIGHTWARDS ARROW - \definesymbol[TriangleHeadedRightwardsArrow][\USymbCharZapf{39}{157}] % TRIANGLE-HEADED RIGHTWARDS ARROW - \definesymbol[HeavyTriangleHeadedRightwardsArrow][\USymbCharZapf{39}{158}] % HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW - \definesymbol[DashedTriangleHeadedRightwardsArrow][\USymbCharZapf{39}{159}] % DASHED TRIANGLE-HEADED RIGHTWARDS ARROW - \definesymbol[HeavyDashedTriangleHeadedRightwardsArrow][\USymbCharZapf{39}{160}] % HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW - \definesymbol[BlackRightwardsArrow][\USymbCharZapf{39}{161}] % BLACK RIGHTWARDS ARROW - \definesymbol[3DTopLightedRightwardsArrowhead][\USymbCharZapf{39}{162}] % THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD - \definesymbol[3DBottomLightedRightwardsArrowhead][\USymbCharZapf{39}{163}] % THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD - \definesymbol[BlackRightwardsArrowhead][\USymbCharZapf{39}{164}] % BLACK RIGHTWARDS ARROWHEAD - \definesymbol[HeavyBlackCurvedDownwardsAndRightwardsArrow][\USymbCharZapf{39}{165}] % HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW - \definesymbol[HeavyBlackCurvedUpwardsAndRightwardsArrow][\USymbCharZapf{39}{166}] % HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW - \definesymbol[SquatBlackRightwardsArrow][\USymbCharZapf{39}{167}] % SQUAT BLACK RIGHTWARDS ARROW - \definesymbol[HeavyConcavePointedBlackRightwardsArrow][\USymbCharZapf{39}{168}] % HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW - \definesymbol[CircledHeavyWhiteRightwardsArrow][\USymbCharZapf{39}{178}] % CIRCLED HEAVY WHITE RIGHTWARDS ARROW - \definesymbol[OpenOutlinedRightwardsArrow][\USymbCharZapf{39}{190}] % OPEN-OUTLINED RIGHTWARDS ARROW - -\stopsymbolset - -\startsymbolset[Unicode Shadowed Arrows] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[RightShadedWhiteRightwardsArrow][\USymbCharZapf{39}{169}] % RIGHT-SHADED WHITE RIGHTWARDS ARROW - \definesymbol[LeftShadedWhiteRightwardsArrow][\USymbCharZapf{39}{170}] % LEFT-SHADED WHITE RIGHTWARDS ARROW - \definesymbol[BackTiltedShadowedWhiteRightwardsArrow][\USymbCharZapf{39}{171}] % BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW - \definesymbol[FrontTiltedShadowedWhiteRightwardsArrow][\USymbCharZapf{39}{172}] % FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW - \definesymbol[HeavyLowerRightShadowedWhiteRightwardsArrow][\USymbCharZapf{39}{173}] % HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW - \definesymbol[HeavyUpperRightShadowedWhiteRightwardsArrow][\USymbCharZapf{39}{174}] % HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW - \definesymbol[NotchedLowerRightShadowedWhiteRightwardsArrow][\USymbCharZapf{39}{175}] % NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW - \definesymbol[NotchedUpperRightShadowedWhiteRightwardsArrow][\USymbCharZapf{39}{177}] % NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW - -\stopsymbolset - -\startsymbolset[Unicode Tailed Arrows] % 0x2700: Requires UnicodeRegular27 - - \definesymbol[WhiteFeatheredRightwardsArrow][\USymbCharZapf{39}{179}] % WHITE-FEATHERED RIGHTWARDS ARROW - \definesymbol[BlackFeatheredSouthEastArrow][\USymbCharZapf{39}{180}] % BLACK-FEATHERED SOUTH EAST ARROW - \definesymbol[BlackFeatheredRightwardsArrow][\USymbCharZapf{39}{181}] % BLACK-FEATHERED RIGHTWARDS ARROW - \definesymbol[BlackFeatheredNorthEastArrow][\USymbCharZapf{39}{182}] % BLACK-FEATHERED NORTH EAST ARROW - \definesymbol[HeavyBlack-featheredSouthEastArrow][\USymbCharZapf{39}{183}] % HEAVY BLACK-FEATHERED SOUTH EAST ARROW - \definesymbol[HeavyBlackFeatheredRightwardsArrow][\USymbCharZapf{39}{184}] % HEAVY BLACK-FEATHERED RIGHTWARDS ARROW - \definesymbol[HeavyBlackFeatheredNorthEastArrow][\USymbCharZapf{39}{185}] % HEAVY BLACK-FEATHERED NORTH EAST ARROW - \definesymbol[TeardropBarbedRightwardsArrow][\USymbCharZapf{39}{186}] % TEARDROP-BARBED RIGHTWARDS ARROW - \definesymbol[HeavyTeardropShankedRightwardsArrow][\USymbCharZapf{39}{187}] % HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW - \definesymbol[WedgeTailedRightwardsArrow][\USymbCharZapf{39}{188}] % WEDGE-TAILED RIGHTWARDS ARROW - \definesymbol[HeavyWedgeTailedRightwardsArrow][\USymbCharZapf{39}{189}] % HEAVY WEDGE-TAILED RIGHTWARDS ARROW - -\stopsymbolset - -\endinput diff --git a/tex/context/base/symb-was.mkii b/tex/context/base/symb-was.mkii new file mode 100644 index 000000000..d6c324864 --- /dev/null +++ b/tex/context/base/symb-was.mkii @@ -0,0 +1,205 @@ +%D \module +%D [ file=symb-was, +%D version=2005.10.15, +%D title=\CONTEXT\ Symbol Libraries, +%D subtitle=Roland Waldi's Symbols (wasy-2), +%D author=Henning Hraban Ramm, +%D date=\currentdate, +%D copyright={public domain}] +%C +%C This module is in the public domain. + +%D This module implements the Roland Waldi Symbole font +%D (wasy). The names are derived from the \LATEX\ package +%D \type {wasysym} by Axel Kielhorn. The symbols are +%D available as Type~1 font and are included in \TEX\ distributions. +%D +%D This symbol font offers basic sets of astronomical, astrological, +%D geometrical, musical and general symbols, plus those needed +%D for the APL programming language and some more. +%D This module leaves out most of the math stuff, such as operators +%D and integrals. +%D +%D The font was designed by Robert Waldi and is in the public domain. +%D The PS Type 1 fonts are by Taco Hoekwater, \hyphenatedurl +%D {taco.hoekwater@wkap.nl}, and also in the public domain. +%D The wasysym \LATEX\ package is (c) Axel Kielhorn, \hyphenatedurl +%D {A.Kielhorn@web.de}, under the LaTeX Project Public License. +%D This stuff lives in \hyphenatedurl {http://dante.ctan.org/CTAN/fonts/wasy2/}. +%D +%D This \CONTEXT\ module is by Henning Hraban Ramm, \hyphenatedurl +%D {hraban@fiee.net}, given to the public domain as far as allowed +%D (some parts are copied from the \LATEX\ package). + +%D Slightly patched by HH. + +\loadmapfile[original-wasy.map] + +% there are also fonts for 6, 7, 8, 9 pt; how can we access these automatically? +% how about the bold wasy font? + +\definefontsynonym [WaldiSymbol] [wasy10] +\definefontsynonym [WaldiSymbolBold] [wasyb10] + +\def\WaldiSymbol#1{\getglyph{WaldiSymbol}{\char#1}} + +\def\wasy@over#1#2{{\setbox0\hbox{$#2$}\hbox to \wd0{\hss$#1$\hss}\kern-\wd0\box0}} + +% general symbols + +\startsymbolset [wasy general] + \definesymbol [male] [\WaldiSymbol {26}] + \definesymbol [female] [\WaldiSymbol {25}] + \definesymbol [currency] [\WaldiSymbol {27}] + \definesymbol [cent] [\WaldiSymbol{103}] + \definesymbol [lozenge] [\WaldiSymbol {53}] + \definesymbol [kreuz] [\WaldiSymbol {54}] + \definesymbol [smiley] [\WaldiSymbol {44}] + \definesymbol [blacksmiley] [\WaldiSymbol {45}] + \definesymbol [frownie] [\WaldiSymbol {47}] + \definesymbol [sun] [\WaldiSymbol {46}] + \definesymbol [checked] [\WaldiSymbol {8}] + \definesymbol [brokenvert] [\WaldiSymbol{124}] + \definesymbol [diameter] [\WaldiSymbol {31}] + \definesymbol [invdiameter] [\WaldiSymbol {21}] + \definesymbol [phone] [\WaldiSymbol {7}] + \definesymbol [recorder] [\WaldiSymbol {6}] + \definesymbol [clock] [\WaldiSymbol {28}] + \definesymbol [permil] [\WaldiSymbol{104}] + \definesymbol [bell] [\WaldiSymbol {10}] + \definesymbol [ataribox] [\WaldiSymbol{109}] + \definesymbol [pointer] [\WaldiSymbol {9}] + \definesymbol [lightning] [\WaldiSymbol {18}] + \definesymbol [agemO] [\WaldiSymbol {48}] +\stopsymbolset + +\startsymbolset [wasy music] + \definesymbol [eighthnote] [\WaldiSymbol{11}] + \definesymbol [quarternote] [\WaldiSymbol{12}] + \definesymbol [halfnote] [\WaldiSymbol{13}] + \definesymbol [fullnote] [\WaldiSymbol{14}] + \definesymbol [twonotes] [\WaldiSymbol{15}] +\stopsymbolset + +\startsymbolset [wasy astronomy] + \definesymbol [ascnode] [\WaldiSymbol{19}] + \definesymbol [descnode] [\WaldiSymbol{20}] + \definesymbol [astrosun] [\mathematics{\odot}] + \definesymbol [sun] [\WaldiSymbol{46}] % additional + \definesymbol [newmoon] [\WaldiSymbol{32}] + \definesymbol [fullmoon] [\WaldiSymbol{35}] + \definesymbol [rightmoon] [\WaldiSymbol{37}] + \definesymbol [leftmoon] [\WaldiSymbol{36}] + \definesymbol [vernal] [\WaldiSymbol{23}] + \definesymbol [mercury] [\WaldiSymbol{39}] + \definesymbol [mars] [\dontleavehmode\lower.2ex\hbox{\WaldiSymbol{26}}] + \definesymbol [saturn] [\WaldiSymbol{89}] + \definesymbol [neptune] [\WaldiSymbol{91}] + \definesymbol [earth] [\dontleavehmode\lower.3ex\hbox{\WaldiSymbol{38}}] + \definesymbol [venus] [\dontleavehmode\raise.2ex\hbox{\WaldiSymbol{25}}] + \definesymbol [jupiter] [\WaldiSymbol{88}] + \definesymbol [uranus] [\WaldiSymbol{90}] + \definesymbol [pluto] [\WaldiSymbol{92}] +\stopsymbolset + +\startsymbolset [wasy astrology] + \definesymbol [conjunction] [\WaldiSymbol {86}] + \definesymbol [opposition] [\WaldiSymbol {87}] + \definesymbol [aries] [\WaldiSymbol {23}] + \definesymbol [libra] [\WaldiSymbol {97}] + \definesymbol [taurus] [\WaldiSymbol {93}] + \definesymbol [scorpio] [\WaldiSymbol {98}] + \definesymbol [gemini] [\WaldiSymbol {94}] + \definesymbol [sagittarius] [\WaldiSymbol {99}] + \definesymbol [cancer] [\WaldiSymbol {95}] + \definesymbol [capricornus] [\WaldiSymbol{100}] + \definesymbol [leo] [\WaldiSymbol {19}] + \definesymbol [aquarius] [\WaldiSymbol{101}] + \definesymbol [virgo] [\WaldiSymbol {96}] + \definesymbol [pisces] [\WaldiSymbol{102}] +\stopsymbolset + +\startsymbolset [wasy geometry] + \definesymbol [fivestar] [\WaldiSymbol {69}] % HHR additional + \definesymbol [hexstar] [\WaldiSymbol {65}] + \definesymbol [varhexstar] [\WaldiSymbol {66}] + \definesymbol [davidsstar] [\WaldiSymbol {67}] + \definesymbol [Circle] [\WaldiSymbol {35}] + \definesymbol [CIRCLE] [\WaldiSymbol {32}] + \definesymbol [Leftcircle] [\WaldiSymbol {73}] + \definesymbol [LEFTCIRCLE] [\WaldiSymbol {71}] + \definesymbol [Rightcircle] [\WaldiSymbol {74}] + \definesymbol [RIGHTCIRCLE] [\WaldiSymbol {72}] + \definesymbol [LEFTcircle] [\dontleavehmode\hbox to \zeropoint{\WaldiSymbol{71}\hss}\WaldiSymbol{35}] + \definesymbol [RIGHTcircle] [\dontleavehmode\hbox to \zeropoint{\WaldiSymbol{72}\hss}\WaldiSymbol{35}] + \definesymbol [LEFTarrow] [\WaldiSymbol {16}] + \definesymbol [RIGHTarrow] [\WaldiSymbol {17}] + \definesymbol [UParrow] [\WaldiSymbol {75}] + \definesymbol [DOWNarrow] [\WaldiSymbol {76}] + \definesymbol [Box] [\WaldiSymbol {50}] + \definesymbol [APLbox] [\WaldiSymbol{126}] + \definesymbol [XBox] [\WaldiSymbol {52}] + \definesymbol [Bowtie] [\WaldiSymbol {49}] + \definesymbol [Diamond] [\WaldiSymbol {51}] + \definesymbol [octagon] [\WaldiSymbol {56}] + \definesymbol [hexagon] [\WaldiSymbol {55}] + \definesymbol [varhexagon] [\WaldiSymbol {57}] + \definesymbol [pentagon] [\WaldiSymbol {68}] + \definesymbol [pentastar] [\dontleavehmode\hbox to \zeropoint{\WaldiSymbol{68}\hss}\lower.04em\hbox{\WaldiSymbol{69}}] % HHR additional +\stopsymbolset + +\startsymbolset [wasy physics] + \definesymbol [varangle] [\WaldiSymbol{30}] + \definesymbol [invneg] [\WaldiSymbol{24}] + \definesymbol [leftturn] [\WaldiSymbol{34}] + \definesymbol [rightturn] [\WaldiSymbol{33}] + \definesymbol [diameter] [\WaldiSymbol{31}] + \definesymbol [invdiameter] [\WaldiSymbol{21}] % additional + \definesymbol [therefore] [\WaldiSymbol {5}] + \definesymbol [AC] [\mbox{\kern.05em\WaldiSymbol{58}\kern.05em}] + \definesymbol [HF] [\dontleavehmode + \lower.09em\hbox to \zeropoint{\kern.05em\WaldiSymbol{58}\hss}% + \raise.09em\hbox{\kern.05em\WaldiSymbol{58}\kern.05em}] + \definesymbol [VHF] [\WaldiSymbol{64}] + \definesymbol [photon] [\hbox{\WaldiSymbol{58}\WaldiSymbol{58}\WaldiSymbol{58}\WaldiSymbol{58}}] + \definesymbol [gluon] [\hbox{\WaldiSymbol{80}\WaldiSymbol{80}\WaldiSymbol{80}\WaldiSymbol{80}\WaldiSymbol{80}\WaldiSymbol{80}}] +\stopsymbolset + +\startsymbolset [wasy apl] + \definesymbol [APLup] [\WaldiSymbol{0}] + \definesymbol [APLdown] [\WaldiSymbol{70}] + \definesymbol [APLbox] [\WaldiSymbol{126}] + \definesymbol [APLinv] [\dontleavehmode\hbox to \zeropoint{$\div$\hss}\WaldiSymbol{126}] + \definesymbol [APLleftarrowbox] [\WaldiSymbol{112}] + \definesymbol [APLrightarrowbox][\WaldiSymbol{113}] + \definesymbol [APLuparrowbox] [\WaldiSymbol{110}] + \definesymbol [APLdownarrowbox] [\WaldiSymbol{111}] + \definesymbol [APLinput] [\WaldiSymbol{125}] + \definesymbol [APLminus] [\dontleavehmode\raise.7ex\hbox{$-$}] + \definesymbol [APLlog] [\WaldiSymbol{22}] + \definesymbol [APLstar] [\WaldiSymbol{69}] + \definesymbol [APLcomment] [\WaldiSymbol{127}] + \definesymbol [notslash] [\wasy@over{/}{-}] + \definesymbol [notbackslash] [\wasy@over{\backslash}{-}] + % + %definesymbol [APLvert] [\WaldiSymbol{}] + %definesymbol [APLnot] [\WaldiSymbol{}] + %definesymbol [APLcirc] [\WaldiSymbol{}] + % + % HH: messy, best define all combinations (todo) + % + \def\APLnot #1{\wasy@over{\sim }{#1}} + \def\APLcirc#1{\wasy@over{\circ}{#1}} + \def\APLvert#1{\wasy@over{\vert}{#1}} + % +\stopsymbolset + +%D \showsymbolset[wasy general] +%D \showsymbolset[wasy music] +%D \showsymbolset[wasy astronomy] +%D \showsymbolset[wasy astrology] +%D \showsymbolset[wasy geometry] +%D \showsymbolset[wasy physics] +%D \showsymbolset[wasy apl] + +\endinput diff --git a/tex/context/base/symb-was.tex b/tex/context/base/symb-was.tex deleted file mode 100644 index d6c324864..000000000 --- a/tex/context/base/symb-was.tex +++ /dev/null @@ -1,205 +0,0 @@ -%D \module -%D [ file=symb-was, -%D version=2005.10.15, -%D title=\CONTEXT\ Symbol Libraries, -%D subtitle=Roland Waldi's Symbols (wasy-2), -%D author=Henning Hraban Ramm, -%D date=\currentdate, -%D copyright={public domain}] -%C -%C This module is in the public domain. - -%D This module implements the Roland Waldi Symbole font -%D (wasy). The names are derived from the \LATEX\ package -%D \type {wasysym} by Axel Kielhorn. The symbols are -%D available as Type~1 font and are included in \TEX\ distributions. -%D -%D This symbol font offers basic sets of astronomical, astrological, -%D geometrical, musical and general symbols, plus those needed -%D for the APL programming language and some more. -%D This module leaves out most of the math stuff, such as operators -%D and integrals. -%D -%D The font was designed by Robert Waldi and is in the public domain. -%D The PS Type 1 fonts are by Taco Hoekwater, \hyphenatedurl -%D {taco.hoekwater@wkap.nl}, and also in the public domain. -%D The wasysym \LATEX\ package is (c) Axel Kielhorn, \hyphenatedurl -%D {A.Kielhorn@web.de}, under the LaTeX Project Public License. -%D This stuff lives in \hyphenatedurl {http://dante.ctan.org/CTAN/fonts/wasy2/}. -%D -%D This \CONTEXT\ module is by Henning Hraban Ramm, \hyphenatedurl -%D {hraban@fiee.net}, given to the public domain as far as allowed -%D (some parts are copied from the \LATEX\ package). - -%D Slightly patched by HH. - -\loadmapfile[original-wasy.map] - -% there are also fonts for 6, 7, 8, 9 pt; how can we access these automatically? -% how about the bold wasy font? - -\definefontsynonym [WaldiSymbol] [wasy10] -\definefontsynonym [WaldiSymbolBold] [wasyb10] - -\def\WaldiSymbol#1{\getglyph{WaldiSymbol}{\char#1}} - -\def\wasy@over#1#2{{\setbox0\hbox{$#2$}\hbox to \wd0{\hss$#1$\hss}\kern-\wd0\box0}} - -% general symbols - -\startsymbolset [wasy general] - \definesymbol [male] [\WaldiSymbol {26}] - \definesymbol [female] [\WaldiSymbol {25}] - \definesymbol [currency] [\WaldiSymbol {27}] - \definesymbol [cent] [\WaldiSymbol{103}] - \definesymbol [lozenge] [\WaldiSymbol {53}] - \definesymbol [kreuz] [\WaldiSymbol {54}] - \definesymbol [smiley] [\WaldiSymbol {44}] - \definesymbol [blacksmiley] [\WaldiSymbol {45}] - \definesymbol [frownie] [\WaldiSymbol {47}] - \definesymbol [sun] [\WaldiSymbol {46}] - \definesymbol [checked] [\WaldiSymbol {8}] - \definesymbol [brokenvert] [\WaldiSymbol{124}] - \definesymbol [diameter] [\WaldiSymbol {31}] - \definesymbol [invdiameter] [\WaldiSymbol {21}] - \definesymbol [phone] [\WaldiSymbol {7}] - \definesymbol [recorder] [\WaldiSymbol {6}] - \definesymbol [clock] [\WaldiSymbol {28}] - \definesymbol [permil] [\WaldiSymbol{104}] - \definesymbol [bell] [\WaldiSymbol {10}] - \definesymbol [ataribox] [\WaldiSymbol{109}] - \definesymbol [pointer] [\WaldiSymbol {9}] - \definesymbol [lightning] [\WaldiSymbol {18}] - \definesymbol [agemO] [\WaldiSymbol {48}] -\stopsymbolset - -\startsymbolset [wasy music] - \definesymbol [eighthnote] [\WaldiSymbol{11}] - \definesymbol [quarternote] [\WaldiSymbol{12}] - \definesymbol [halfnote] [\WaldiSymbol{13}] - \definesymbol [fullnote] [\WaldiSymbol{14}] - \definesymbol [twonotes] [\WaldiSymbol{15}] -\stopsymbolset - -\startsymbolset [wasy astronomy] - \definesymbol [ascnode] [\WaldiSymbol{19}] - \definesymbol [descnode] [\WaldiSymbol{20}] - \definesymbol [astrosun] [\mathematics{\odot}] - \definesymbol [sun] [\WaldiSymbol{46}] % additional - \definesymbol [newmoon] [\WaldiSymbol{32}] - \definesymbol [fullmoon] [\WaldiSymbol{35}] - \definesymbol [rightmoon] [\WaldiSymbol{37}] - \definesymbol [leftmoon] [\WaldiSymbol{36}] - \definesymbol [vernal] [\WaldiSymbol{23}] - \definesymbol [mercury] [\WaldiSymbol{39}] - \definesymbol [mars] [\dontleavehmode\lower.2ex\hbox{\WaldiSymbol{26}}] - \definesymbol [saturn] [\WaldiSymbol{89}] - \definesymbol [neptune] [\WaldiSymbol{91}] - \definesymbol [earth] [\dontleavehmode\lower.3ex\hbox{\WaldiSymbol{38}}] - \definesymbol [venus] [\dontleavehmode\raise.2ex\hbox{\WaldiSymbol{25}}] - \definesymbol [jupiter] [\WaldiSymbol{88}] - \definesymbol [uranus] [\WaldiSymbol{90}] - \definesymbol [pluto] [\WaldiSymbol{92}] -\stopsymbolset - -\startsymbolset [wasy astrology] - \definesymbol [conjunction] [\WaldiSymbol {86}] - \definesymbol [opposition] [\WaldiSymbol {87}] - \definesymbol [aries] [\WaldiSymbol {23}] - \definesymbol [libra] [\WaldiSymbol {97}] - \definesymbol [taurus] [\WaldiSymbol {93}] - \definesymbol [scorpio] [\WaldiSymbol {98}] - \definesymbol [gemini] [\WaldiSymbol {94}] - \definesymbol [sagittarius] [\WaldiSymbol {99}] - \definesymbol [cancer] [\WaldiSymbol {95}] - \definesymbol [capricornus] [\WaldiSymbol{100}] - \definesymbol [leo] [\WaldiSymbol {19}] - \definesymbol [aquarius] [\WaldiSymbol{101}] - \definesymbol [virgo] [\WaldiSymbol {96}] - \definesymbol [pisces] [\WaldiSymbol{102}] -\stopsymbolset - -\startsymbolset [wasy geometry] - \definesymbol [fivestar] [\WaldiSymbol {69}] % HHR additional - \definesymbol [hexstar] [\WaldiSymbol {65}] - \definesymbol [varhexstar] [\WaldiSymbol {66}] - \definesymbol [davidsstar] [\WaldiSymbol {67}] - \definesymbol [Circle] [\WaldiSymbol {35}] - \definesymbol [CIRCLE] [\WaldiSymbol {32}] - \definesymbol [Leftcircle] [\WaldiSymbol {73}] - \definesymbol [LEFTCIRCLE] [\WaldiSymbol {71}] - \definesymbol [Rightcircle] [\WaldiSymbol {74}] - \definesymbol [RIGHTCIRCLE] [\WaldiSymbol {72}] - \definesymbol [LEFTcircle] [\dontleavehmode\hbox to \zeropoint{\WaldiSymbol{71}\hss}\WaldiSymbol{35}] - \definesymbol [RIGHTcircle] [\dontleavehmode\hbox to \zeropoint{\WaldiSymbol{72}\hss}\WaldiSymbol{35}] - \definesymbol [LEFTarrow] [\WaldiSymbol {16}] - \definesymbol [RIGHTarrow] [\WaldiSymbol {17}] - \definesymbol [UParrow] [\WaldiSymbol {75}] - \definesymbol [DOWNarrow] [\WaldiSymbol {76}] - \definesymbol [Box] [\WaldiSymbol {50}] - \definesymbol [APLbox] [\WaldiSymbol{126}] - \definesymbol [XBox] [\WaldiSymbol {52}] - \definesymbol [Bowtie] [\WaldiSymbol {49}] - \definesymbol [Diamond] [\WaldiSymbol {51}] - \definesymbol [octagon] [\WaldiSymbol {56}] - \definesymbol [hexagon] [\WaldiSymbol {55}] - \definesymbol [varhexagon] [\WaldiSymbol {57}] - \definesymbol [pentagon] [\WaldiSymbol {68}] - \definesymbol [pentastar] [\dontleavehmode\hbox to \zeropoint{\WaldiSymbol{68}\hss}\lower.04em\hbox{\WaldiSymbol{69}}] % HHR additional -\stopsymbolset - -\startsymbolset [wasy physics] - \definesymbol [varangle] [\WaldiSymbol{30}] - \definesymbol [invneg] [\WaldiSymbol{24}] - \definesymbol [leftturn] [\WaldiSymbol{34}] - \definesymbol [rightturn] [\WaldiSymbol{33}] - \definesymbol [diameter] [\WaldiSymbol{31}] - \definesymbol [invdiameter] [\WaldiSymbol{21}] % additional - \definesymbol [therefore] [\WaldiSymbol {5}] - \definesymbol [AC] [\mbox{\kern.05em\WaldiSymbol{58}\kern.05em}] - \definesymbol [HF] [\dontleavehmode - \lower.09em\hbox to \zeropoint{\kern.05em\WaldiSymbol{58}\hss}% - \raise.09em\hbox{\kern.05em\WaldiSymbol{58}\kern.05em}] - \definesymbol [VHF] [\WaldiSymbol{64}] - \definesymbol [photon] [\hbox{\WaldiSymbol{58}\WaldiSymbol{58}\WaldiSymbol{58}\WaldiSymbol{58}}] - \definesymbol [gluon] [\hbox{\WaldiSymbol{80}\WaldiSymbol{80}\WaldiSymbol{80}\WaldiSymbol{80}\WaldiSymbol{80}\WaldiSymbol{80}}] -\stopsymbolset - -\startsymbolset [wasy apl] - \definesymbol [APLup] [\WaldiSymbol{0}] - \definesymbol [APLdown] [\WaldiSymbol{70}] - \definesymbol [APLbox] [\WaldiSymbol{126}] - \definesymbol [APLinv] [\dontleavehmode\hbox to \zeropoint{$\div$\hss}\WaldiSymbol{126}] - \definesymbol [APLleftarrowbox] [\WaldiSymbol{112}] - \definesymbol [APLrightarrowbox][\WaldiSymbol{113}] - \definesymbol [APLuparrowbox] [\WaldiSymbol{110}] - \definesymbol [APLdownarrowbox] [\WaldiSymbol{111}] - \definesymbol [APLinput] [\WaldiSymbol{125}] - \definesymbol [APLminus] [\dontleavehmode\raise.7ex\hbox{$-$}] - \definesymbol [APLlog] [\WaldiSymbol{22}] - \definesymbol [APLstar] [\WaldiSymbol{69}] - \definesymbol [APLcomment] [\WaldiSymbol{127}] - \definesymbol [notslash] [\wasy@over{/}{-}] - \definesymbol [notbackslash] [\wasy@over{\backslash}{-}] - % - %definesymbol [APLvert] [\WaldiSymbol{}] - %definesymbol [APLnot] [\WaldiSymbol{}] - %definesymbol [APLcirc] [\WaldiSymbol{}] - % - % HH: messy, best define all combinations (todo) - % - \def\APLnot #1{\wasy@over{\sim }{#1}} - \def\APLcirc#1{\wasy@over{\circ}{#1}} - \def\APLvert#1{\wasy@over{\vert}{#1}} - % -\stopsymbolset - -%D \showsymbolset[wasy general] -%D \showsymbolset[wasy music] -%D \showsymbolset[wasy astronomy] -%D \showsymbolset[wasy astrology] -%D \showsymbolset[wasy geometry] -%D \showsymbolset[wasy physics] -%D \showsymbolset[wasy apl] - -\endinput diff --git a/tex/context/base/thrd-pic.mkii b/tex/context/base/thrd-pic.mkii new file mode 100644 index 000000000..3c25d8a81 --- /dev/null +++ b/tex/context/base/thrd-pic.mkii @@ -0,0 +1,3694 @@ +% Since this file is not available in every distribution, we +% have copied the original in this file. The manuals to +% Wichura's PiCTeX and TaBlE packages are not available on +% line and are distributed by respectively the TeX Users Group +% and Personal TeX Inc. + +% We've patched this file for catcode ! because in luatex we use +% catcode tables and using unprotect/protect is cleaner. + +% This is PiCTeX, Version 1.1 9/21/87 + +% CAVEAT: The PiCTeX manual often has a more lucid explanation +% of any given topic than you will find in the internal documentation +% of the macros. + +% PiCTeX's commands can be classified into two groups: (1) public (or +% external), and (2) private (or internal). The public macros are +% discussed at length in the manual. The only discussion of the private +% macros is the internal documentation. The private macros all have +% names beginning with an exclamation point (!) of category code 11. +% Since in normal usage "!" has category code 12, these macros can't +% be accessed or modified by the general user. + +% The macros are organized into thematically related groups. For example, +% the macros dealing with dots & dashes are all in the DASHPATTERN group. +% The table below shows which macros are in which groups. The table +% covers all public macros, and many (but not all) of PiCTeX's upper level +% private macros. Following the table, the various groups are listed +% in the order in which they appear in the table. + +% *********************** TABLE OF GROUPS OF MACROS ********************** + +% HACKS: Utility macros +% \PiC +% \PiCTeX +% \placevalueinpts +% \!!loop +% \!cfor +% \!copylist +% \!ecfor +% \!etfor +% \!getnext +% \!getnextvalueof +% \!ifempty +% \!ifnextchar +% \!leftappend +% \!listaddon +% \!loop +% \!lop +% \!mlap +% \!not +% \!removept +% \!rightappend +% \!tfor +% \!vmlap +% \!wlet + +% ALLOCATION: Allocates registers + +% AREAS: Deals with plot areas +% \axis +% \grid +% \invisibleaxes +% \normalgraphs +% \plotheading +% \setplotarea +% \visibleaxes + +% ARROWS: Draws arrows +% \arrow +% \betweenarrows + +% BARS: Draws bars +% \putbar +% \setbars + +% BOXES: Draws rectangles +% \frame +% \putrectangle +% \rectangle +% \shaderectangleson +% \shaderectanglesoff + +% CURVES: Upper level plot commands +% \hshade +% \plot +% \sethistograms +% \setlinear +% \setquadratic +% \vshade + +% DASHPATTERNS: Sets up dash patterns +% \findlength +% \setdashes +% \setdashesnear +% \setdashpattern +% \setdots +% \setdotsnear +% \setsolid +% \!dashingoff +% \!dashingon + +% DIVISION: Does long division of dimension registers +% \Divide +% \!divide + +% ELLIPSES: Draws ellipses and circles +% \circulararc +% \ellipticalarc + +% RULES: Draws rules, i.e., horizontal & vertical lines +% \putrule +% \!putdashedhline +% \!putdashedvline +% \!puthline +% \!putsolidhline +% \!putsolidvline +% \!putvline + +% LINEAR ARC: Draws straight lines -- solid and dashed +% \inboundscheckoff +% \inboundscheckon +% \!advancedashing +% \!drawlinearsegment +% \!initinboundscheck +% \!linearsolid +% \!lineardashed +% \!ljoin +% \!plotifinbounds +% \!start + +% LOGTEN: Log_10 function +% \!logten + +% PICTURES: Basic setups for PiCtures; \put commands +% \accountingoff +% \accountingon +% \beginpicture +% \endpicture +% \endpicturesave +% \lines +% \multiput +% \put +% \setcoordinatemode +% \setcoordinatesystem +% \setdimensionmode +% \stack +% \Lines +% \Xdistance +% \Ydistance +% \!dimenput +% \!ifcoordmode +% \!ifdimenmode +% \!setcoordmode +% \!setdimenmode +% \!setputobject + +% PLOTTING: Things to do with plotting +% \dontsavelinesandcurves +% \replot +% \savelinesandcurves +% \setplotsymbol +% \writesavefile +% \!plot + +% PYTHAGORAS: Euclidean distance function +% \placehypotenuse +% \!Pythag + +% QUADRATIC ARC: Draws a quadratic arc +% \!qjoin + +% ROTATIONS: Handles rotations +% \startrotation +% \stoprotation +% \!rotateaboutpivot +% \!rotateonly + +% SHADING: Handles shading +% \setshadegrid +% \setshadesymbol +% \!lshade +% \!qshade +% \!starthshade +% \!startvshade + +% TICKS: Draws ticks on graphs +% \gridlines +% \loggedticks +% \nogridlines +% \ticksin +% \ticksout +% \unloggesticks + +% ***************** END OF TABLE OF GROUPS OF MACROS ******************** + + +% \catcode`!=11 % ***** THIS MUST NEVER BE OMITTED + +\unprotect + +% ******************************* +% *** HACKS (Utility macros) *** +% ******************************* + +% ** User commands +% ** \PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC} +% ** \PiCTeX{\PiC\kern-.11em\TeX} +% ** \placevalueinpts of in {CONTROL SEQUENCE} + +% ** Internal commands +% ** \!ifnextchar{CHARACTER}{TRUE ACTION}{FALSE ACTION} +% ** \!tfor NAME := LIST \do {BODY} +% ** \!etfor NAME:= LIST \do {BODY} +% ** \!cfor NAME := LIST \do {BODY} +% ** \!ecfor NAME:= LIST \do {BODY} +% ** \!ifempty{MACRO}{TRUE ACTION}{FALSE ACTION} +% ** \!getnext\\ITEMfrom\LIST +% ** \!getnextvalueof\DIMEN\from\LIST +% ** \!copylist\LISTMACRO_A\to\LISTMACRO_B +% ** \!wlet\CONTROL_SEQUENCE_A=\CONTROL_SEQUENCE_B +% ** \!listaddon ITEM LIST +% ** \!rightappendITEM\withCS\to\LISTMACRO +% ** \!leftappendITEM\withCS\to\LISTMACRO +% ** \!lop\LISTMACRO\to\ITEM +% ** \!loop ... repeat +% ** \!!loop ... repeat +% ** \!removept{DIMENSION REGISTER}{CONTROL SEQUENCE} +% ** \!mlap{...} +% ** \!vmlap{...} +% ** \!not{TEK if-CONDITION} + +% ** First, here are the the PiCTeX logo, and the syllable PiC: +\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC} +\def\PiCTeX{\PiC\kern-.11em\TeX} + +% ** The following macro expands to parameter #2 or parameter #3 according to +% ** whether the next non-blank character following the macro is or is not #1. +% ** Blanks following the macro are gobbled. +\def\!ifnextchar#1#2#3{% + \let\!testchar=#1% + \def\!first{#2}% + \def\!second{#3}% + \futurelet\!nextchar\!testnext} +\def\!testnext{% + \ifx \!nextchar \!spacetoken + \let\!next=\!skipspacetestagain + \else + \ifx \!nextchar \!testchar + \let\!next=\!first + \else + \let\!next=\!second + \fi + \fi + \!next} +\def\\{\!skipspacetestagain} + \expandafter\def\\ {\futurelet\!nextchar\!testnext} +\def\\{\let\!spacetoken= } \\ % ** set \spacetoken to a space token + + +% ** Borrow the "tfor" macro from Latex: +% ** \!tfor NAME := LIST \do {BODY} +% ** if, before expansion, LIST = T1 ... Tn, where each Ti is a token +% ** or {...}, then executes BODY n times, with NAME = Ti on the +% ** i-th iteration. Works for n=0. +\def\!tfor#1:=#2\do#3{% + \edef\!fortemp{#2}% + \ifx\!fortemp\!empty + \else + \!tforloop#2\!nil\!nil\!!#1{#3}% + \fi} +\def\!tforloop#1#2\!!#3#4{% + \def#3{#1}% + \ifx #3\!nnil + \let\!nextwhile=\!fornoop + \else + #4\relax + \let\!nextwhile=\!tforloop + \fi + \!nextwhile#2\!!#3{#4}} + + +% ** \!etfor NAME:= LIST\do {BODY} +% ** This is like \!cfor, but LIST is any balanced token list whose complete +% ** expansion has the form T1 ... Tn +\def\!etfor#1:=#2\do#3{% + \def\!!tfor{\!tfor#1:=}% + \edef\!!!tfor{#2}% + \expandafter\!!tfor\!!!tfor\do{#3}} + + +% ** modify the Latex \tfor (token-for) loop to a \cfor (comma-for) loop. +% ** \!cfor NAME := LIST \do {BODY} +% ** if, before expansion, LIST = a1,a2,...an, then executes BODY n times, +% ** with NAME = ai on the i-th iteration. Works for n=0. +\def\!cfor#1:=#2\do#3{% + \edef\!fortemp{#2}% + \ifx\!fortemp\!empty + \else + \!cforloop#2,\!nil,\!nil\!!#1{#3}% + \fi} +\def\!cforloop#1,#2\!!#3#4{% + \def#3{#1}% + \ifx #3\!nnil + \let\!nextwhile=\!fornoop + \else + #4\relax + \let\!nextwhile=\!cforloop + \fi + \!nextwhile#2\!!#3{#4}} + + +% ** \!ecfor NAME:= LIST\do {BODY} +% ** This is like \!cfor, but LIST is any balanced token list whose complete +% ** expansion has the form a1,a2,...,an. +\def\!ecfor#1:=#2\do#3{% + \def\!!cfor{\!cfor#1:=}% + \edef\!!!cfor{#2}% + \expandafter\!!cfor\!!!cfor\do{#3}} + + +\def\!empty{} +\def\!nnil{\!nil} +\def\!fornoop#1\!!#2#3{} + + +% ** \!ifempty{ARG}{TRUE ACTION}{FALSE ACTION} +\def\!ifempty#1#2#3{% + \edef\!emptyarg{#1}% + \ifx\!emptyarg\!empty + #2% + \else + #3% + \fi} + +% ** \!getnext\\ITEMfrom\LIST +% ** \LIST has the form \\{item1}\\{item2}\\{item3}...\\{itemk} +% ** This routine sets \ITEM to item1, and cycles \LIST to +% ** \\{item2}\\{item3}...\\{itemk}\\{item1} +\def\!getnext#1\from#2{% + \expandafter\!gnext#2\!#1#2}% +\def\!gnext\\#1#2\!#3#4{% + \def#3{#1}% + \def#4{#2\\{#1}}% + \ignorespaces} + + +% ** \!getnextvalueof\DIMEN\from\LIST +% ** Similar to !getnext. +% ** \LIST has the form \\{dimen1}\\{dimen2}\\{dimen3} ... +% ** \DIMEN is a dimension register +% ** Works also for counts +% +\def\!getnextvalueof#1\from#2{% + \expandafter\!gnextv#2\!#1#2}% +\def\!gnextv\\#1#2\!#3#4{% + #3=#1% + \def#4{#2\\{#1}}% + \ignorespaces} + + +% ** \!copylist\LISTMACROA\to\LISTMACROB +% ** makes the replacement text of LISTMACRO B identical to that of +% ** list macro A. +\def\!copylist#1\to#2{% + \expandafter\!!copylist#1\!#2} +\def\!!copylist#1\!#2{% + \def#2{#1}\ignorespaces} + + +% ** \!wlet\CSA=\CSB +% ** lets control sequence \CSB = control sequence \CSA, and writes a +% ** message to that effect in the log file using plain TEK's \wlog +\def\!wlet#1=#2{% + \let#1=#2 + \wlog{\string#1=\string#2}} + +% ** \!listaddon ITEM LIST +% ** LIST <-- LIST \\ ITEM +\def\!listaddon#1#2{% + \expandafter\!!listaddon#2\!{#1}#2} +\def\!!listaddon#1\!#2#3{% + \def#3{#1\\#2}} + +% ** \!rightappendITEM\to\LISTMACRO +% ** \LISTMACRO --> \LISTMACRO\\{ITEM} +%\def\!rightappend#1\to#2{\expandafter\!!rightappend#2\!{#1}#2} +%\def\!!rightappend#1\!#2#3{\def#3{#1\\{#2}}} + + +% ** \!rightappendITEM\withCS\to\LISTMACRO +% ** \LISTMACRO --> \LISTMACRO||CS||{ITEM} +\def\!rightappend#1\withCS#2\to#3{\expandafter\!!rightappend#3\!#2{#1}#3} +\def\!!rightappend#1\!#2#3#4{\def#4{#1#2{#3}}} + + +% ** \!leftappendITEM\withCS\to\LISTMACRO +% ** \LISTMACRO --> CS||{ITEM}||\LISTMACRO +\def\!leftappend#1\withCS#2\to#3{\expandafter\!!leftappend#3\!#2{#1}#3} +\def\!!leftappend#1\!#2#3#4{\def#4{#2{#3}#1}} + + +% ** \!lop\LISTMACRO\to\ITEM +% ** \\{item1}\\{item2}\\{item3} ... --> \\{item2}\\{item3} ... +% ** item1 --> \ITEM +\def\!lop#1\to#2{\expandafter\!!lop#1\!#1#2} +\def\!!lop\\#1#2\!#3#4{\def#4{#1}\def#3{#2}} + + +% ** \!placeNUMBER\of\LISTMACRO\in\ITEM +% ** the NUMBERth item of \LISTMACRO --> replacement text of \ITEM +%\def\!place#1\of#2\in#3{\def#3{\outofrange}% +%{\count0=#1\def\\##1{\advance\count0-1 \ifnum\count0=0 \gdef#3{##1}\fi}#2}} + + +% ** Following code converts a commalist to a list macro, with all items +% ** fully expanded. +%\!ecfor\item:=\commalist\do{\expandafter\!rightappend\item\to\list} + + +% ** \!loop ... repeat +% ** This is exactly like TEX's \loop ... repeat. It can be used in nesting +% ** two loops, without puting the inner one inside a group. +\def\!loop#1\repeat{\def\!body{#1}\!iterate} +\def\!iterate{\!body\let\!next=\!iterate\else\let\!next=\relax\fi\!next} + +% ** \!!loop ... repeat +% ** This is exactly like TEX's \loop ... repeat. It can be used in nesting +% ** two loops, without puting the inner one inside a group. +\def\!!loop#1\repeat{\def\!!body{#1}\!!iterate} +\def\!!iterate{\!!body\let\!!next=\!!iterate\else\let\!!next=\relax\fi\!!next} +% (\multiput uses \!!loop) + +% ** \!removept{DIMENREG}{\CS} +% ** Defines the control sequence CS to be the value (in points) in the +% ** dimension register DIMENREG (but without the "pt" TEK usually adds) +% ** E.g., after \dimen0=12.3pt \!removept\dimen0\A, \A expands to 12.3 +\def\!removept#1#2{\edef#2{\expandafter\!!removePT\the#1}} +{\catcode`p=12 \catcode`t=12 \gdef\!!removePT#1pt{#1}} + +% ** \pladevalueinpts of in {CONTROL SEQUENCE} +\def\placevalueinpts of <#1> in #2 {% + \!removept{#1}{#2}} + +% ** \!mlap{...} \!vmlap{...} +% ** Center ... in a box of width 0. +\def\!mlap#1{\hbox to 0pt{\hss#1\hss}} +\def\!vmlap#1{\vbox to 0pt{\vss#1\vss}} + +% ** \!not{TEK if-CONDITION} +% ** By a TEK if-CONDITION is meant something like +% ** \ifnum\N<0, or \ifdim\A>\B +% ** \!not produces an if-condition which is false if the original condition +% ** is true, and true if the original condition is false. +\def\!not#1{% + #1\relax + \!switchfalse + \else + \!switchtrue + \fi + \if!switch + \ignorespaces} + + +% ******************* +% *** ALLOCATIONS *** +% ******************* + +% This section allocates all the registers PiCTeX uses. Following +% each allocation is a string of the form ....N.D...L......... ; +% the various letters show which sections of PiCTeX make explicit +% reference to that register, according to the following code: + +% H Hacks +% A Areas +% W arroWs +% B Bars +% X boXes +% C Curves +% D Dashpattterns +% V diVision +% E Ellipses +% U rUles +% L Linear arc +% G loGten +% P Pictures +% O plOtting +% Y pYthagoras +% Q Quadratic arc +% R Rotations +% S Shading +% T Ticks + +% Turn off messages from TeX's allocation macros +\let\!!!wlog=\wlog % "\wlog" is defined in plain TeX +\def\wlog#1{} + +\newdimen\headingtoplotskip %.A................. +\newdimen\linethickness %.A..X....U........T +\newdimen\longticklength %.A................T +\newdimen\plotsymbolspacing %......D...L....Q... +\newdimen\shortticklength %.A................T +\newdimen\stackleading %.A..........P...... +\newdimen\tickstovaluesleading %.A................T +\newdimen\totalarclength %......D...L....Q... +\newdimen\valuestolabelleading %.A................. + +\newbox\!boxA %.AW...............T +\newbox\!boxB %..W................ +\newbox\!picbox %............P...... +\newbox\!plotsymbol %..........L..O..... +\newbox\!putobject %............PO...S. +\newbox\!shadesymbol %.................S. + +\newcount\!countA %.A....D..UL....Q.ST +\newcount\!countB %......D..U.....Q.ST +\newcount\!countC %...............Q..T +\newcount\!countD %................... +\newcount\!countE %.............O....T +\newcount\!countF %.............O....T +\newcount\!countG %..................T +\newcount\!fiftypt %.........U......... +\newcount\!intervalno %..........L....Q... +\newcount\!npoints %..........L........ +\newcount\!nsegments %.........U......... +\newcount\!ntemp %............P...... +\newcount\!parity %.................S. +\newcount\!scalefactor %..................T +\newcount\!tfs %.......V........... +\newcount\!tickcase %..................T + +\newdimen\!Xleft %............P...... +\newdimen\!Xright %............P...... +\newdimen\!Xsave %.A................T +\newdimen\!Ybot %............P...... +\newdimen\!Ysave %.A................T +\newdimen\!Ytop %............P...... +\newdimen\!angle %........E.......... +\newdimen\!arclength %..W......UL....Q... +\newdimen\!areabloc %.A........L........ +\newdimen\!arealloc %.A........L........ +\newdimen\!arearloc %.A........L........ +\newdimen\!areatloc %.A........L........ +\newdimen\!bshrinkage %.................S. +\newdimen\!checkbot %..........L........ +\newdimen\!checkleft %..........L........ +\newdimen\!checkright %..........L........ +\newdimen\!checktop %..........L........ +\newdimen\!dimenA %.AW.X.DVEUL..OYQRST +\newdimen\!dimenB %....X.DVEU...O.QRS. +\newdimen\!dimenC %..W.X.DVEU......RS. +\newdimen\!dimenD %..W.X.DVEU....Y.RS. +\newdimen\!dimenE %..W........G..YQ.S. +\newdimen\!dimenF %...........G..YQ.S. +\newdimen\!dimenG %...........G..YQ.S. +\newdimen\!dimenH %...........G..Y..S. +\newdimen\!dimenI %...BX.........Y.... +\newdimen\!distacross %..........L....Q... +\newdimen\!downlength %..........L........ +\newdimen\!dp %.A..X.......P....S. +\newdimen\!dshade %.................S. +\newdimen\!dxpos %..W......U..P....S. +\newdimen\!dxprime %...............Q... +\newdimen\!dypos %..WB.....U..P...... +\newdimen\!dyprime %...............Q... +\newdimen\!ht %.A..X.......P....S. +\newdimen\!leaderlength %......D..U......... +\newdimen\!lshrinkage %.................S. +\newdimen\!midarclength %...............Q... +\newdimen\!offset %.A................T +\newdimen\!plotheadingoffset %.A................. +\newdimen\!plotsymbolxshift %..........L..O..... +\newdimen\!plotsymbolyshift %..........L..O..... +\newdimen\!plotxorigin %..........L..O..... +\newdimen\!plotyorigin %..........L..O..... +\newdimen\!rootten %...........G....... +\newdimen\!rshrinkage %.................S. +\newdimen\!shadesymbolxshift %.................S. +\newdimen\!shadesymbolyshift %.................S. +\newdimen\!tenAa %...........G....... +\newdimen\!tenAc %...........G....... +\newdimen\!tenAe %...........G....... +\newdimen\!tshrinkage %.................S. +\newdimen\!uplength %..........L........ +\newdimen\!wd %....X.......P....S. +\newdimen\!wmax %...............Q... +\newdimen\!wmin %...............Q... +\newdimen\!xB %...............Q... +\newdimen\!xC %...............Q... +\newdimen\!xE %..W.....E.L....Q.S. +\newdimen\!xM %..W.....E......Q.S. +\newdimen\!xS %..W.....E.L....Q.S. +\newdimen\!xaxislength %.A................T +\newdimen\!xdiff %..........L........ +\newdimen\!xleft %............P...... +\newdimen\!xloc %..WB.....U.......S. +\newdimen\!xorigin %.A........L.P....S. +\newdimen\!xpivot %................R.. +\newdimen\!xpos %..........L.P..Q.ST +\newdimen\!xprime %...............Q... +\newdimen\!xright %............P...... +\newdimen\!xshade %.................S. +\newdimen\!xshift %..W.........PO...S. +\newdimen\!xtemp %............P...... +\newdimen\!xunit %.AWBX...EUL.P..QRS. +\newdimen\!xxE %........E.......... +\newdimen\!xxM %........E.......... +\newdimen\!xxS %........E.......... +\newdimen\!xxloc %..WB....EU......... +\newdimen\!yB %...............Q... +\newdimen\!yC %...............Q... +\newdimen\!yE %..W.....E.L....Q... +\newdimen\!yM %..W.....E......Q... +\newdimen\!yS %..W.....E.L....Q... +\newdimen\!yaxislength %.A................T +\newdimen\!ybot %............P...... +\newdimen\!ydiff %..........L........ +\newdimen\!yloc %..WB.....U.......S. +\newdimen\!yorigin %.A........L.P....S. +\newdimen\!ypivot %................R.. +\newdimen\!ypos %..........L.P..Q.ST +\newdimen\!yprime %...............Q... +\newdimen\!yshade %.................S. +\newdimen\!yshift %..W.........PO...S. +\newdimen\!ytemp %............P...... +\newdimen\!ytop %............P...... +\newdimen\!yunit %.AWBX...EUL.P..QRS. +\newdimen\!yyE %........E.......... +\newdimen\!yyM %........E.......... +\newdimen\!yyS %........E.......... +\newdimen\!yyloc %..WB....EU......... +\newdimen\!zpt %.AWBX.DVEULGP.YQ.ST + +\newif\if!axisvisible %.A................. +\newif\if!gridlinestoo %..................T +\newif\if!keepPO %................... +\newif\if!placeaxislabel %.A................. +\newif\if!switch %H.................. +\newif\if!xswitch %.A................T + +\newtoks\!axisLaBeL %.A................. +\newtoks\!keywordtoks %.A................. + +\newwrite\!replotfile %.............O..... + +\newhelp\!keywordhelp{The keyword mentioned in the error message in unknown. +Replace NEW KEYWORD in the indicated response by the keyword that +should have been specified.} %.A................. + +% The following commands assign alternate names to some of the +% above registers. "\!wlet" is defined in Hacks. +\!wlet\!!origin=\!xM %.A................T +\!wlet\!!unit=\!uplength %.A................T +\!wlet\!Lresiduallength=\!dimenG %.........U......... +\!wlet\!Rresiduallength=\!dimenF %.........U......... +\!wlet\!axisLength=\!distacross %.A................T +\!wlet\!axisend=\!ydiff %.A................T +\!wlet\!axisstart=\!xdiff %.A................T +\!wlet\!axisxlevel=\!arclength %.A................T +\!wlet\!axisylevel=\!downlength %.A................T +\!wlet\!beta=\!dimenE %...............Q... +\!wlet\!gamma=\!dimenF %...............Q... +\!wlet\!shadexorigin=\!plotxorigin %.................S. +\!wlet\!shadeyorigin=\!plotyorigin %.................S. +\!wlet\!ticklength=\!xS %..................T +\!wlet\!ticklocation=\!xE %..................T +\!wlet\!ticklocationincr=\!yE %..................T +\!wlet\!tickwidth=\!yS %..................T +\!wlet\!totalleaderlength=\!dimenE %.........U......... +\!wlet\!xone=\!xprime %....X.............. +\!wlet\!xtwo=\!dxprime %....X.............. +\!wlet\!ySsave=\!yM %................... +\!wlet\!ybB=\!yB %.................S. +\!wlet\!ybC=\!yC %.................S. +\!wlet\!ybE=\!yE %.................S. +\!wlet\!ybM=\!yM %.................S. +\!wlet\!ybS=\!yS %.................S. +\!wlet\!ybpos=\!yyloc %.................S. +\!wlet\!yone=\!yprime %....X.............. +\!wlet\!ytB=\!xB %.................S. +\!wlet\!ytC=\!xC %.................S. +\!wlet\!ytE=\!downlength %.................S. +\!wlet\!ytM=\!arclength %.................S. +\!wlet\!ytS=\!distacross %.................S. +\!wlet\!ytpos=\!xxloc %.................S. +\!wlet\!ytwo=\!dyprime %....X.............. + + +% Initial values for registers +\!zpt=0pt % static +\!xunit=1pt +\!yunit=1pt +\!arearloc=\!xunit +\!areatloc=\!yunit +\!dshade=5pt +\!leaderlength=24in +\!tfs=256 % static +\!wmax=5.3pt % static +\!wmin=2.7pt % static +\!xaxislength=\!xunit +\!xpivot=\!zpt +\!yaxislength=\!yunit +\!ypivot=\!zpt +\plotsymbolspacing=.4pt + \!dimenA=50pt \!fiftypt=\!dimenA % static + +\!rootten=3.162278pt % static +\!tenAa=8.690286pt % static (A5) +\!tenAc=2.773839pt % static (A3) +\!tenAe=2.543275pt % static (A1) + +% Initial values for control sequences +\def\!cosrotationangle{1} %................R.. +\def\!sinrotationangle{0} %................R.. +\def\!xpivotcoord{0} %................R.. +\def\!xref{0} %............P...... +\def\!xshadesave{0} %.................S. +\def\!ypivotcoord{0} %................R.. +\def\!yref{0} %............P...... +\def\!yshadesave{0} %.................S. +\def\!zero{0} %..................T + +% Reset TeX to report allocations +\let\wlog=\!!!wlog +% ************************************* +% *** AREAS: Deals with plot areas *** +% ************************************* +% +% ** User commands +% ** \setplotarea x from LEFT XCOORD to RIGTH XCOORD, y from BOTTOM YCOORD +% ** to TOP YCOORD +% ** \axis BOTTOM-LEFT-TOP-RIGHT [SHIFTEDTO xy=COORD] [VISIBLE-INVISIBLE] +% ** [LABEL {label}] [TICKS] / +% ** \visibleaxes +% ** \invisibleaxes +% ** \plotheading {HEADING} +% ** \grid {# of columns} {# of rows} +% ** \normalgraphs + +% ** \normalgraphs +% ** Sets defaults for graph setup. See Subsection 3.4 of manual. +\def\normalgraphs{% + \longticklength=.4\baselineskip + \shortticklength=.25\baselineskip + \tickstovaluesleading=.25\baselineskip + \valuestolabelleading=.8\baselineskip + \linethickness=.4pt + \stackleading=.17\baselineskip + \headingtoplotskip=1.5\baselineskip + \visibleaxes + \ticksout + \nogridlines + \unloggedticks} +% +% ** \setplotarea x from LEFT XCOORD to RIGTH XCOORD, y from BOTTOM YCOORD +% ** to TOP YCOORD +% ** Reserves space in PICBOX for a rectangular box with the indicated +% ** coordinates. Must be specified before calls to \axis, +% ** \grid, \plotheading. +% ** See Subsection 3.1 of the manual. +\def\setplotarea x from #1 to #2, y from #3 to #4 {% + \!arealloc=\!M{#1}\!xunit \advance \!arealloc -\!xorigin + \!areabloc=\!M{#3}\!yunit \advance \!areabloc -\!yorigin + \!arearloc=\!M{#2}\!xunit \advance \!arearloc -\!xorigin + \!areatloc=\!M{#4}\!yunit \advance \!areatloc -\!yorigin + \!initinboundscheck + \!xaxislength=\!arearloc \advance\!xaxislength -\!arealloc + \!yaxislength=\!areatloc \advance\!yaxislength -\!areabloc + \!plotheadingoffset=\!zpt + \!dimenput {{\setbox0=\hbox{}\wd0=\!xaxislength\ht0=\!yaxislength\box0}} + [bl] (\!arealloc,\!areabloc)} +% +% ** \visibleaxes, \invisibleaxes +% ** Switches for setting visibility of subsequent axes. +% ** See Subsection 3.2 of the manual. +\def\visibleaxes{% + \def\!axisvisibility{\!axisvisibletrue}} +\def\invisibleaxes{% + \def\!axisvisibility{\!axisvisiblefalse}} +% +% ** The next few macros enable the user to fix up an erroneous keyword +% ** in the \axis command. +% \newhelp is in ALLOCATIONS +% \newhelp\!keywordhelp{The keyword mentioned in the error message in unknown. +% Replace NEW KEYWORD in the indicated response by the keyword that +% should have been specified.} + +\def\!fixkeyword#1{% + \errhelp=\!keywordhelp + \errmessage{Unrecognized keyword `#1': \the\!keywordtoks{NEW KEYWORD}'}} + +% \newtoks\!keywordtoks In ALLOCATIONS. +\!keywordtoks={enter `i\fixkeyword} + +\def\fixkeyword#1{% + \!nextkeyword#1 } + +% ** \axis BOTTOM-LEFT-TOP-RIGHT [SHIFTEDTO xy=COORD] [VISIBLE-INVISIBLE] +% ** [LABEL {label}] [TICKS] / +% ** Exactly one of the keywords BOTTOM, LEFT, TOP, RIGHT must be +% ** specified. Axis is drawn along the indicated edge of the current +% ** plot area, shifted if the SHIFTEDTO option is used, visible or +% ** invisible according the selected option, with an optional LABEL, +% ** and optional TICKS (see ticks.tex for the options avialabel with +% ** TICKS). The TICKS option must be the last one specified. The \axis +% ** MUST be terminated with a / followed by a space. +% ** See Subsection 3.2 of the manual for more information. + +% ** The various options of the \axis command are processed by the +% ** \!nextkeyword macro defined below. For example, +% ** `\!nextkeyword shiftedto ' expands to `\!axisshiftedto'. +\def\axis {% + \def\!nextkeyword##1 {% + \expandafter\ifx\csname !axis##1\endcsname \relax + \def\!next{\!fixkeyword{##1}}% + \else + \def\!next{\csname !axis##1\endcsname}% + \fi + \!next}% + \!offset=\!zpt + \!axisvisibility + \!placeaxislabelfalse + \!nextkeyword} + +% ** This and the various macros that follow handle the keyword +% ** specifications on the \axis command +% ** See Subsection 3.2 of the manual. +\def\!axisbottom{% + \!axisylevel=\!areabloc + \def\!tickxsign{0}% + \def\!tickysign{-}% + \def\!axissetup{\!axisxsetup}% + \def\!axislabeltbrl{t}% + \!nextkeyword} + +\def\!axistop{% + \!axisylevel=\!areatloc + \def\!tickxsign{0}% + \def\!tickysign{+}% + \def\!axissetup{\!axisxsetup}% + \def\!axislabeltbrl{b}% + \!nextkeyword} + +\def\!axisleft{% + \!axisxlevel=\!arealloc + \def\!tickxsign{-}% + \def\!tickysign{0}% + \def\!axissetup{\!axisysetup}% + \def\!axislabeltbrl{r}% + \!nextkeyword} + +\def\!axisright{% + \!axisxlevel=\!arearloc + \def\!tickxsign{+}% + \def\!tickysign{0}% + \def\!axissetup{\!axisysetup}% + \def\!axislabeltbrl{l}% + \!nextkeyword} + +\def\!axisshiftedto#1=#2 {% + \if 0\!tickxsign + \!axisylevel=\!M{#2}\!yunit + \advance\!axisylevel -\!yorigin + \else + \!axisxlevel=\!M{#2}\!xunit + \advance\!axisxlevel -\!xorigin + \fi + \!nextkeyword} + +\def\!axisvisible{% + \!axisvisibletrue + \!nextkeyword} + +\def\!axisinvisible{% + \!axisvisiblefalse + \!nextkeyword} + +\def\!axislabel#1 {% + \!axisLaBeL={#1}% + \!placeaxislabeltrue + \!nextkeyword} + +\expandafter\def\csname !axis/\endcsname{% + \!axissetup % This could done already by "ticks"; if so, now \relax + \if!placeaxislabel + \!placeaxislabel + \fi + \if +\!tickysign % ** (A "top" axis) + \!dimenA=\!axisylevel + \advance\!dimenA \!offset % ** dimA = top of the axis structure + \advance\!dimenA -\!areatloc % ** dimA = excess over the plot area + \ifdim \!dimenA>\!plotheadingoffset + \!plotheadingoffset=\!dimenA % ** Greatest excess over the plot area + \fi + \fi} + +% ** \grid {c} {r} +% ** Partitions the plot area into c columns and r rows; see Subsection 3.3 +% ** of the manual. +% ** (Other grid patterns can be drawn with the TICKS option of the \axis +% ** command. +\def\grid #1 #2 {% + \!countA=#1\advance\!countA 1 + \axis bottom invisible ticks length <\!zpt> andacross quantity {\!countA} / + \!countA=#2\advance\!countA 1 + \axis left invisible ticks length <\!zpt> andacross quantity {\!countA} / } + +% ** \plotheading{HEADING} +% ** Places HEADING centered above the top of the plotarea (and above +% ** any top axis ticks marks, tick labels, and axis label); see +% ** Subsection 3.3 of the manual. +\def\plotheading#1 {% + \advance\!plotheadingoffset \headingtoplotskip + \!dimenput {#1} [B] <.5\!xaxislength,\!plotheadingoffset> + (\!arealloc,\!areatloc)} + +% ** From here on, the routines are internal. +\def\!axisxsetup{% + \!axisxlevel=\!arealloc + \!axisstart=\!arealloc + \!axisend=\!arearloc + \!axisLength=\!xaxislength + \!!origin=\!xorigin + \!!unit=\!xunit + \!xswitchtrue + \if!axisvisible + \!makeaxis + \fi} + +\def\!axisysetup{% + \!axisylevel=\!areabloc + \!axisstart=\!areabloc + \!axisend=\!areatloc + \!axisLength=\!yaxislength + \!!origin=\!yorigin + \!!unit=\!yunit + \!xswitchfalse + \if!axisvisible + \!makeaxis + \fi} + +\def\!makeaxis{% + \setbox\!boxA=\hbox{% (Make a pseudo-y[x] tick for an x[y]-axis) + \beginpicture + \!setdimenmode + \setcoordinatesystem point at {\!zpt} {\!zpt} + \putrule from {\!zpt} {\!zpt} to + {\!tickysign\!tickysign\!axisLength} + {\!tickxsign\!tickxsign\!axisLength} + \endpicturesave <\!Xsave,\!Ysave>}% + \wd\!boxA=\!zpt + \!placetick\!axisstart} + +\def\!placeaxislabel{% + \advance\!offset \valuestolabelleading + \if!xswitch + \!dimenput {\the\!axisLaBeL} [\!axislabeltbrl] + <.5\!axisLength,\!tickysign\!offset> (\!axisxlevel,\!axisylevel) + \advance\!offset \!dp % ** advance offset by the "tallness" + \advance\!offset \!ht % ** of the label + \else + \!dimenput {\the\!axisLaBeL} [\!axislabeltbrl] + <\!tickxsign\!offset,.5\!axisLength> (\!axisxlevel,\!axisylevel) + \fi + \!axisLaBeL={}} + + +% ******************************* +% *** ARROWS (Draws arrows) *** +% ******************************* +% +% ** User commands +% ** \arrow [MID FRACTION, BASE FRACTION] +% ** [] from XFROM YFROM to XTO YTO +% ** \betweenarrows {TEXT} [orientation & shift] from XFROM YFROM to XTO YTO + +% ** \arrow [MID FRACTION, BASE FRACTION] +% ** [] from XFROM YFROM to XTO YTO +% ** Draws an arrow from (XFROM,YFROM) to (XTO,YTO). The arrow head +% ** is constructed two quadratic arcs, which extend back a distance +% ** ARROW HEAD LENGTH (a dimension) on both sides of the arrow shaft. +% ** All the way back the arcs are a distance BASE FRACTION*ARROW HEAD +% ** LENGTH apart, while half-way back they are a distance MID FRACTION* +% ** ARROW HEAD LENGTH apart. is optional, and has +% ** its usual interpreation. See Subsection 5.4 of the manual. + +\def\arrow <#1> [#2,#3]{% + \!ifnextchar<{\!arrow{#1}{#2}{#3}}{\!arrow{#1}{#2}{#3}<\!zpt,\!zpt> }} + +\def\!arrow#1#2#3<#4,#5> from #6 #7 to #8 #9 {% +% +% ** convert to dimensions + \!xloc=\!M{#8}\!xunit + \!yloc=\!M{#9}\!yunit + \!dxpos=\!xloc \!dimenA=\!M{#6}\!xunit \advance \!dxpos -\!dimenA + \!dypos=\!yloc \!dimenA=\!M{#7}\!yunit \advance \!dypos -\!dimenA + \let\!MAH=\!M% ** save current c/d mode + \!setdimenmode% ** go into dimension mode +% + \!xshift=#4\relax \!yshift=#5\relax% ** pick up shift + \!reverserotateonly\!xshift\!yshift% ** back rotate shift + \advance\!xshift\!xloc \advance\!yshift\!yloc +% +% ** draw shaft of arrow + \!xS=-\!dxpos \advance\!xS\!xshift + \!yS=-\!dypos \advance\!yS\!yshift + \!start (\!xS,\!yS) + \!ljoin (\!xshift,\!yshift) +% +% ** find 32*cosine and 32*sine of angle of rotation + \!Pythag\!dxpos\!dypos\!arclength + \!divide\!dxpos\!arclength\!dxpos + \!dxpos=32\!dxpos \!removept\!dxpos\!!cos + \!divide\!dypos\!arclength\!dypos + \!dypos=32\!dypos \!removept\!dypos\!!sin +% +% ** construct arrowhead + \!halfhead{#1}{#2}{#3}% ** draw half of arrow head + \!halfhead{#1}{-#2}{-#3}% ** draw other half +% + \let\!M=\!MAH% ** restore old c/d mode + \ignorespaces} +% +% ** draw half of arrow head + \def\!halfhead#1#2#3{% + \!dimenC=-#1% + \divide \!dimenC 2 % ** half way back + \!dimenD=#2\!dimenC% ** half the mid width + \!rotate(\!dimenC,\!dimenD)by(\!!cos,\!!sin)to(\!xM,\!yM) + \!dimenC=-#1% ** all the way back + \!dimenD=#3\!dimenC + \!dimenD=.5\!dimenD% ** half the full width + \!rotate(\!dimenC,\!dimenD)by(\!!cos,\!!sin)to(\!xE,\!yE) + \!start (\!xshift,\!yshift) + \advance\!xM\!xshift \advance\!yM\!yshift + \advance\!xE\!xshift \advance\!yE\!yshift + \!qjoin (\!xM,\!yM) (\!xE,\!yE) + \ignorespaces} + + +% ** \betweenarrows {TEXT} [orientation & shift] from XFROM YFROM to XTO YTO +% ** Makes things like <--- text --->, using arrow heads from TeX's fonts. +% ** See Subsection 5.4 of the manual. +\def\betweenarrows #1#2 from #3 #4 to #5 #6 {% + \!xloc=\!M{#3}\!xunit \!xxloc=\!M{#5}\!xunit% + \!yloc=\!M{#4}\!yunit \!yyloc=\!M{#6}\!yunit% + \!dxpos=\!xxloc \advance\!dxpos by -\!xloc + \!dypos=\!yyloc \advance\!dypos by -\!yloc + \advance\!xloc .5\!dxpos + \advance\!yloc .5\!dypos +% + \let\!MBA=\!M% ** save current coord\dimen mode + \!setdimenmode% ** express locations in dimens + \ifdim\!dypos=\!zpt + \ifdim\!dxpos<\!zpt \!dxpos=-\!dxpos \fi + \put {\!lrarrows{\!dxpos}{#1}}#2{} at {\!xloc} {\!yloc} + \else + \ifdim\!dxpos=\!zpt + \ifdim\!dypos<\!zpt \!dypos=-\!zpt \fi + \put {\!udarrows{\!dypos}{#1}}#2{} at {\!xloc} {\!yloc} + \fi + \fi + \let\!M=\!MBA% ** restore previous c/d mode + \ignorespaces} + +% ** Subroutine for left-right between arrows +\def\!lrarrows#1#2{% #1=width, #2=text + {\setbox\!boxA=\hbox{$\mkern-2mu\mathord-\mkern-2mu$}% + \setbox\!boxB=\hbox{$\leftarrow$}\!dimenE=\ht\!boxB + \setbox\!boxB=\hbox{}\ht\!boxB=2\!dimenE + \hbox to #1{$\mathord\leftarrow\mkern-6mu + \cleaders\copy\!boxA\hfil + \mkern-6mu\mathord-$% + \kern.4em $\vcenter{\box\!boxB}$$\vcenter{\hbox{#2}}$\kern.4em + $\mathord-\mkern-6mu + \cleaders\copy\!boxA\hfil + \mkern-6mu\mathord\rightarrow$}}} + +% ** Subroutine for up-down between arrows +\def\!udarrows#1#2{% #1=width, #2=text + {\setbox\!boxB=\hbox{#2}% + \setbox\!boxA=\hbox to \wd\!boxB{\hss$\vert$\hss}% + \!dimenE=\ht\!boxA \advance\!dimenE \dp\!boxA \divide\!dimenE 2 + \vbox to #1{\offinterlineskip + \vskip .05556\!dimenE + \hbox to \wd\!boxB{\hss$\mkern.4mu\uparrow$\hss}\vskip-\!dimenE + \cleaders\copy\!boxA\vfil + \vskip-\!dimenE\copy\!boxA + \vskip\!dimenE\copy\!boxB\vskip.4em + \copy\!boxA\vskip-\!dimenE + \cleaders\copy\!boxA\vfil + \vskip-\!dimenE \hbox to \wd\!boxB{\hss$\mkern.4mu\downarrow$\hss} + \vskip .05556\!dimenE}}} + + +% *************************** +% *** BARS (Draws bars) *** +% *************************** +% +% ** User commands: +% ** \putbar [] breadth from XSTART YSTART +% ** to XEND YEND +% ** \setbars [] breadth baseline at XY = COORD +% ** [baselabels ([B_ORIENTATION_x,B_ORIENTATION_y] )] +% ** [endlabels ([E_ORIENTATION_x,E_ORIENTATION_y] )] + + +% ** \putbar [] breadth from XSTART YSTART +% ** to XEND YEND +% ** Either XSTART=XEND or YSTART=YEND. Draws a rectangle between +% ** (XSTART,YSTART) & (XEND,YEND). The "depth" of the rectangle +% ** is determined by those two plot positions; its other +% ** dimension "breadth" is specified by the dimension BREADTH. +% ** See Subsection 4.2 of the manual. +\def\putbar#1breadth <#2> from #3 #4 to #5 #6 {% + \!xloc=\!M{#3}\!xunit \!xxloc=\!M{#5}\!xunit% + \!yloc=\!M{#4}\!yunit \!yyloc=\!M{#6}\!yunit% + \!dypos=\!yyloc \advance\!dypos by -\!yloc + \!dimenI=#2 +% + \ifdim \!dimenI=\!zpt % ** If 0 breadth + \putrule#1from {#3} {#4} to {#5} {#6} % ** Then draw line + \else % ** Else, put in a rectangle + \let\!MBar=\!M% ** save current c/d mode + \!setdimenmode % ** go into dimension mode + \divide\!dimenI 2 + \ifdim \!dypos=\!zpt + \advance \!yloc -\!dimenI % ** Equal y coordinates + \advance \!yyloc \!dimenI + \else + \advance \!xloc -\!dimenI % ** Equal x coordinates + \advance \!xxloc \!dimenI + \fi + \putrectangle#1corners at {\!xloc} {\!yloc} and {\!xxloc} {\!yyloc} + \let\!M=\!MBar % ** restore c/d mode + \fi + \ignorespaces} + + +% ** \setbars [] breadth baseline at XY = COORD +% ** [baselabels ([B_ORIENTATION_x,B_ORIENTATION_y] )] +% ** [endlabels ([E_ORIENTATION_x,E_ORIENTATION_y] )] +% ** This command puts PiCTeX into the bar graph drawing mode described +% ** in Subsection 4.4 of the manual. +\def\setbars#1breadth <#2> baseline at #3 = #4 {% + \edef\!barshift{#1}% + \edef\!barbreadth{#2}% + \edef\!barorientation{#3}% + \edef\!barbaseline{#4}% + \def\!bardobaselabel{\!bardoendlabel}% + \def\!bardoendlabel{\!barfinish}% + \let\!drawcurve=\!barcurve + \!setbars} +\def\!setbars{% + \futurelet\!nextchar\!!setbars} +\def\!!setbars{% + \if b\!nextchar + \def\!!!setbars{\!setbarsbget}% + \else + \if e\!nextchar + \def\!!!setbars{\!setbarseget}% + \else + \def\!!!setbars{\relax}% + \fi + \fi + \!!!setbars} +\def\!setbarsbget baselabels (#1) {% + \def\!barbaselabelorientation{#1}% + \def\!bardobaselabel{\!!bardobaselabel}% + \!setbars} +\def\!setbarseget endlabels (#1) {% + \edef\!barendlabelorientation{#1}% + \def\!bardoendlabel{\!!bardoendlabel}% + \!setbars} + +% ** \!barcurve +% ** Draws a bargraph with preset values of barshift, barbreadth, +% ** barorientation (x or y) and barbaseline (coordinate) +\def\!barcurve #1 #2 {% + \if y\!barorientation + \def\!basexarg{#1}% + \def\!baseyarg{\!barbaseline}% + \else + \def\!basexarg{\!barbaseline}% + \def\!baseyarg{#2}% + \fi + \expandafter\putbar\!barshift breadth <\!barbreadth> from {\!basexarg} + {\!baseyarg} to {#1} {#2} + \def\!endxarg{#1}% + \def\!endyarg{#2}% + \!bardobaselabel} + +\def\!!bardobaselabel "#1" {% + \put {#1}\!barbaselabelorientation{} at {\!basexarg} {\!baseyarg} + \!bardoendlabel} + +\def\!!bardoendlabel "#1" {% + \put {#1}\!barendlabelorientation{} at {\!endxarg} {\!endyarg} + \!barfinish} + +\def\!barfinish{% + \!ifnextchar/{\!finish}{\!barcurve}} + + +% ******************************** +% *** BOXES (Draws rectangles) *** +% ******************************** +% +% ** User commands: +% ** \putrectangle [] corners at XCOORD1 YCOORD1 +% ** and XCOORD2 YCOORD2 +% ** \shaderectangleson +% ** \shaderectanglesoff +% ** \frame [] {TEXT} +% ** \rectangle +% +% +% ** \putrectangle [] corners at XCOORD1 YCOORD1 +% ** and XCOORD2 YCOORD2 +% ** Draws a rectangle with corners at (X1,Y1), (X2,Y1), (X1,Y2), (X2,Y2) +% ** Lines have thickness \linethickness, and overlap at the corners. +% ** The optional field functions as with a \put command. +% ** See Subsection 4.2 of the manual. +\def\putrectangle{% + \!ifnextchar<{\!putrectangle}{\!putrectangle<\!zpt,\!zpt> }} +\def\!putrectangle<#1,#2> corners at #3 #4 and #5 #6 {% +% +% ** get locations + \!xone=\!M{#3}\!xunit \!xtwo=\!M{#5}\!xunit% + \!yone=\!M{#4}\!yunit \!ytwo=\!M{#6}\!yunit% + \ifdim \!xtwo<\!xone + \!dimenI=\!xone \!xone=\!xtwo \!xtwo=\!dimenI + \fi + \ifdim \!ytwo<\!yone + \!dimenI=\!yone \!yone=\!ytwo \!ytwo=\!dimenI + \fi + \!dimenI=#1\relax \advance\!xone\!dimenI \advance\!xtwo\!dimenI + \!dimenI=#2\relax \advance\!yone\!dimenI \advance\!ytwo\!dimenI + \let\!MRect=\!M% ** save current coord/dimen mode + \!setdimenmode +% +% ** shade rectangle if appropriate + \!shaderectangle +% +% ** draw horizontal edges + \!dimenI=.5\linethickness + \advance \!xone -\!dimenI% ** adjust x-location to overlap corners + \advance \!xtwo \!dimenI% ** ditto + \putrule from {\!xone} {\!yone} to {\!xtwo} {\!yone} + \putrule from {\!xone} {\!ytwo} to {\!xtwo} {\!ytwo} +% +% ** draw vertical edges + \advance \!xone \!dimenI% ** restore original x-values + \advance \!xtwo -\!dimenI% + \advance \!yone -\!dimenI% ** adjust y-location to overlap corners + \advance \!ytwo \!dimenI% ** ditto + \putrule from {\!xone} {\!yone} to {\!xone} {\!ytwo} + \putrule from {\!xtwo} {\!yone} to {\!xtwo} {\!ytwo} +% + \let\!M=\!MRect% ** restore coord/dimen mode + \ignorespaces} + +% ** \shaderectangleson +% ** Subsequent rectangles will be shaded according to +% ** the current shading pattern. Affects \putrectangle, \putbar, +% ** \frame, \sethistograms, and \setbars. See Subsection 7.5 of the manual. +\def\shaderectangleson{% + \def\!shaderectangle{\!!shaderectangle}% + \ignorespaces} +% ** \shaderectanglesoff +% ** Suppresses \shaderectangleson. The default. +\def\shaderectanglesoff{% + \def\!shaderectangle{}% + \ignorespaces} + +\shaderectanglesoff + +% ** The following internal routine shades the current rectangle, when +% ** \!shaderectangle = \!!shaderectangle . +\def\!!shaderectangle{% + \!dimenA=\!xtwo \advance \!dimenA -\!xone + \!dimenB=\!ytwo \advance \!dimenB -\!yone + \ifdim \!dimenA<\!dimenB + \!startvshade (\!xone,\!yone,\!ytwo) + \!lshade (\!xtwo,\!yone,\!ytwo) + \else + \!starthshade (\!yone,\!xone,\!xtwo) + \!lshade (\!ytwo,\!xone,\!xtwo) + \fi + \ignorespaces} + +% ** \frame [] {TEXT} +% ** Draws a frame of thickness linethickness about the box enclosing +% ** TEXT; the frame is separated from the box by a distance of +% ** SEPARATION. The result is an hbox with the same baseline as TEXT. +% ** If is omitted, you get the effect of <0pt>. +% ** See Subsection 4.2 of the manual. +\def\frame{% + \!ifnextchar<{\!frame}{\!frame<\!zpt> }} +\long\def\!frame<#1> #2{% + \beginpicture + \setcoordinatesystem units <1pt,1pt> point at 0 0 + \put {#2} [Bl] at 0 0 + \!dimenA=#1\relax + \!dimenB=\!wd \advance \!dimenB \!dimenA + \!dimenC=\!ht \advance \!dimenC \!dimenA + \!dimenD=\!dp \advance \!dimenD \!dimenA + \let\!MFr=\!M + \!setdimenmode + \putrectangle corners at {-\!dimenA} {-\!dimenD} and {\!dimenB} {\!dimenC} + \!setcoordmode + \let\!M=\!MFr + \endpicture + \ignorespaces} + +% ** \rectangle +% ** Constructs a rectangle of width WIDTH and heigth HEIGHT. +% ** See Subsection 4.2 of the manual. +\def\rectangle <#1> <#2> {% + \setbox0=\hbox{}\wd0=#1\ht0=#2\frame {\box0}} + + +% ********************************************* +% *** CURVES (Upper level \plot commands) *** +% ********************************************* +% +% ** User commands +% ** \plot DATA / +% ** \plot "FILE NAME" +% ** \setquadratic +% ** \setlinear +% ** \sethistograms +% ** \vshade ... +% ** \hshade ... + +% \plot: multi-purpose command. Draws histograms, bar graphs, piecewise-linear +% or piecewise quadratic curves, depending on the setting of \!drawcurve. +% See Subsections 4.3-4.5, 5.1, 5.2 of the manual. +\def\plot{% + \!ifnextchar"{\!plotfromfile}{\!drawcurve}} +\def\!plotfromfile"#1"{% + \expandafter\!drawcurve \normalinput #1 /} + +% Command to set piecewise quadratic mode +% See Subsections 5.1, 7.3, and 7.4 of the manual. +\def\setquadratic{% + \let\!drawcurve=\!qcurve + \let\!!Shade=\!!qShade + \let\!!!Shade=\!!!qShade} + +% Command to set piecewise linear mode +% See Subsections 5.1, 7.3, and 7.4 of the manual. +\def\setlinear{% + \let\!drawcurve=\!lcurve + \let\!!Shade=\!!lShade + \let\!!!Shade=\!!!lShade} + +% Command to set histogram mode +% See Subsection 4.3 of the manual. +\def\sethistograms{% + \let\!drawcurve=\!hcurve} + +% Commands to cycle through list of coordinates in piecewise quadratic +% interpolation mode +\def\!qcurve #1 #2 {% + \!start (#1,#2) + \!Qjoin} +\def\!Qjoin#1 #2 #3 #4 {% + \!qjoin (#1,#2) (#3,#4) % \!qjoin is defined in QUADRATIC + \!ifnextchar/{\!finish}{\!Qjoin}} + +% Commands to cycle through list of coordinates in piecewise linear +% interpolation mode +\def\!lcurve #1 #2 {% + \!start (#1,#2) + \!Ljoin} +\def\!Ljoin#1 #2 {% + \!ljoin (#1,#2) % \!ljoin is defined in LINEAR + \!ifnextchar/{\!finish}{\!Ljoin}} + +\def\!finish/{\ignorespaces} + +% Command to cycle through list of coordinates in histogram mode +\def\!hcurve #1 #2 {% + \edef\!hxS{#1}% + \edef\!hyS{#2}% + \!hjoin} +\def\!hjoin#1 #2 {% + \putrectangle corners at {\!hxS} {\!hyS} and {#1} {#2} + \edef\!hxS{#1}% + \!ifnextchar/{\!finish}{\!hjoin}} + + +% \vshade: See Subsection 7.3 of the manual. +\def\vshade #1 #2 #3 {% + \!startvshade (#1,#2,#3) + \!Shadewhat} + +% \hshade: See Subsection 7.4 of the manual. +\def\hshade #1 #2 #3 {% + \!starthshade (#1,#2,#3) + \!Shadewhat} + +% Commands to cycle through coordinates and optional "edge effect" +% fields while shading. +\def\!Shadewhat{% + \futurelet\!nextchar\!Shade} +\def\!Shade{% + \if <\!nextchar + \def\!nextShade{\!!Shade}% + \else + \if /\!nextchar + \def\!nextShade{\!finish}% + \else + \def\!nextShade{\!!!Shade}% + \fi + \fi + \!nextShade} +\def\!!lShade<#1> #2 #3 #4 {% + \!lshade <#1> (#2,#3,#4) % \!lshade is defined in SHADING + \!Shadewhat} +\def\!!!lShade#1 #2 #3 {% + \!lshade (#1,#2,#3) + \!Shadewhat} +\def\!!qShade<#1> #2 #3 #4 #5 #6 #7 {% + \!qshade <#1> (#2,#3,#4) (#5,#6,#7) % \!qshade is defined in SHADING + \!Shadewhat} +\def\!!!qShade#1 #2 #3 #4 #5 #6 {% + \!qshade (#1,#2,#3) (#4,#5,#6) + \!Shadewhat} + +% ** Set default interpolation mode +\setlinear + + +% ******************************************** +% *** DASHPATTERNS (Sets up dash patterns) *** +% ******************************************** + +% ** User commands: +% ** \setdashpattern +% ** \setdots +% ** \setdotsnear for +% ** \setdashes +% ** \setdashesnear for +% ** \setsolid +% ** \findlength {CURVE CMDS} + +% ** Internal commands: +% ** \!dashingon +% ** \!dashingoff + +% ** Dash patterns are specified by a balanced token list whose complete +% ** expansion has the form: DIMEN1,DIMEN2,DIMEN3,DIMEN4,... ; this produces +% ** an arc of length DIMEN1, a skip of length DIMEN2, an arc of length +% ** DIMEN3, a skip of length DIMEN4, ... . Any number of DIMEN values may +% ** be given. The pattern is repeated as many times (perhaps fractional) +% ** as necessary to draw the curve. +% ** A dash pattern remains in effect until it is overridden by a call to +% ** \setdashpattern, or to \setdots, \setdotsnear ... , \setdashes, +% ** \setdashesnear ... , or \setsolid. +% ** Solid lines are the default. + + +% ** \def\setdashpattern +% ** The following routine converts a balanced list of tokens whose +% ** complete expansion has the form DIMEN1,DIMEN2, ... , DIMENk into +% ** three list macros that are used in drawing dashed rules and curves: +% ** !Flist: \!Rule{DIMEN1}\!Skip{DIMEN2}\!Rule{DIMEN3}\!Skip{DIMEN4} ... +% ** !Blist: ...\!Skip{DIMEN4}\!Rule{DIMEN3}\!Skip{DIMEN2}\!Rule{DIMEN1} +% ** !UDlist: \\{DIMEN1}\\{DIMEN2}\\{DIMEN3}\\{DIMEN4} ...; +% ** calculates \!leaderlength := DIMEN1 + ... + DIMENk; and +% ** sets the curve drawing routines to dash mode. +% ** Those lists are used by the curve drawing routines. +% ** Dimenj ... may be given as an explicit dimension (e.g., 5pt), or +% ** as an expression involving a dimension register (e.g., -2.5\dimen0). +% ** See Subsection 6.2 of the manual +\def\setdashpattern <#1>{% + \def\!Flist{}\def\!Blist{}\def\!UDlist{}% + \!countA=0 + \!ecfor\!item:=#1\do{% + \!dimenA=\!item\relax + \expandafter\!rightappend\the\!dimenA\withCS{\\}\to\!UDlist% + \advance\!countA 1 + \ifodd\!countA + \expandafter\!rightappend\the\!dimenA\withCS{\!Rule}\to\!Flist% + \expandafter\!leftappend\the\!dimenA\withCS{\!Rule}\to\!Blist% + \else + \expandafter\!rightappend\the\!dimenA\withCS{\!Skip}\to\!Flist% + \expandafter\!leftappend\the\!dimenA\withCS{\!Skip}\to\!Blist% + \fi}% + \!leaderlength=\!zpt + \def\!Rule##1{\advance\!leaderlength ##1}% + \def\!Skip##1{\advance\!leaderlength ##1}% + \!Flist% + \ifdim\!leaderlength>\!zpt + \else + \def\!Flist{\!Skip{24in}}\def\!Blist{\!Skip{24in}}\ignorespaces + \def\!UDlist{\\{\!zpt}\\{24in}}\ignorespaces + \!leaderlength=24in + \fi + \!dashingon} + + +% ** \!dashingon -- puts the curve drawing routines into dash mode +% ** \!dashingoff -- puts the curve drawing routines into solid mode +% ** These are internal commands, invoked by \setdashpattern and \setsolid +\def\!dashingon{% + \def\!advancedashing{\!!advancedashing}% + \def\!drawlinearsegment{\!lineardashed}% + \def\!puthline{\!putdashedhline}% + \def\!putvline{\!putdashedvline}% +% \def\!putsline{\!putdashedsline}% + \ignorespaces}% +\def\!dashingoff{% + \def\!advancedashing{\relax}% + \def\!drawlinearsegment{\!linearsolid}% + \def\!puthline{\!putsolidhline}% + \def\!putvline{\!putsolidvline}% +% \def\!putsline{\!putsolidsline}% + \ignorespaces} + + +% ** \setdots -- sets up a dot/skip pattern where dot (actually +% ** the current plotsymbol) is plunked down once for every LENGTH +% ** traveled along the curve. LENGTH defaults to 5pt. +% ** See Subsection 6.1 of the manual. +\def\setdots{% + \!ifnextchar<{\!setdots}{\!setdots<5pt>}} +\def\!setdots<#1>{% + \!dimenB=#1\advance\!dimenB -\plotsymbolspacing + \ifdim\!dimenB<\!zpt + \!dimenB=\!zpt + \fi +\setdashpattern <\plotsymbolspacing,\!dimenB>} + +% ** \setdotsnear for +% ** sets up a dot pattern where the dots are approximately LENGTH apart, +% ** the total length of the pattern is ARC LENGTH, and the pattern +% ** begins and ends with a dot. See Subsection 6.3 of the manual. +\def\setdotsnear <#1> for <#2>{% + \!dimenB=#2\relax \advance\!dimenB -.05pt + \!dimenC=#1\relax \!countA=\!dimenC + \!dimenD=\!dimenB \advance\!dimenD .5\!dimenC \!countB=\!dimenD + \divide \!countB \!countA + \ifnum 1>\!countB + \!countB=1 + \fi + \divide\!dimenB \!countB + \setdots <\!dimenB>} + +% ** \setdashes -- sets up a dash/skip pattern where the dash +% ** and the skip are each of length LENGTH (the dash is formed by +% ** plunking down the current plotsymbol over an arc of length LENGTH +% ** and so may actually be longer than LENGTH. LENGTH defaults to 5pt. +% ** See Subsection 6.1 of the manual. +\def\setdashes{% + \!ifnextchar<{\!setdashes}{\!setdashes<5pt>}} +\def\!setdashes<#1>{\setdashpattern <#1,#1>} + +% ** \setdashesnear ... +% ** Like \setdotsnear; the pattern begins and ends with a dash. +% ** See Subsection 6.3 of the manual. +\def\setdashesnear <#1> for <#2>{% + \!dimenB=#2\relax + \!dimenC=#1\relax \!countA=\!dimenC + \!dimenD=\!dimenB \advance\!dimenD .5\!dimenC \!countB=\!dimenD + \divide \!countB \!countA + \ifodd \!countB + \else + \advance \!countB 1 + \fi + \divide\!dimenB \!countB + \setdashes <\!dimenB>} + +% ** \setsolid -- puts the curve drawing routines in "solid line" mode, +% ** the default mode. See Subsection 6.1 of the manual. +\def\setsolid{% + \def\!Flist{\!Rule{24in}}\def\!Blist{\!Rule{24in}}% + \def\!UDlist{\\{24in}\\{\!zpt}}% + \!dashingoff} +\setsolid + +% ** \findlength {CURVE CMDS} +% ** PiCTeX executes the \start, \ljoin, and \qjoin cmds comprising +% ** CURVE CMDS without plotting anything, but stashes the length +% ** of the phantom curve away in \totalarclength. +% ** See Subsection 6.3 of the manual. +\def\findlength#1{% + \begingroup + \setdashpattern <0pt, \maxdimen> + \setplotsymbol ({}) + \dontsavelinesandcurves + #1% + \endgroup + \ignorespaces} + + +% ************************************************************* +% *** DIVISION (Does long division of dimension registers) *** +% ************************************************************* + +% ** User command: +% ** \Divide {DIVIDEND} by {DIVISOR} forming {RESULT} + +% ** Internal command +% ** \!divide{DIVIDEND}{DIVISOR}{RESULT} + +% ** \!divide DIVIDEND [by] DIVISOR [to get] ANSWER +% ** Divides the dimension DIVIDEND by the dimension DIVISOR, placing the +% ** quotient in the dimension register ANSWER. Values are understood to +% ** be in points. E.g. 12.5pt/1.4pt=8.92857pt. +% ** Quotient is accurate to 1/65536pt=2**[-16]pt +% ** |DIVISOR| should be < 2048pt (about 28 inches). +\def\!divide#1#2#3{% + \!dimenB=#1% ** dimB holds current remainder (r) + \!dimenC=#2% ** dimC holds divisor (d) + \!dimenD=\!dimenB% ** dimD holds quotient q=r/d for this + \divide \!dimenD \!dimenC% ** step, in units of scaled pts + \!dimenA=\!dimenD% ** dimA eventually holds answer (a) + \multiply\!dimenD \!dimenC% ** r <-- r - dq + \advance\!dimenB -\!dimenD% ** First step complete. Have integer part +% ** of a, and corresponding remainder. + \!dimenD=\!dimenC% ** Temporarily use dimD to hold |d| + \ifdim\!dimenD<\!zpt \!dimenD=-\!dimenD + \fi + \ifdim\!dimenD<64pt% ** Branch on the magnitude of |d| + \!divstep[\!tfs]\!divstep[\!tfs]% + \else + \!!divide + \fi + #3=\!dimenA\ignorespaces} + +% ** The following code handles divisors d with +% ** (1) .88in = 64pt <= d < 256pt = 3.54in +% ** (2) 3.54in = 256pt <= d < 2048pt = 28.34in +% ** Anything bigger than that may result in an overflow condition. +% ** For our purposes, we should never even see case (2). +\def\!!divide{% + \ifdim\!dimenD<256pt + \!divstep[64]\!divstep[32]\!divstep[32]% + \else + \!divstep[8]\!divstep[8]\!divstep[8]\!divstep[8]\!divstep[8]% + \!dimenA=2\!dimenA + \fi} + + +% ** The following macro does the real long division work. +\def\!divstep[#1]{% ** #1 = "B" + \!dimenB=#1\!dimenB% ** r <-- B*r + \!dimenD=\!dimenB% ** dimD holds quotient q=r/d for this + \divide \!dimenD by \!dimenC% ** step, in units of scaled pts + \!dimenA=#1\!dimenA% ** a <-- B*a + q + \advance\!dimenA by \!dimenD% + \multiply\!dimenD by \!dimenC% ** r <-- r - dq + \advance\!dimenB by -\!dimenD} + +% ** \Divide: See Subsection 9.3 of the manual. +\def\Divide <#1> by <#2> forming <#3> {% + \!divide{#1}{#2}{#3}} + + +% ********************************************* +% *** ELLIPSES (Draws ellipses and circles) *** +% ********************************************* + +% ** User commands +% ** \ellipticalarc axes ratio A:B DEGREES degrees from XSTART YSTART +% ** center at XCENTER YCENTER +% ** \circulararc DEGREES degrees from XSTART YSTART +% ** center at XCENTER YCENTER + +% ** Internal command +% ** \!sinandcos{32*ANGLE in radians}{32*SIN}{32*COS} + + +% ** \ellipticalarc axes ratio A:B DEGREES degrees from XSTART YSTART +% ** center at XCENTER YCENTER +% ** Draws a elliptical arc starting at the coordinate point (XSTART,YSTART). +% ** The center of the ellipse of which the arc is a segment is at +% ** (XCENTER,YCENTER). +% ** The arc extends through an angle of DEGREES degrees (may be + or -). +% ** A:B is the ratio of the length of the xaxis to the length of +% ** the yaxis of the ellipse +% ** Sqrt{[(XSTART-XCENTER)/A]**2 + [(YSTART-YCENTER)/B]**2} +% ** must be < 512pt (about 7in). +% ** Doesn't modify the dimensions (ht, dp, wd) of the PiCture under +% ** construction. + +% ** \circulararc -- See Subsection 5.3 of the manual. +\def\circulararc{% + \ellipticalarc axes ratio 1:1 } + +% ** \ellipticalarc -- See Subsection 5.3 of the manual. +\def\ellipticalarc axes ratio #1:#2 #3 degrees from #4 #5 center at #6 #7 {% + \!angle=#3pt\relax% ** get angle + \ifdim\!angle>\!zpt + \def\!sign{}% ** counterclockwise + \else + \def\!sign{-}\!angle=-\!angle% ** clockwise + \fi + \!xxloc=\!M{#6}\!xunit% ** convert CENTER to dimension + \!yyloc=\!M{#7}\!yunit + \!xxS=\!M{#4}\!xunit% ** get STARTing point on rim of ellipse + \!yyS=\!M{#5}\!yunit + \advance\!xxS -\!xxloc% ** make center of ellipse (0,0) + \advance\!yyS -\!yyloc + \!divide\!xxS{#1pt}\!xxS % ** scale point on ellipse to point on + \!divide\!yyS{#2pt}\!yyS % corresponding circle +% + \let\!MC=\!M% ** save current c/d mode + \!setdimenmode% ** go into dimension mode +% + \!xS=#1\!xxS \advance\!xS\!xxloc + \!yS=#2\!yyS \advance\!yS\!yyloc + \!start (\!xS,\!yS)% + \!loop\ifdim\!angle>14.9999pt% ** draw in major portion of ellipse + \!rotate(\!xxS,\!yyS)by(\!cos,\!sign\!sin)to(\!xxM,\!yyM) + \!rotate(\!xxM,\!yyM)by(\!cos,\!sign\!sin)to(\!xxE,\!yyE) + \!xM=#1\!xxM \advance\!xM\!xxloc \!yM=#2\!yyM \advance\!yM\!yyloc + \!xE=#1\!xxE \advance\!xE\!xxloc \!yE=#2\!yyE \advance\!yE\!yyloc + \!qjoin (\!xM,\!yM) (\!xE,\!yE) + \!xxS=\!xxE \!yyS=\!yyE + \advance \!angle -15pt + \repeat + \ifdim\!angle>\!zpt% ** complete remaining arc, if any + \!angle=100.53096\!angle% ** convert angle to radians, divide + \divide \!angle 360 % ** by 2, and multiply by 32 + \!sinandcos\!angle\!!sin\!!cos% ** get 32*sin & 32*cos + \!rotate(\!xxS,\!yyS)by(\!!cos,\!sign\!!sin)to(\!xxM,\!yyM) + \!rotate(\!xxM,\!yyM)by(\!!cos,\!sign\!!sin)to(\!xxE,\!yyE) + \!xM=#1\!xxM \advance\!xM\!xxloc \!yM=#2\!yyM \advance\!yM\!yyloc + \!xE=#1\!xxE \advance\!xE\!xxloc \!yE=#2\!yyE \advance\!yE\!yyloc + \!qjoin (\!xM,\!yM) (\!xE,\!yE) + \fi +% + \let\!M=\!MC% ** restore c/d mode + \ignorespaces}% ** if appropriate + + +% ** \!rotate(XREG,YREG)by(32cos,32sin)to(XXREG,YYREG) +% ** rotates (XREG,YREG) by angle with specfied scaled cos & sin to +% ** (XXREG,YYREG). Uses \!dimenA & \!dimenB as scratch registers. +\def\!rotate(#1,#2)by(#3,#4)to(#5,#6){% + \!dimenA=#3#1\advance \!dimenA -#4#2% ** Rcos(x+t)=Rcosx*cost - Rsinx*sint + \!dimenB=#3#2\advance \!dimenB #4#1% ** Rsin(x+t)=Rsinx*cost + Rcosx*sint + \divide \!dimenA 32 \divide \!dimenB 32 + #5=\!dimenA #6=\!dimenB + \ignorespaces} +\def\!sin{4.17684}% ** 32*sin(pi/24) (pi/24=7.5deg) +\def\!cos{31.72624}% ** 32*cos(pi/24) + + +% ** \!sinandcos{32*ANGLE in radians}{\SINCS}{\COSCS} +% ** Computes the 32*sine and 32*cosine of a small ANGLE expressed in +% ** radians/32 and puts these values in the replacement texts of +% ** \SINCS and \COSCS +\def\!sinandcos#1#2#3{% + \!dimenD=#1% ** angle is expressed in radians/32: 1pt = 1/32rad + \!dimenA=\!dimenD% ** dimA will eventually contain 32sin(angle)in pts + \!dimenB=32pt% ** dimB will eventually contain 32cos(angle)in pts + \!removept\!dimenD\!value% ** get value of 32*angle, without "pt" + \!dimenC=\!dimenD% ** holds 32*angle**i/i! in pts + \!dimenC=\!value\!dimenC \divide\!dimenC by 64 % ** now 32*angle**2/2 + \advance\!dimenB by -\!dimenC% ** 32-32*angle**2/2 + \!dimenC=\!value\!dimenC \divide\!dimenC by 96 % ** now 32*angle**3/3! + \advance\!dimenA by -\!dimenC% ** now 32*(angle-angle**3/6) + \!dimenC=\!value\!dimenC \divide\!dimenC by 128 % ** now 32*angle**4/4! + \advance\!dimenB by \!dimenC% + \!removept\!dimenA#2% ** set 32*sin(angle) + \!removept\!dimenB#3% ** set 32*cos(angle) + \ignorespaces} + + +% ***************************************************************** +% *** RULES (Draws rules, i.e., horizontal & vertical lines) *** +% ***************************************************************** + +% ** User command: +% ** \putrule [] from XCOORD1 YCOORD1 +% ** to XCOORD2 YCOORD2 + +% ** Internal commands: +% ** \!puthline [] (h = horizontal) +% ** Set by dashpat to either: \!putsolidhline or \!putdashedhline +% ** \!putvline [] (v = vertical) +% ** Either: \!putsolidvline or \!putdashedvline + + +% ** \putrule [] from XCOORD1 YCOORD1 +% ** to XCOORD2 YCOORD2 +% ** Draws a rule -- dashed or solid depending on the current dash pattern -- +% ** from (X1,Y1) to (X2,Y2). Uses TEK's \hrule & \vrule & \leaders +% ** constructions to handle horizontal & vertical lines efficiently both +% ** in terms of execution time and space in the DVI file. +% ** See Subsection 4.1 of the manual. +\def\putrule#1from #2 #3 to #4 #5 {% + \!xloc=\!M{#2}\!xunit \!xxloc=\!M{#4}\!xunit% + \!yloc=\!M{#3}\!yunit \!yyloc=\!M{#5}\!yunit% + \!dxpos=\!xxloc \advance\!dxpos by -\!xloc + \!dypos=\!yyloc \advance\!dypos by -\!yloc +% + \ifdim\!dypos=\!zpt + \def\!!Line{\!puthline{#1}}\ignorespaces + \else + \ifdim\!dxpos=\!zpt + \def\!!Line{\!putvline{#1}}\ignorespaces + \else + \def\!!Line{} + \fi + \fi + \let\!ML=\!M% ** save current coord\dimen mode + \!setdimenmode% ** express locations in dimens + \!!Line% + \let\!M=\!ML% ** restore previous c/d mode + \ignorespaces} + + +% ** \!putsolidhline [] +% ** Place horizontal solid line +\def\!putsolidhline#1{% + \ifdim\!dxpos>\!zpt + \put{\!hline\!dxpos}#1[l] at {\!xloc} {\!yloc} + \else + \put{\!hline{-\!dxpos}}#1[l] at {\!xxloc} {\!yyloc} + \fi + \ignorespaces} + +% ** \!putsolidvline [shifted ] +% ** Place vertical solid line +\def\!putsolidvline#1{% + \ifdim\!dypos>\!zpt + \put{\!vline\!dypos}#1[b] at {\!xloc} {\!yloc} + \else + \put{\!vline{-\!dypos}}#1[b] at {\!xxloc} {\!yyloc} + \fi + \ignorespaces} + +\def\!hline#1{\hbox to #1{\leaders \hrule height\linethickness\hfill}} +\def\!vline#1{\vbox to #1{\leaders \vrule width\linethickness\vfill}} + + +% ** \!putdashedhline [] +% ** Place dashed horizontal line +\def\!putdashedhline#1{% + \ifdim\!dxpos>\!zpt + \!DLsetup\!Flist\!dxpos + \put{\hbox to \!totalleaderlength{\!hleaders}\!hpartialpattern\!Rtrunc} + #1[l] at {\!xloc} {\!yloc} + \else + \!DLsetup\!Blist{-\!dxpos} + \put{\!hpartialpattern\!Ltrunc\hbox to \!totalleaderlength{\!hleaders}} + #1[r] at {\!xloc} {\!yloc} + \fi + \ignorespaces} + +% ** \!putdashedhline [] +% ** Place dashed vertical line +\def\!putdashedvline#1{% + \!dypos=-\!dypos% ** vertical leaders go from top to bottom + \ifdim\!dypos>\!zpt + \!DLsetup\!Flist\!dypos + \put{\vbox{\vbox to \!totalleaderlength{\!vleaders} + \!vpartialpattern\!Rtrunc}}#1[t] at {\!xloc} {\!yloc} + \else + \!DLsetup\!Blist{-\!dypos} + \put{\vbox{\!vpartialpattern\!Ltrunc + \vbox to \!totalleaderlength{\!vleaders}}}#1[b] at {\!xloc} {\!yloc} + \fi + \ignorespaces} + + +% ** The rest of the macros in this section are subroutines used by +% ** \!putdashedhline and \!putdashedvline. +\def\!DLsetup#1#2{% ** Dashed-Line set up + \let\!RSlist=#1% ** set !Rule-Skip list + \!countB=#2% ** convert rule length to integer (number of sps) + \!countA=\!leaderlength% ** ditto, leaderlength + \divide\!countB by \!countA% ** number of complete leader units + \!totalleaderlength=\!countB\!leaderlength + \!Rresiduallength=#2% + \advance \!Rresiduallength by -\!totalleaderlength% \** excess length + \!Lresiduallength=\!leaderlength + \advance \!Lresiduallength by -\!Rresiduallength + \ignorespaces} + +\def\!hleaders{% + \def\!Rule##1{\vrule height\linethickness width##1}% + \def\!Skip##1{\hskip##1}% + \leaders\hbox{\!RSlist}\hfill} + +\def\!hpartialpattern#1{% + \!dimenA=\!zpt \!dimenB=\!zpt + \def\!Rule##1{#1{##1}\vrule height\linethickness width\!dimenD}% + \def\!Skip##1{#1{##1}\hskip\!dimenD}% + \!RSlist} + +\def\!vleaders{% + \def\!Rule##1{\hrule width\linethickness height##1}% + \def\!Skip##1{\vskip##1}% + \leaders\vbox{\!RSlist}\vfill} + +\def\!vpartialpattern#1{% + \!dimenA=\!zpt \!dimenB=\!zpt + \def\!Rule##1{#1{##1}\hrule width\linethickness height\!dimenD}% + \def\!Skip##1{#1{##1}\vskip\!dimenD}% + \!RSlist} + +\def\!Rtrunc#1{\!trunc{#1}>\!Rresiduallength} +\def\!Ltrunc#1{\!trunc{#1}<\!Lresiduallength} + +\def\!trunc#1#2#3{% + \!dimenA=\!dimenB + \advance\!dimenB by #1% + \!dimenD=\!dimenB \ifdim\!dimenD#2#3\!dimenD=#3\fi + \!dimenC=\!dimenA \ifdim\!dimenC#2#3\!dimenC=#3\fi + \advance \!dimenD by -\!dimenC} + + +% **************************************************************** +% *** LINEAR ARC (Draws straight lines -- solid and dashed) *** +% **************************************************************** + +% ** User commands +% ** \inboundscheckoff +% ** \inboundscheckon + +% ** Internal commands +% ** \!start (XCOORD,YCOORD) +% ** \!ljoin (XCOORD,YCOORD) +% ** \!drawlinearsegment -- set by \dashpat to either +% ** \!linearsolid or \!lineardashed +% ** \!advancedashing -- set by \dashpat to either +% ** \relax or \!!advancedashing +% ** \!plotifinbounds -- set by \inboundscheck off/on to either +% ** \!plot or \!!plotifinbounds +% ** \!initinboundscheck -- set by \inboundscheck off/on to either +% ** \relax or \!!initinboundscheck + + +% \plotsymbolspacing ** distance between consecutive plot positions +% \!xS ** starting x +% \!yS ** starting y +% \!xE ** ending x +% \!yE ** ending y +% \!xdiff ** x_end - x_start +% \!ydiff ** y_end - y_start +% \!distacross ** how far along curve next point to be plotted is +% \!arclength ** approximate length of arc for current interval +% \!downlength ** remaining length for "pen" to be down +% \!uplength ** length for "pen" to be down +% \!intervalno ** counts segments to curve +% \totalarclength ** cumulative distance along curve +% \!npoints ** approximately (arc length / plotsymbolspacing) + +% ** Calls -- \!Pythag, \!divide, \!plot + + +% ** \!start (XCOORD,YCOORD) +% ** Sets initial point for linearly (or quadratically) interpolated curve +\def\!start (#1,#2){% + \!plotxorigin=\!xorigin \advance \!plotxorigin by \!plotsymbolxshift + \!plotyorigin=\!yorigin \advance \!plotyorigin by \!plotsymbolyshift + \!xS=\!M{#1}\!xunit \!yS=\!M{#2}\!yunit + \!rotateaboutpivot\!xS\!yS + \!copylist\!UDlist\to\!!UDlist% **\!UDlist has the form \\{dimen1}\\{dimen2}.. +% ** Routine will draw dashed line with pen +% ** down for dimen1, up for dimen2, ... + \!getnextvalueof\!downlength\from\!!UDlist + \!distacross=\!zpt% ** 1st point goes at start of curve + \!intervalno=0 % ** initialize interval counter + \global\totalarclength=\!zpt% ** initialize distance traveled along curve + \ignorespaces} + + +% ** \!ljoin (XCOORD,YCOORD) +% ** Draws a straight line starting at the last point specified +% ** by the most recent \!start, \!ljoin, or \!qjoin, and +% ** ending at (XCOORD,YCOORD). +\def\!ljoin (#1,#2){% + \advance\!intervalno by 1 + \!xE=\!M{#1}\!xunit \!yE=\!M{#2}\!yunit + \!rotateaboutpivot\!xE\!yE + \!xdiff=\!xE \advance \!xdiff by -\!xS%** xdiff = xE - xS + \!ydiff=\!yE \advance \!ydiff by -\!yS%** ydiff = yE - yS + \!Pythag\!xdiff\!ydiff\!arclength% ** arclength = sqrt(xdiff**2+ydiff**2) + \global\advance \totalarclength by \!arclength% + \!drawlinearsegment% ** set by dashpat to \!linearsolid or \!lineardashed + \!xS=\!xE \!yS=\!yE% ** shift ending points to starting points + \ignorespaces} + + +% ** The following routine is used to draw a "solid" line between (xS,yS) +% ** and (xE,yE). Points are spaced nearly every \plotsymbolspacing length +% ** along the line. +\def\!linearsolid{% + \!npoints=\!arclength + \!countA=\plotsymbolspacing + \divide\!npoints by \!countA% ** now #pts =. arclength/plotsymbolspacing + \ifnum \!npoints<1 + \!npoints=1 + \fi + \divide\!xdiff by \!npoints + \divide\!ydiff by \!npoints + \!xpos=\!xS \!ypos=\!yS +% + \loop\ifnum\!npoints>-1 + \!plotifinbounds + \advance \!xpos by \!xdiff + \advance \!ypos by \!ydiff + \advance \!npoints by -1 + \repeat + \ignorespaces} + + +% ** The following routine is used to draw a dashed line between (xS,yS) +% ** and (xE,yE). The dash pattern continues from the previous segment. +\def\!lineardashed{% +% ** + \ifdim\!distacross>\!arclength + \advance \!distacross by -\!arclength %nothing to plot in this interval +% + \else +% + \loop\ifdim\!distacross<\!arclength +% ** plot point, interpolating linearly in x and y + \!divide\!distacross\!arclength\!dimenA% ** dimA = across/arclength + \!removept\!dimenA\!t% ** \!t holds value in dimA, without the "pt" + \!xpos=\!t\!xdiff \advance \!xpos by \!xS + \!ypos=\!t\!ydiff \advance \!ypos by \!yS + \!plotifinbounds + \advance\!distacross by \plotsymbolspacing + \!advancedashing + \repeat +% + \advance \!distacross by -\!arclength% ** prepare for next interval + \fi + \ignorespaces} + + +\def\!!advancedashing{% + \advance\!downlength by -\plotsymbolspacing + \ifdim \!downlength>\!zpt + \else + \advance\!distacross by \!downlength + \!getnextvalueof\!uplength\from\!!UDlist + \advance\!distacross by \!uplength + \!getnextvalueof\!downlength\from\!!UDlist + \fi} + + +% ** \inboundscheckoff & \inboundscheckon: See Subsection 5.5 of the manual. +\def\inboundscheckoff{% + \def\!plotifinbounds{\!plot(\!xpos,\!ypos)}% + \def\!initinboundscheck{\relax}\ignorespaces} +\def\inboundscheckon{% + \def\!plotifinbounds{\!!plotifinbounds}% + \def\!initinboundscheck{\!!initinboundscheck}% + \!initinboundscheck\ignorespaces} +\inboundscheckoff + +% ** The following code plots the current point only if it falls in the +% ** current plotarea. It doesn't matter if the coordinate system has +% ** changed since the plotarea was set up. However, shifts of the plot +% ** are ignored (how the plotsymbol stands relative to its plot position is +% ** unknown anyway). +\def\!!plotifinbounds{% + \ifdim \!xpos<\!checkleft + \else + \ifdim \!xpos>\!checkright + \else + \ifdim \!ypos<\!checkbot + \else + \ifdim \!ypos>\!checktop + \else + \!plot(\!xpos,\!ypos) + \fi + \fi + \fi + \fi} + + +\def\!!initinboundscheck{% + \!checkleft=\!arealloc \advance\!checkleft by \!xorigin + \!checkright=\!arearloc \advance\!checkright by \!xorigin + \!checkbot=\!areabloc \advance\!checkbot by \!yorigin + \!checktop=\!areatloc \advance\!checktop by \!yorigin} + + +% ********************************* +% *** LOGTEN (Log_10 function) *** +% ********************************* +% +% ** \!logten{X} +% ** Calculates log_10 of X. X and LOG10(X) are in fixed point notation. +% ** X must be positive; it may have an optional `+' sign; any number +% ** of digits may be specified for X. The absolute error in LOG10(X) is +% ** less than .0001 (probably < .00006). That's about as good as you +% ** hope for, since TEX only operates to 5 figures after the decimal +% ** point anyway. + +% \!rootten=3.162278pt **** These are values are set in ALLOCATIONS +% \!tenAe=2.543275pt (=A5) +% \!tenAc=2.773839pt (=A3) +% \!tenAa=8.690286pt (=A1) + +\def\!logten#1#2{% + \expandafter\!!logten#1\!nil + \!removept\!dimenF#2% + \ignorespaces} + +\def\!!logten#1#2\!nil{% + \if -#1% + \!dimenF=\!zpt + \def\!next{\ignorespaces}% + \else + \if +#1% + \def\!next{\!!logten#2\!nil}% + \else + \if .#1% + \def\!next{\!!logten0.#2\!nil}% + \else + \def\!next{\!!!logten#1#2..\!nil}% + \fi + \fi + \fi + \!next} + +\def\!!!logten#1#2.#3.#4\!nil{% + \!dimenF=1pt % ** DimF holds log10 original argument + \if 0#1% + \!!logshift#3pt % ** Argument < 1 + \else % ** Argument >= 1 + \!logshift#2/% ** Shift decimal pt as many places + \!dimenE=#1.#2#3pt % ** as there are figures in #2 + \fi % ** Now dimE holds revised X want log10 of + \ifdim \!dimenE<\!rootten% ** Transform X to XX between sqrt(10) + \multiply \!dimenE 10 % ** and 10*sqrt(10) + \advance \!dimenF -1pt + \fi + \!dimenG=\!dimenE% ** dimG <- (XX + 10) + \advance\!dimenG 10pt + \advance\!dimenE -10pt % ** dimE <- (XX - 10) + \multiply\!dimenE 10 % ** dimE = 10*(XX-10) + \!divide\!dimenE\!dimenG\!dimenE% ** Now dimE=10t==10*(XX-10)/(XX+10) + \!removept\!dimenE\!t% ** !t=10t, with "pt" removed + \!dimenG=\!t\!dimenE% ** dimG=100t**2 + \!removept\!dimenG\!tt% ** !tt=100t**2, with "pt" removed + \!dimenH=\!tt\!tenAe% ** dimH=10*a5*(10t)**2 /100 + \divide\!dimenH 100 + \advance\!dimenH \!tenAc% ** ditto + 10*a3 + \!dimenH=\!tt\!dimenH% ** ditto * (10t)**2 /100 + \divide\!dimenH 100 + \advance\!dimenH \!tenAa% ** ditto + 10*a1 + \!dimenH=\!t\!dimenH% ** ditto * 10t / 100 + \divide\!dimenH 100 % ** Now dimH = log10(XX) - 1 + \advance\!dimenF \!dimenH}% ** dimF = log10(X) + +\def\!logshift#1{% + \if #1/% + \def\!next{\ignorespaces}% + \else + \advance\!dimenF 1pt + \def\!next{\!logshift}% + \fi + \!next} + + \def\!!logshift#1{% + \advance\!dimenF -1pt + \if 0#1% + \def\!next{\!!logshift}% + \else + \if p#1% + \!dimenF=1pt + \def\!next{\!dimenE=1p}% + \else + \def\!next{\!dimenE=#1.}% + \fi + \fi + \!next} + + +% *********************************************************** +% *** PICTURES (Basic setups for PiCtures; \put commands) *** +% *********************************************************** + +% ** User Commands: +% ** \beginpicture +% ** \endpicture +% ** \endpicturesave +% ** \setcoordinatesystem units point at XREF YREF +% ** \put {OBJECT} [ORIENTATION] at XCOORD YCOORD +% ** \multiput {OJBECT} [ORIENTATION] ) at +% ** XCOORD YCOORD +% ** *NUMBER_OF_TIMES DXCOORD DYCOORD / +% ** \accountingon +% ** \accountingoff +% ** \stack [ORIENTATION] {LIST OF ITEMS} +% ** \lines [ORIENTATION] {LINES} +% ** \Lines [ORIENTATION] {LINES} +% ** \setdimensionmode +% ** \setcoordinatemode +% ** \Xdistance +% ** \Ydistance + +% ** Internal commands: +% ** \!setputobject{OBJECT}{[ORIENTATION]} +% ** \!dimenput{OBJECT}[ORIENTATION](XDIMEN,YDIMEN) +% ** \!setdimenmode +% ** \!setcoordmode +% ** \!ifdimenmode +% ** \!ifcoordmode + + +% ** \beginpicture +% ** \endpicture +% ** \endpicturesave +% ** \beginpicture ... \endpicture creates an hbox. Objects are +% ** placed in this box using the \put command and the like (see below). +% ** The location of an object is specified in terms of coordinate system(s) +% ** established by \setcoordinatesystem. Each coordinate system (there +% ** might be just one) specifies the length of 1 horizontal unit, the length +% ** of 1 vertical unit, and the coordinates of a "reference point". The +% ** reference points of various coordinate systems will be in the same +% ** physical location. The macros keep track of the size of the objects +% ** and their locations. The resulting hbox is the smallest hbox which +% ** encloses all the objects, and whose TEK reference point is the point +% ** on the left edge of the box closest vertically to the PICTEX reference +% ** point. Using \endpicturesave, you can (globally) save the distance TEK's +% ** reference point is to the right (respectively, up from) PICTEX's +% ** reference point in the dimension register \XREG (respectively \YREG). +% ** You can then \put the picture OBJECT into a larger picture so that its +% ** reference point is at (XCOORD,YCOORD) with the command +% ** \put {picture OBJECT} [Bl] <\XREG, \YREG> at XCOORD YCOORD + +% ** \beginpicture : See Subsection 1.1 of the manual. +\def\beginpicture{% + \setbox\!picbox=\hbox\bgroup% + \!xleft=\maxdimen + \!xright=-\maxdimen + \!ybot=\maxdimen + \!ytop=-\maxdimen} + +% ** \endpicture : See Subsection 1.1 of the manual. +\def\endpicture{% + \ifdim\!xleft=\maxdimen% ** check if nothing was put in picbox + \!xleft=\!zpt \!xright=\!zpt \!ybot=\!zpt \!ytop=\!zpt + \fi + \global\!Xleft=\!xleft \global\!Xright=\!xright + \global\!Ybot=\!ybot \global\!Ytop=\!ytop + \egroup% + \ht\!picbox=\!Ytop \dp\!picbox=-\!Ybot + \ifdim\!Ybot>\!zpt + \else + \ifdim\!Ytop<\!zpt + \!Ybot=\!Ytop + \else + \!Ybot=\!zpt + \fi + \fi + \hbox{\kern-\!Xleft\lower\!Ybot\box\!picbox\kern\!Xright}} + +% ** \endpicturesave : See Subsection 8.4 of the manual. +\def\endpicturesave <#1,#2>{% + \endpicture \global #1=\!Xleft \global #2=\!Ybot \ignorespaces} + + +% ** \setcoordinatesystem units +% ** point at XREF YREF +% ** Each of `units ' and `point at XREF YREF' +% ** are optional. +% ** Unit lengths must be given in dimensions (e.g., <10pt,1in>). +% ** Default unit lengths are 1pt, 1pt, or previous unit lengths. +% ** Reference point is specified in current units (e.g., 3 5 ). +% ** Default reference point is 0 0 , or previous reference point. +% ** Unit lengths and reference points obey TEX's scoping rules. +% ** See Subsection 1.2 of the manual. +\def\setcoordinatesystem{% + \!ifnextchar{u}{\!getlengths } + {\!getlengths units <\!xunit,\!yunit>}} +\def\!getlengths units <#1,#2>{% + \!xunit=#1\relax + \!yunit=#2\relax + \!ifcoordmode + \let\!SCnext=\!SCccheckforRP + \else + \let\!SCnext=\!SCdcheckforRP + \fi + \!SCnext} +\def\!SCccheckforRP{% + \!ifnextchar{p}{\!cgetreference } + {\!cgetreference point at {\!xref} {\!yref} }} +\def\!cgetreference point at #1 #2 {% + \edef\!xref{#1}\edef\!yref{#2}% + \!xorigin=\!xref\!xunit \!yorigin=\!yref\!yunit + \!initinboundscheck % ** See linear.tex + \ignorespaces} +\def\!SCdcheckforRP{% + \!ifnextchar{p}{\!dgetreference}% + {\ignorespaces}} +\def\!dgetreference point at #1 #2 {% + \!xorigin=#1\relax \!yorigin=#2\relax + \ignorespaces} + + +% ** \put {OBJECT} [XY] at (XCOORD,YCOORD) +% ** `[XY]' and `' are optional. +% ** First OBJECT is placed in an hbox (the "objectbox") and then a +% ** "reference point" is assigned to the objectbox as follows: +% ** [1] first, the reference point is taken to be the center of the box; +% ** [2] next, centering is overridden by the specifications +% ** X=l -- reference point along the left edge of the objectbox +% ** X=r -- reference point along the right edge of the objectbox +% ** Y=b -- reference point along the bottom edge of the objectbox +% ** Y=B -- reference point along the Baseline of the objectbox +% ** Y=t -- reference point along the top edge of the objectbox; +% ** [3] finally the reference point is shifted left by XDIMEN, down +% ** by YDIMEN (both default to 0pt). +% ** The objectbox is placed within PICBOX with its reference point at +% ** (XCOORD,YCOORD). +% ** If OBJECT is a saved box, say box0, you have to write +% ** \put{\box0}... or \put{\copy0}... +% ** The objectbox is void after the put. +% ** See Subsection 2.1 of the manual. +\long\def\put#1#2 at #3 #4 {% + \!setputobject{#1}{#2}% + \!xpos=\!M{#3}\!xunit \!ypos=\!M{#4}\!yunit + \!rotateaboutpivot\!xpos\!ypos% + \advance\!xpos -\!xorigin \advance\!xpos -\!xshift + \advance\!ypos -\!yorigin \advance\!ypos -\!yshift + \kern\!xpos\raise\!ypos\box\!putobject\kern-\!xpos% + \!doaccounting\ignorespaces} + +% ** \multiput etc. Like \put. The objectbox is not voided until the +% ** termininating /, and is placed repeatedly with: +% ** XCOORD YCOORD -- the objectbox is put down with its reference point +% ** at (XCOORD,YCOORD); +% ** *N DXCOORD DYCOORD -- each of N times the current +% ** (xcoord,ycoord) is incremented by (DXCOORD,DYCOORD), and the +% ** objectbox is put down with its reference point at (xcoord,ycoord) +% ** (This specification has to follow an XCOORD YCOORD pair) +% ** See Subsection 2.2 of the manual. +\long\def\multiput #1#2 at {% + \!setputobject{#1}{#2}% + \!ifnextchar"{\!putfromfile}{\!multiput}} +\def\!putfromfile"#1"{% + \expandafter\!multiput \normalinput #1 /} +\def\!multiput{% + \futurelet\!nextchar\!!multiput} +\def\!!multiput{% + \if *\!nextchar + \def\!nextput{\!alsoby}% + \else + \if /\!nextchar + \def\!nextput{\!finishmultiput}% + \else + \def\!nextput{\!alsoat}% + \fi + \fi + \!nextput} +\def\!finishmultiput/{% + \setbox\!putobject=\hbox{}% + \ignorespaces} + +% ** \!alsoat XCOORD YCOORD +% ** The objectbox is put down with reference point at XCOORD,YCOORD +\def\!alsoat#1 #2 {% + \!xpos=\!M{#1}\!xunit \!ypos=\!M{#2}\!yunit + \!rotateaboutpivot\!xpos\!ypos% + \advance\!xpos -\!xorigin \advance\!xpos -\!xshift + \advance\!ypos -\!yorigin \advance\!ypos -\!yshift + \kern\!xpos\raise\!ypos\copy\!putobject\kern-\!xpos% + \!doaccounting + \!multiput} + +% ** \!alsoby*N DXCOORD DYCOORD +% ** N times, the current (XCOORD,YCOORD) is advanced by (DXCOORD,DYCOORD), +% ** and the current (shifted, oriented) OBJECT is put down. +\def\!alsoby*#1 #2 #3 {% + \!dxpos=\!M{#2}\!xunit \!dypos=\!M{#3}\!yunit + \!rotateonly\!dxpos\!dypos + \!ntemp=#1% + \!!loop\ifnum\!ntemp>0 + \advance\!xpos by \!dxpos \advance\!ypos by \!dypos + \kern\!xpos\raise\!ypos\copy\!putobject\kern-\!xpos% + \advance\!ntemp by -1 + \repeat + \!doaccounting + \!multiput} + +% ** \accountingoff : Suspends PiCTeX's accounting of the aggregate +% ** size of the picture box. +% ** \accounting on : Reinstates accounting. +% ** See Subsection 8.2 of the manual. +\def\accountingon{\def\!doaccounting{\!!doaccounting}\ignorespaces} +\def\accountingoff{\def\!doaccounting{}\ignorespaces} +\accountingon +\def\!!doaccounting{% + \!xtemp=\!xpos + \!ytemp=\!ypos + \ifdim\!xtemp<\!xleft + \!xleft=\!xtemp + \fi + \advance\!xtemp by \!wd + \ifdim\!xright<\!xtemp + \!xright=\!xtemp + \fi + \advance\!ytemp by -\!dp + \ifdim\!ytemp<\!ybot + \!ybot=\!ytemp + \fi + \advance\!ytemp by \!dp + \advance\!ytemp by \!ht + \ifdim\!ytemp>\!ytop + \!ytop=\!ytemp + \fi} + +\long\def\!setputobject#1#2{% + \setbox\!putobject=\hbox{#1}% + \!ht=\ht\!putobject \!dp=\dp\!putobject \!wd=\wd\!putobject + \wd\!putobject=\!zpt + \!xshift=.5\!wd \!yshift=.5\!ht \advance\!yshift by -.5\!dp + \edef\!putorientation{#2}% + \expandafter\!SPOreadA\!putorientation[]\!nil% + \expandafter\!SPOreadB\!putorientation<\!zpt,\!zpt>\!nil\ignorespaces} + +\def\!SPOreadA#1[#2]#3\!nil{\!etfor\!orientation:=#2\do\!SPOreviseshift} + +\def\!SPOreadB#1<#2,#3>#4\!nil{\advance\!xshift by -#2\advance\!yshift by -#3} + +\def\!SPOreviseshift{% + \if l\!orientation + \!xshift=\!zpt + \else + \if r\!orientation + \!xshift=\!wd + \else + \if b\!orientation + \!yshift=-\!dp + \else + \if B\!orientation + \!yshift=\!zpt + \else + \if t\!orientation + \!yshift=\!ht + \fi + \fi + \fi + \fi + \fi} + + +% ** \!dimenput{OBJECT} [XY] (XLOC,YLOC) +% ** This is an internal put routine, similar to \put, except that +% ** XLOC=distance right from reference point, YLOC=distance up from +% ** reference point. XLOC and YLOC are dimensions, so this routine +% ** is completely independent of the current coordinate system. +% ** This routine does NOT do ROTATIONS. +\long\def\!dimenput#1#2(#3,#4){% + \!setputobject{#1}{#2}% + \!xpos=#3\advance\!xpos by -\!xshift + \!ypos=#4\advance\!ypos by -\!yshift + \kern\!xpos\raise\!ypos\box\!putobject\kern-\!xpos% + \!doaccounting\ignorespaces} + + +% ** The following macros permit the picture drawing routines to be used +% ** either in the default "coordinate mode", or in "dimension mode". +% ** In coordinate mode \!M(1.5,\!xunit) expands to 1.5\!xunit +% ** In dimension mode \!M(1.5pt,\!xunit) expands to 1.5pt +% ** Dimension mode is useful in coding macros. +% ** Any special purpose picture macro that sets dimension mode should +% ** reset coordinate mode before completion. +% ** See Subsection 9.2 of the manual. +\def\!setdimenmode{% + \let\!M=\!M!!\ignorespaces} +\def\!setcoordmode{% + \let\!M=\!M!\ignorespaces} +\def\!ifcoordmode{% + \ifx \!M \!M!} +\def\!ifdimenmode{% + \ifx \!M \!M!!} +\def\!M!#1#2{#1#2} +\def\!M!!#1#2{#1} +\!setcoordmode +\let\setdimensionmode=\!setdimenmode +\let\setcoordinatemode=\!setcoordmode + +% ** \Xdistance{XCOORD}, \Ydistance{YCOORD} are the horizontal and +% ** vertical distances from the origin (0,0) to the point +% ** (XCOORD,YCOORD) in the current coordinate system. +% ** See Subsection 9.2 of the manual. +\def\Xdistance#1{% + \!M{#1}\!xunit + \ignorespaces} +\def\Ydistance#1{% + \!M{#1}\!yunit + \ignorespaces} + +% ** The following macros -- \stack, \line, and \Lines -- are useful for +% ** annotating PiCtures. They can be used outside the \beginpicture ... +% ** \endpicture environment. + +% ** \stack [POSITIONING] {VALUESLIST} +% ** Builds a vertical stack of the values in VALUESLIST. Values in +% ** VALUESLIST are separated by commas. In the resulting stack, values are +% ** centered by default, and positioned flush left (right) if +% ** POSITIONING = l (r). Values are separated vertically by LEADING, +% ** which defaults to \stackleading. +% ** See Subsection 2.3 of the manual. +\def\stack{% + \!ifnextchar[{\!stack}{\!stack[c]}} +\def\!stack[#1]{% + \let\!lglue=\hfill \let\!rglue=\hfill + \expandafter\let\csname !#1glue\endcsname=\relax + \!ifnextchar<{\!!stack}{\!!stack<\stackleading>}} +\def\!!stack<#1>#2{% + \vbox{\def\!valueslist{}\!ecfor\!value:=#2\do{% + \expandafter\!rightappend\!value\withCS{\\}\to\!valueslist}% + \!lop\!valueslist\to\!value + \let\\=\cr\lineskiplimit=\maxdimen\lineskip=#1% + \baselineskip=-1000pt\halign{\!lglue##\!rglue\cr \!value\!valueslist\cr}}% + \ignorespaces} + +% ** \lines [POSITIONING] {LINES} +% ** Builds a vertical array of the lines in LINES. Each line in LINES +% ** is terminated by a \cr. In the resulting array, lines are +% ** centered by default, and positioned flush left (right) if +% ** POSITIONING = l (r). The lines in the array are subject to TeX's +% ** usual spacing rules: in particular the baselines are ordinarily an equal +% ** distance apart. The baseline of the array is the baseline of the +% ** the bottom line. +% ** See Subsection 2.3 of the manual. +\def\lines{% + \!ifnextchar[{\!lines}{\!lines[c]}} +\def\!lines[#1]#2{% + \let\!lglue=\hfill \let\!rglue=\hfill + \expandafter\let\csname !#1glue\endcsname=\relax + \vbox{\halign{\!lglue##\!rglue\cr #2\crcr}}% + \ignorespaces} + +% ** \Lines [POSITIONING] {LINES} +% ** Like \lines, but the baseline of the array is the baseline of the +% ** top line. See Subsection 2.3 of the manual. +\def\Lines{% + \!ifnextchar[{\!Lines}{\!Lines[c]}} +\def\!Lines[#1]#2{% + \let\!lglue=\hfill \let\!rglue=\hfill + \expandafter\let\csname !#1glue\endcsname=\relax + \vtop{\halign{\!lglue##\!rglue\cr #2\crcr}}% + \ignorespaces} + + +% ********************************************* +% *** PLOTTING (Things to do with plotting) *** +% ********************************************* + +% ** User commands +% ** \setplotsymbol ({PLOTSYMBOL} [ORIENTATION] ) +% ** \savelinesandcurves on "FILE_NAME" +% ** \dontsavelinesandcurves +% ** \writesavefile {MESSAGE} +% ** \replot {FILE_NAME} + +% ** Internal command +% ** \!plot(XDIMEN,YDIMEN) + +% ** \setplotsymbol ({PLOTSYMBOL} [ ] < , >) +% ** Save PLOTSYMBOL away in an hbox for use with curve plotting routines +% ** See Subsection 5.2 of the manual. +\def\setplotsymbol(#1#2){% + \!setputobject{#1}{#2} + \setbox\!plotsymbol=\box\!putobject% + \!plotsymbolxshift=\!xshift + \!plotsymbolyshift=\!yshift + \ignorespaces} + +\setplotsymbol({\fiverm .})% ** initialize plotsymbol + + +% ** \!plot is either \!!plot (when no lines and curves are being saved) or +% ** \!!!plot (when lines and curves are being saved) + +% ** \!!plot(XDIMEN,YDIMEN) +% ** Places the current plotsymbol a horizontal distance=XDIMEN-xorigin +% ** and a vertical distance=YDIMEN-yorigin from the current +% ** reference point. +\def\!!plot(#1,#2){% + \!dimenA=-\!plotxorigin \advance \!dimenA by #1% ** over + \!dimenB=-\!plotyorigin \advance \!dimenB by #2% ** up + \kern\!dimenA\raise\!dimenB\copy\!plotsymbol\kern-\!dimenA% + \ignorespaces} + +% ** \!!!plot(XDIMEN,YDIMEN) +% ** Like \!!plot, but also saves the plot location in units of +% ** scaled point, on file `replotfile' +\def\!!!plot(#1,#2){% + \!dimenA=-\!plotxorigin \advance \!dimenA by #1% ** over + \!dimenB=-\!plotyorigin \advance \!dimenB by #2% ** up + \kern\!dimenA\raise\!dimenB\copy\!plotsymbol\kern-\!dimenA% + \!countE=\!dimenA + \!countF=\!dimenB + \immediate\write\!replotfile{\the\!countE,\the\!countF.}% + \ignorespaces} + + +% ** \savelinesandcurves on "FILE_NAME" +% ** Switch to save locations used for plotting lines and curves +% ** (No advantage in saving locations for solid lines; however +% ** replotting curve locations speeds things up by a factor of about 4. +% ** \dontsavelinesandcurves +% ** Terminates \savelinesandcurves. The default. +% ** See Subsection 5.6 of the manual. +\def\savelinesandcurves on "#1" {% + \immediate\closeout\!replotfile + \immediate\openout\!replotfile=#1% + \let\!plot=\!!!plot} + +\def\dontsavelinesandcurves {% + \let\!plot=\!!plot} +\dontsavelinesandcurves + +% ** \writesavefile {MESSAGE} +% ** The message is preceded by a "%", so that it won't interfere +% ** with replotting. +% ** See Subsection 5.6 of the manual. +{\catcode`\%=11\xdef\!Commentsignal{%}} +\def\writesavefile#1 {% + \immediate\write\!replotfile{\!Commentsignal #1}% + \ignorespaces} + +% ** \replot "FILE_NAME" +% ** Replots the locations saved earlier under \savelinesandcurves +% ** on "FILE_NAME" +% ** See Subsection 5.6 of the manual. +\def\replot"#1" {% + \expandafter\!replot\normalinput #1 /} +\def\!replot#1,#2. {% + \!dimenA=#1sp + \kern\!dimenA\raise#2sp\copy\!plotsymbol\kern-\!dimenA + \futurelet\!nextchar\!!replot} +\def\!!replot{% + \if /\!nextchar + \def\!next{\!finish}% + \else + \def\!next{\!replot}% + \fi + \!next} +% ************************************************** +% *** PYTHAGORAS (Euclidean distance function) *** +% ************************************************** + +% ** User command: +% ** \placehypotenuse for and in + +% ** Internal command: +% ** \!Pythag{X}{Y}{Z} +% ** Input X,Y are dimensions, or dimension registers. +% ** Output Z == sqrt(X**2+Y**2) must be a dimension register. +% ** Assumes that |X|+|Y| < 2048pt (about 28in). + +% ** Without loss of generality, suppose x>0, y>0. Put s = x+y, +% ** z = sqrt(x**2+y**2). Then z = s*f, where f = sqrt(t**2 + (1-t)**2) +% ** = sqrt((1+tau**2)/2), where t = x/s and tau = 2(t-1/2) . + +% ** Uses the \!divide macro (which uses registers \!dimenA--\!dimenD. +% ** Uses the \!removept macro (e.g., 123.45pt --> 123.45) +% ** Uses registers \!dimenE--\!dimenI. +\def\!Pythag#1#2#3{% + \!dimenE=#1\relax + \ifdim\!dimenE<\!zpt + \!dimenE=-\!dimenE + \fi% ** dimE = |x| + \!dimenF=#2\relax + \ifdim\!dimenF<\!zpt + \!dimenF=-\!dimenF + \fi% ** dimF = |y| + \advance \!dimenF by \!dimenE% ** dimF = s = |x|+|y| + \ifdim\!dimenF=\!zpt + \!dimenG=\!zpt% ** dimG = z = sqrt(x**2+y**2) + \else + \!divide{8\!dimenE}\!dimenF\!dimenE% ** now dimE = 8t = (8|x|)/s + \advance\!dimenE by -4pt% ** 8tau = (8t-4)*2 + \!dimenE=2\!dimenE% ** (tau = 2*t - 1) + \!removept\!dimenE\!!t% ** 8tau, without "pt" + \!dimenE=\!!t\!dimenE% ** (8tau)**2, in pts + \advance\!dimenE by 64pt% ** u = [64 + (8tau)**2]/2 + \divide \!dimenE by 2% ** [u = (8f)**2] + \!dimenH=7pt% ** initial guess g at sqrt(u) + \!!Pythag\!!Pythag\!!Pythag% ** 3 iterations give sqrt(u) + \!removept\!dimenH\!!t% ** 8f=sqrt(u), without "pt" + \!dimenG=\!!t\!dimenF% ** z = (8f)*s/8 + \divide\!dimenG by 8 + \fi + #3=\!dimenG + \ignorespaces} + +\def\!!Pythag{% ** Newton-Raphson for sqrt + \!divide\!dimenE\!dimenH\!dimenI% ** v = u/g + \advance\!dimenH by \!dimenI% ** g <-- (g + u/g)/2 + \divide\!dimenH by 2} + +% ** \placehypotenuse for and in +% ** See Subsection 9.3 of the manual. +\def\placehypotenuse for <#1> and <#2> in <#3> {% + \!Pythag{#1}{#2}{#3}} + + +% ********************************************** +% *** QUADRATIC ARC (Draws a quadratic arc) *** +% ********************************************** + +% ** Internal command +% ** \!qjoin (XCOORD1,YCOORD1) (XCOORD2,YCOORD2) + +% ** \!qjoin (XCOORD1,YCOORD1) (XCOORD2,YCOORD2) +% ** Draws an arc starting at the (last) point specified by the most recent +% ** \!qjoin, or \!ljoin, or \!start and passing through (X_1,Y_1), (X_2,Y_2). +% ** Uses quadratic interpolation in both x and y: +% ** x(t), 0 <= t <= 1, interpolates x_0, x_1, x_2 at t=0, .5, 1 +% ** y(t), 0 <= t <= 1, interpolates y_0, y_1, y_2 at t=0, .5, 1 + +\def\!qjoin (#1,#2) (#3,#4){% + \advance\!intervalno by 1 + \!ifcoordmode + \edef\!xmidpt{#1}\edef\!ymidpt{#2}% + \else + \!dimenA=#1\relax \edef\!xmidpt{\the\!dimenA}% + \!dimenA=#2\relax \edef\!xmidpt{\the\!dimenA}% + \fi + \!xM=\!M{#1}\!xunit \!yM=\!M{#2}\!yunit \!rotateaboutpivot\!xM\!yM + \!xE=\!M{#3}\!xunit \!yE=\!M{#4}\!yunit \!rotateaboutpivot\!xE\!yE +% +% ** Find coefficients for x(t)=a_x + b_x*t + c_x*t**2 + \!dimenA=\!xM \advance \!dimenA by -\!xS% ** dimA = I = xM - xS + \!dimenB=\!xE \advance \!dimenB by -\!xM% ** dimB = II = xE-xM + \!xB=3\!dimenA \advance \!xB by -\!dimenB% ** b=3I-II + \!xC=2\!dimenB \advance \!xC by -2\!dimenA% ** c=2(II-I) +% +% ** Find coefficients for y(t)=y_x + b_y*t + c_y*t**2 + \!dimenA=\!yM \advance \!dimenA by -\!yS% + \!dimenB=\!yE \advance \!dimenB by -\!yM% + \!yB=3\!dimenA \advance \!yB by -\!dimenB% + \!yC=2\!dimenB \advance \!yC by -2\!dimenA% +% +% ** Use Simpson's rule to calculate arc length over [0,1/2]: +% ** arc length = 1/2[1/6 f(0) + 4/6 f(1/4) + 1/6 f(1/2)] +% ** with f(t) = sqrt(x'(t)**2 + y'(t)**2). + \!xprime=\!xB \!yprime=\!yB% ** x'(t) = b + 2ct + \!dxprime=.5\!xC \!dyprime=.5\!yC% ** dt=1/4 ==> dx'(t) = c/2 + \!getf \!midarclength=\!dimenA + \!getf \advance \!midarclength by 4\!dimenA + \!getf \advance \!midarclength by \!dimenA + \divide \!midarclength by 12 +% +% ** Get arc length over [0,1]. + \!arclength=\!dimenA + \!getf \advance \!arclength by 4\!dimenA + \!getf \advance \!arclength by \!dimenA + \divide \!arclength by 12% ** Now have arc length over [1/2,1] + \advance \!arclength by \!midarclength + \global\advance \totalarclength by \!arclength +% +% +% ** Check to see if there's anything to plot in this interval + \ifdim\!distacross>\!arclength + \advance \!distacross by -\!arclength% ** nothing +% + \else + \!initinverseinterp% ** initialize for inverse interpolation on arc length + \loop\ifdim\!distacross<\!arclength% ** loop over points on arc + \!inverseinterp% ** find t such that arc length[0,t] = distacross, +% ** using inverse quadratic interpolation +% ** now evaluate x(t)=(c*t + b)*t + a + \!xpos=\!t\!xC \advance\!xpos by \!xB + \!xpos=\!t\!xpos \advance \!xpos by \!xS +% ** evaluate y(t) + \!ypos=\!t\!yC \advance\!ypos by \!yB + \!ypos=\!t\!ypos \advance \!ypos by \!yS + \!plotifinbounds% ** plot point if in bounds + \advance\!distacross \plotsymbolspacing%** advance arc length for next pt + \!advancedashing% ** see "linear" + \repeat +% + \advance \!distacross by -\!arclength% ** prepare for next interval + \fi +% + \!xS=\!xE% ** shift ending points to starting points + \!yS=\!yE + \ignorespaces} + + +% ** \!getf -- Calculates sqrt(x'(t)**2 + y'(t)**2) and advances +% ** x'(t) and y'(t) +\def\!getf{\!Pythag\!xprime\!yprime\!dimenA% + \advance\!xprime by \!dxprime + \advance\!yprime by \!dyprime} + + +% ** \!initinverseinterp -- initializes for inverse quadratic interpolation +% ** of arc length provided 1/3 < midarclength/arclength < 2/3; otherwise +% ** initializes for inverse linear interpolation. +\def\!initinverseinterp{% + \ifdim\!arclength>\!zpt + \!divide{8\!midarclength}\!arclength\!dimenE% ** dimE=8w=8r/s, where r +% ** = midarclength, s=arclength +% ** Test for w out of range: w<1/3 or w>2/3 + \ifdim\!dimenE<\!wmin \!setinverselinear + \else + \ifdim\!dimenE>\!wmax \!setinverselinear + \else% ** w in range: initialize + \def\!inverseinterp{\!inversequad}\ignorespaces +% +% ** Calculate the coefficients \!beta and \!gamma of the quadratic +% ** t = \!beta*v + \!gamma*v**2 +% ** taking the values t=0, 1/2, 1 at v=0, w==r/s, 1 respectively: +% ** \!beta = (1/2 - w**2)/[w(1-w)] +% ** \!gamma = 1 - beta. +% + \!removept\!dimenE\!Ew% ** 8w, without "pt" + \!dimenF=-\!Ew\!dimenE% ** -(8w)**2 + \advance\!dimenF by 32pt% ** 32 - (8w)**2 + \!dimenG=8pt + \advance\!dimenG by -\!dimenE% ** 8 - 8w + \!dimenG=\!Ew\!dimenG% ** (8w)*(8-8w) + \!divide\!dimenF\!dimenG\!beta% ** beta = (32-(8w)**2)/(8w(8-8w)) +% ** = (1/2 - w**2)/(w(1-w)) + \!gamma=1pt + \advance \!gamma by -\!beta% ** gamma = 1-beta + \fi% ** end of the \ifdim\!dimenE>\!wmax + \fi% ** end of the \ifdim\!dimenE<\!wmin + \fi% ** end of the \ifdim\!arclength>\!zpt + \ignorespaces} + + +% ** For 0 <= t <= 1, let AL(t) = arclength[0,t]/arclength[0,1]; note +% ** AL(0)=0, AL(1/2)=midarclength/arclength, AL(1)=1. This routine +% ** calculates an approximation to AL^{-1}(distance across/arclength), +% ** using the assumption that AL^{-1} is quadratic. Specifically, +% ** it finds t such that +% ** AL^{-1}(v) =. t = v*(\!beta + \!gamma*v) +% ** where \!beta and \!gamma are set by \!initinv, and where +% ** v=distance across/arclength +\def\!inversequad{% + \!divide\!distacross\!arclength\!dimenG% ** dimG = v = distacross/arclength + \!removept\!dimenG\!v% ** v, without "pt" + \!dimenG=\!v\!gamma% ** gamma*v + \advance\!dimenG by \!beta% ** beta + gamma*v + \!dimenG=\!v\!dimenG% ** t = v*(beta + gamma*v) + \!removept\!dimenG\!t}% ** t, without "pt" + + +% ** When w <= 1/3 or w >= 2/3, the following routine writes (using +% ** plain TEK's \wlog command) a warning message on the user's log file, +% ** and initializes for inverse linear interpolation on arc length. +\def\!setinverselinear{% + \def\!inverseinterp{\!inverselinear}% + \divide\!dimenE by 8 \!removept\!dimenE\!t + \!countC=\!intervalno \multiply \!countC 2 + \!countB=\!countC \advance \!countB -1 + \!countA=\!countB \advance \!countA -1 + \wlog{\the\!countB th point (\!xmidpt,\!ymidpt) being plotted + doesn't lie in the}% + \wlog{ middle third of the arc between the \the\!countA th + and \the\!countC th points:}% + \wlog{ [arc length \the\!countA\space to \the\!countB]/[arc length + \the \!countA\space to \the\!countC]=\!t.}% + \ignorespaces} + +% ** Inverse linear interpolation +\def\!inverselinear{% + \!divide\!distacross\!arclength\!dimenG + \!removept\!dimenG\!t} + + +% ************************************** +% ** ROTATIONS (Handles rotations) *** +% ************************************** + +% ** User commands +% ** \startrotation [by COS_OF_ANGLE SIN_OF_ANGLE] [about XPIVOT YPIVOT] +% ** \stoprotation + +% ** \startrotation [by COS_OF_ANGLE SIN_OF_ANGLE] [about XPIVOT YPIVOT] +% ** Future (XCOORD,YCOORD)'s will be rotated about (XPIVOT,YPIVOT) +% ** by the angle with the give COS and SIN. Both fields are optional. +% ** [COS,SIN] defaults to previous value, or (1,0). +% ** (XPIVOT,YPIVOT) defaults to previous value, or (0,0) +% ** You can't change the coordinate system in the scope of a rotation. +% ** See Subsection 9.1 of the manual. +\def\startrotation{% + \let\!rotateaboutpivot=\!!rotateaboutpivot + \let\!rotateonly=\!!rotateonly + \!ifnextchar{b}{\!getsincos }% + {\!getsincos by {\!cosrotationangle} {\!sinrotationangle} }} +\def\!getsincos by #1 #2 {% + \edef\!cosrotationangle{#1}% + \edef\!sinrotationangle{#2}% + \!ifcoordmode + \let\!ROnext=\!ccheckforpivot + \else + \let\!ROnext=\!dcheckforpivot + \fi + \!ROnext} +\def\!ccheckforpivot{% + \!ifnextchar{a}{\!cgetpivot}% + {\!cgetpivot about {\!xpivotcoord} {\!ypivotcoord} }} +\def\!cgetpivot about #1 #2 {% + \edef\!xpivotcoord{#1}% + \edef\!ypivotcoord{#2}% + \!xpivot=#1\!xunit \!ypivot=#2\!yunit + \ignorespaces} +\def\!dcheckforpivot{% + \!ifnextchar{a}{\!dgetpivot}{\ignorespaces}} +\def\!dgetpivot about #1 #2 {% + \!xpivot=#1\relax \!ypivot=#2\relax + \ignorespaces} + + +% ** Following terminates rotation. +% ** See Subsection 9.1 of the manual. +\def\stoprotation{% + \let\!rotateaboutpivot=\!!!rotateaboutpivot + \let\!rotateonly=\!!!rotateonly + \ignorespaces} + +% ** !!rotateaboutpivot{XREG}{YREG} +% ** XREG <-- xpvt + cos(angle)*(XREG-xpvt) - sin(angle)*(YREG-ypvt) +% ** YREG <-- ypvt + cos(angle)*(YREG-ypvt) + sin(angle)*(XREG-xpvt) +% ** XREG,YREG are dimension registers. Can't be \!dimenA to \!dimenD +\def\!!rotateaboutpivot#1#2{% + \!dimenA=#1\relax \advance\!dimenA -\!xpivot + \!dimenB=#2\relax \advance\!dimenB -\!ypivot + \!dimenC=\!cosrotationangle\!dimenA + \advance \!dimenC -\!sinrotationangle\!dimenB + \!dimenD=\!cosrotationangle\!dimenB + \advance \!dimenD \!sinrotationangle\!dimenA + \advance\!dimenC \!xpivot \advance\!dimenD \!ypivot + #1=\!dimenC #2=\!dimenD + \ignorespaces} + +% ** \!!rotateonly{XREG}{YREG} +% ** Like \!!rotateaboutpivot, but with a pivot of (0,0) +\def\!!rotateonly#1#2{% + \!dimenA=#1\relax \!dimenB=#2\relax + \!dimenC=\!cosrotationangle\!dimenA + \advance \!dimenC -\!rotsign\!sinrotationangle\!dimenB + \!dimenD=\!cosrotationangle\!dimenB + \advance \!dimenD \!rotsign\!sinrotationangle\!dimenA + #1=\!dimenC #2=\!dimenD + \ignorespaces} +\def\!rotsign{} +\def\!!!rotateaboutpivot#1#2{\relax} +\def\!!!rotateonly#1#2{\relax} +\stoprotation + +\def\!reverserotateonly#1#2{% + \def\!rotsign{-}% + \!rotateonly{#1}{#2}% + \def\!rotsign{}% + \ignorespaces} + + +% ********************************** +% *** SHADING (Handles shading) *** +% ********************************** + +% ** User commands +% ** \setshadegrid [span ] [point at XSHADE YSHADE] +% ** \setshadesymbol [] ({SHADESYMBOL} +% ** [ORIENTATION]) + +% ** Internal commands: +% ** \!startvshade (xS,ybS,ytS) +% ** \!starthshade (yS,xlS,xrS) +% ** \!lshade [] +% ** ** when shading vertically: +% ** [the region from (xS,ybS,ytS) to] (xE,ybE,ytE) +% ** ** when shading horizontally: +% ** [the region from (yS,xlS,xrS) to] (yE,xlE,xrE) +% ** \!qshade [] +% ** ** when shading vertically: +% ** [the region from (xS,ybS,ytS) to] (xM,ybM,ytM) (xE,ybE,ytE) +% ** ** when shading horizontally: +% ** [the region from (yS,xlS,xrS) to] (yM,xlM,xrM) (yE,xlE,xrE) +% ** \!lattice{ANCHOR}{SPAN}{LOCATION}{INDEX}{LATTICE LOCATION} +% ** \!override{NOMINAL DIMEN}{REPLACEMENT DIMEN}{DIMEN} + + +% ** The shading routine can operate either in a "vertical mode" or a +% ** "horizontal mode". In vertical mode, the region to be shaded is specified +% ** in the form +% ** {(x,y): xl <= x <= xr & yb(x) <= y <= yt(x)} +% ** where yb and yt are functions of x. In horizontal mode, the region +% ** is specified in the form +% ** {(x,y): yb <= y <= yt & xl(y) <= x <= xr(y)}. +% ** The functions yb and yt may be either both linear or both quadratic; +% ** similarly for xl and xr. A region with say, piecewise quadratic bottom +% ** and top boundaries, can be shaded by consecutive (vertical) \!qshades, +% ** proceeding from left to right. Similarly, a region with piecewise +% ** quadratic left and right boundaries can be shaded by consecutive +% ** (horizontal) \!qshades, proceeding from bottom to top. More complex +% ** regions can be shaded by partitioning them into appropriate subregions, +% ** and shading those. + +% ** Shading is accomplished by placing a user-selected shading symbol at +% ** those points of a regular grid which fall within the region to be +% ** shaded. This region can be "shrunk" so that a largish shading symbol +% ** will not extend outside it. Shrinking is accomplished by specifying +% ** shrinkages for the left, right, bottom, and top boundaries, in a manner +% ** discussed further below. + +% ** \shades and \!joins MUST NOT be intermingled. Finish drawing a curve +% ** before starting to shade a region, and finish shading a region before +% ** starting to draw a curve. + + +% ** \setshadegrid [span ] [point at XSHADE YSHADE] +% ** The shading symbol is placed down on the points of a grid centered +% ** at the coordinate point (XSHADE,YSHADE). The grid points are of the +% ** form (j*SPAN,k*SPAN), with j+k even. SPAN is specified +% ** as a dimension. +% ** (XSHADE,YSHADE) defaults to previous (XSHADE,YSHADE) (or (0,0) if none) +% ** SPAN defaults to previous span (or 5pt if none) +% ** See Subsection 7.2 of the manual. +\def\setshadegrid{% + \!ifnextchar{s}{\!getspan } + {\!getspan span <\!dshade>}} +\def\!getspan span <#1>{% + \!dshade=#1\relax + \!ifcoordmode + \let\!GRnext=\!GRccheckforAP + \else + \let\!GRnext=\!GRdcheckforAP + \fi + \!GRnext} +\def\!GRccheckforAP{% + \!ifnextchar{p}{\!cgetanchor } + {\!cgetanchor point at {\!xshadesave} {\!yshadesave} }} +\def\!cgetanchor point at #1 #2 {% + \edef\!xshadesave{#1}\edef\!yshadesave{#2}% + \!xshade=\!xshadesave\!xunit \!yshade=\!yshadesave\!yunit + \ignorespaces} +\def\!GRdcheckforAP{% + \!ifnextchar{p}{\!dgetanchor}% + {\ignorespaces}} +\def\!dgetanchor point at #1 #2 {% + \!xshade=#1\relax \!yshade=#2\relax + \ignorespaces} + +% ** \setshadesymbol [] ({SHADESYMBOL} +% ** [ORIENTATION]) +% ** Saves SHADESYMBOL away in an hbox for use with shading routines. +% ** A shade symbol will not be plotted if its plot position comes within +% ** distance LS of the left boundary, RS of the right boundary, TS of the +% ** top boundary, BS of the bottom boundary. These parameters have +% ** default values that should work in most cases (see below). +% ** To override a default value, specify the replacement value +% ** in the appropriate subfield of the shrinkages field. +% ** 0pt may be coded as "z" (without the quotes). To accept a +% ** default value, leave the field empty. Thus +% ** [,z,,5pt] sets LS=default, RS=0pt, BS=default, TS=5pt . +% ** Skipping the shrinkages field accepts all the defaults. +% ** See Subsection 7.1 of the manual. +\def\setshadesymbol{% + \!ifnextchar<{\!setshadesymbol}{\!setshadesymbol<,,,> }} + +\def\!setshadesymbol <#1,#2,#3,#4> (#5#6){% +% ** set the shadesymbol + \!setputobject{#5}{#6}% + \setbox\!shadesymbol=\box\!putobject% + \!shadesymbolxshift=\!xshift \!shadesymbolyshift=\!yshift +% +% ** set the shrinkages + \!dimenA=\!xshift \advance\!dimenA \!smidge% ** default LS = xshift - smidge + \!override\!dimenA{#1}\!lshrinkage% + \!dimenA=\!wd \advance \!dimenA -\!xshift% ** default RS = width - xshift + \advance\!dimenA \!smidge% - smidge + \!override\!dimenA{#2}\!rshrinkage + \!dimenA=\!dp \advance \!dimenA \!yshift% ** default BS = depth + yshift + \advance\!dimenA \!smidge% - smidge + \!override\!dimenA{#3}\!bshrinkage + \!dimenA=\!ht \advance \!dimenA -\!yshift% ** default TS = height - yshift + \advance\!dimenA \!smidge% - smidge + \!override\!dimenA{#4}\!tshrinkage + \ignorespaces} +\def\!smidge{-.2pt}% + +% ** \!override{NOMINAL DIMEN}{REPLACEMENT DIMEN}{DIMEN} +% ** Overrides the NOMINAL DIMEN by the REPLACEMENT DIMEN to produce DIMEN, +% ** according to the following rules: +% ** REPLACEMENT DIMEN empty: DIMEN <-- NOMINAL DIMEN +% ** REPLACEMENT DIMEN z: DIMEN <-- 0pt +% ** otherwise: DIMEN <-- REPLACEMENT DIMEN +% ** DIMEN must be a dimension register +\def\!override#1#2#3{% + \edef\!!override{#2}% + \ifx \!!override\empty + #3=#1\relax + \else + \if z\!!override + #3=\!zpt + \else + \ifx \!!override\!blankz + #3=\!zpt + \else + #3=#2\relax + \fi + \fi + \fi + \ignorespaces} +\def\!blankz{ z} + +\setshadesymbol ({\fiverm .})% ** initialize plotsymbol +% ** \fivesy ^^B is a small cross + + +% ** \!startvshade [at] (xS,ybS,ytS) +% ** Initiates vertical shading mode +\def\!startvshade#1(#2,#3,#4){% + \let\!!xunit=\!xunit% + \let\!!yunit=\!yunit% + \let\!!xshade=\!xshade% + \let\!!yshade=\!yshade% + \def\!getshrinkages{\!vgetshrinkages}% + \let\!setshadelocation=\!vsetshadelocation% + \!xS=\!M{#2}\!!xunit + \!ybS=\!M{#3}\!!yunit + \!ytS=\!M{#4}\!!yunit + \!shadexorigin=\!xorigin \advance \!shadexorigin \!shadesymbolxshift + \!shadeyorigin=\!yorigin \advance \!shadeyorigin \!shadesymbolyshift + \ignorespaces} + +% ** \!starthshade [at] (yS,xlS,xrS) +% ** Initiates horizontal shading mode +\def\!starthshade#1(#2,#3,#4){% + \let\!!xunit=\!yunit% + \let\!!yunit=\!xunit% + \let\!!xshade=\!yshade% + \let\!!yshade=\!xshade% + \def\!getshrinkages{\!hgetshrinkages}% + \let\!setshadelocation=\!hsetshadelocation% + \!xS=\!M{#2}\!!xunit + \!ybS=\!M{#3}\!!yunit + \!ytS=\!M{#4}\!!yunit + \!shadexorigin=\!xorigin \advance \!shadexorigin \!shadesymbolxshift + \!shadeyorigin=\!yorigin \advance \!shadeyorigin \!shadesymbolyshift + \ignorespaces} + + +% ** \!lattice{ANCHOR}{SPAN}{LOCATION}{INDEX}{LATTICE LOCATION} +% ** Consider the lattice with points ANCHOR + j*SPAN. This routine determines +% ** the index k of the smallest lattice point >= LOCATION, and sets +% ** LATTICE LOCATION = ANCHOR + k*SPAN. +% ** INDEX is assumed to be a count register, LATTICE LOCATION a dimen reg. +\def\!lattice#1#2#3#4#5{% + \!dimenA=#1% ** dimA = ANCHOR + \!dimenB=#2% ** dimB = SPAN (assumed > 0pt) + \!countB=\!dimenB% ** ctB = SPAN, as a count +% +% ** Determine index of smallest lattice point >= LOCATION + \!dimenC=#3% ** dimC = LOCATION + \advance\!dimenC -\!dimenA% ** now dimC = LOCATION-ANCHOR + \!countA=\!dimenC% ** ctA = above, as a count + \divide\!countA \!countB% ** now ctA = desired index, if dimC <= 0 + \ifdim\!dimenC>\!zpt + \!dimenD=\!countA\!dimenB% ** (tentative k)*span + \ifdim\!dimenD<\!dimenC% ** if this is false, ctA = desired index + \advance\!countA 1 % ** if true, have to add 1 + \fi + \fi +% + \!dimenC=\!countA\!dimenB% ** lattice location = anchor + ctA*span + \advance\!dimenC \!dimenA + #4=\!countA% ** the desired index + #5=\!dimenC% ** corresponding lattice location + \ignorespaces} + + +% ** \!qshade [with shrinkages] [[LS,RS,BS,TS]] +% ***** during vertical shading: +% ** [the region from (xS,ybS,ytS) to] (xM,ybM,ytM) [and] (xE,ybE,ytE) +% ** Shades the region {(x,y): xS <= x <= xE, yb(x) <= y <= yt(x)}, where +% ** yb is the quadratic thru (xS,ybS) & (xM,ybM) & (xE,ybE) +% ** yt is the quadratic thru (xS,ytS) & (xM,ybM) & (xE,ytE) +% ** xS,ybS,ytS are either given by \!startvshade or carried over +% ** as the ending values of the immediately preceding \!qshade. +% ** For the interpretation of LS, RS, BS, & TS, see \setshadesymbol. The +% ** values set there can be overridden, for the course of this \!qshade +% ** only, in the same manner as overrides are specified for +% ** \setshadesymbol. +% ***** during horizontal shading: +% ** [the region from (yS,xlS,xrS) to] (yM,xlM,xrM) [and] (yE,xlE,xrE) +\def\!qshade#1(#2,#3,#4)#5(#6,#7,#8){% + \!xM=\!M{#2}\!!xunit + \!ybM=\!M{#3}\!!yunit + \!ytM=\!M{#4}\!!yunit + \!xE=\!M{#6}\!!xunit + \!ybE=\!M{#7}\!!yunit + \!ytE=\!M{#8}\!!yunit + \!getcoeffs\!xS\!ybS\!xM\!ybM\!xE\!ybE\!ybB\!ybC%**Get coefficients B & C for + \!getcoeffs\!xS\!ytS\!xM\!ytM\!xE\!ytE\!ytB\!ytC%**y=y0 + B(x-X0) + C(x-X0)**2 + \def\!getylimits{\!qgetylimits}% + \!shade{#1}\ignorespaces} + +% ** \!lshade ... (xE,ybE,ytE) +% ** This is like \!qshade, but the top and bottom boundaries are linear, +% ** rather than quadratic. +\def\!lshade#1(#2,#3,#4){% + \!xE=\!M{#2}\!!xunit + \!ybE=\!M{#3}\!!yunit + \!ytE=\!M{#4}\!!yunit + \!dimenE=\!xE \advance \!dimenE -\!xS% ** xE-xS + \!dimenC=\!ytE \advance \!dimenC -\!ytS% ** ytE-ytS + \!divide\!dimenC\!dimenE\!ytB% ** ytB = (ytE-ytS)/(xE-xS) + \!dimenC=\!ybE \advance \!dimenC -\!ybS% ** ybE-ybS + \!divide\!dimenC\!dimenE\!ybB% ** ybB = (ybE-ybS)/(xE-xS) + \def\!getylimits{\!lgetylimits}% + \!shade{#1}\ignorespaces} + +% ** \!getcoeffs{X0}{Y0}{X1}{Y1}{X2}{Y2}{B}{C} +% ** Finds B and C such that the quadratic y = Y0 + B(x-X0) + C(x-X0)**2 +% ** passes through (X1,Y1) and (X2,Y2): when X0=0=Y0, the formulas are: +% ** B = S1 - X1*C, C = (S2-S1)/X2 +% ** with +% ** S1 = Y1/X1, S2 = (Y2-Y1)/(X2-X1). +\def\!getcoeffs#1#2#3#4#5#6#7#8{% + \!dimenC=#4\advance \!dimenC -#2% ** dimC=Y1-Y0 + \!dimenE=#3\advance \!dimenE -#1% ** dimE=X1-X0 + \!divide\!dimenC\!dimenE\!dimenF% ** dimF=S1 + \!dimenC=#6\advance \!dimenC -#4% ** dimC=Y2-Y1 + \!dimenH=#5\advance \!dimenH -#3% ** dimH=X2-X1 + \!divide\!dimenC\!dimenH\!dimenG% ** dimG=S2 + \advance\!dimenG -\!dimenF% ** dimG=S2-S1 + \advance \!dimenH \!dimenE% ** dimH=X2-X0 + \!divide\!dimenG\!dimenH#8% ** C=(S2-S1)/(X2-X0) + \!removept#8\!t% ** C, without "pt" + #7=-\!t\!dimenE% ** -C*(X1-X0) + \advance #7\!dimenF% ** B=S1-C*(X1-X0) + \ignorespaces} + + +\def\!shade#1{% +% ** Get LS,RS,BS,TS for this panel + \!getshrinkages#1<,,,>\!nil% % ** now effective LS=dimE, RS=dimF, +% ** BS=dimG, TS=dimH + \advance \!dimenE \!xS% ** now dimE=xS+LS + \!lattice\!!xshade\!dshade\!dimenE% ** set parity=index of left-mst x-lattice + \!parity\!xpos% ** point >= xS+LS, xpos=its location + \!dimenF=-\!dimenF% ** set dimF=xE-RS + \advance\!dimenF \!xE +% + \!loop\!not{\ifdim\!xpos>\!dimenF}% ** loop over x-lattice points <= xE-RS + \!shadecolumn% + \advance\!xpos \!dshade% ** move over to next column + \advance\!parity 1% ** increase index of x-point + \repeat +% + \!xS=\!xE% ** shift ending values to starting values + \!ybS=\!ybE + \!ytS=\!ytE + \ignorespaces} + + +\def\!vgetshrinkages#1<#2,#3,#4,#5>#6\!nil{% + \!override\!lshrinkage{#2}\!dimenE + \!override\!rshrinkage{#3}\!dimenF + \!override\!bshrinkage{#4}\!dimenG + \!override\!tshrinkage{#5}\!dimenH + \ignorespaces} +\def\!hgetshrinkages#1<#2,#3,#4,#5>#6\!nil{% + \!override\!lshrinkage{#2}\!dimenG + \!override\!rshrinkage{#3}\!dimenH + \!override\!bshrinkage{#4}\!dimenE + \!override\!tshrinkage{#5}\!dimenF + \ignorespaces} + + +\def\!shadecolumn{% + \!dxpos=\!xpos + \advance\!dxpos -\!xS% ** dx = x - xS + \!removept\!dxpos\!dx% ** ditto, without "pt" + \!getylimits% ** get top and bottom y-values + \advance\!ytpos -\!dimenH% ** less TS + \advance\!ybpos \!dimenG% ** plus BS + \!yloc=\!!yshade% ** get anchor point for this column + \ifodd\!parity + \advance\!yloc \!dshade + \fi + \!lattice\!yloc{2\!dshade}\!ybpos% + \!countA\!ypos% ** ypos=smallest y point for this column + \!dimenA=-\!shadexorigin \advance \!dimenA \!xpos% ** over + \loop\!not{\ifdim\!ypos>\!ytpos}% ** loop over ypos <= yt(t) + \!setshadelocation% ** vmode: xloc=xpos, yloc=ypos +% ** hmode: xloc=ypos, yloc=xpos + \!rotateaboutpivot\!xloc\!yloc% + \!dimenA=-\!shadexorigin \advance \!dimenA \!xloc% ** over + \!dimenB=-\!shadeyorigin \advance \!dimenB \!yloc% ** up + \kern\!dimenA \raise\!dimenB\copy\!shadesymbol \kern-\!dimenA + \advance\!ypos 2\!dshade + \repeat + \ignorespaces} + +\def\!qgetylimits{% + \!dimenA=\!dx\!ytC + \advance\!dimenA \!ytB% ** yt(t)=ytS + dx*(Bt + dx*Ct) + \!ytpos=\!dx\!dimenA + \advance\!ytpos \!ytS + \!dimenA=\!dx\!ybC + \advance\!dimenA \!ybB% ** yb(t)=ybS + dx*(Bb + dx*Cb) + \!ybpos=\!dx\!dimenA + \advance\!ybpos \!ybS} + +\def\!lgetylimits{% + \!ytpos=\!dx\!ytB% ** yt(t)=ytS + dx*Bt + \advance\!ytpos \!ytS + \!ybpos=\!dx\!ybB% ** yb(t)=ybS + dx*Bb + \advance\!ybpos \!ybS} + +\def\!vsetshadelocation{% ** vmode: xloc=xpos, yloc=ypos + \!xloc=\!xpos + \!yloc=\!ypos} +\def\!hsetshadelocation{% ** hmode: xloc=ypos, yloc=xpos + \!xloc=\!ypos + \!yloc=\!xpos} + + +% ************************************** +% *** TICKS (Draws ticks on graphs) *** +% ************************************** + +% ** User commands +% ** \ticksout +% ** \ticksin +% ** \gridlines +% ** \nogridlines +% ** \loggedticks +% ** \unloggesticks +% ** See Subsection 3.4 of the manual + +% ** The following is an option of the \axis command +% ** ticks +% ** [in] [out] +% ** [long] [short] [length ] +% ** [width ] +% ** [andacross] [butnotacross] +% ** [logged] [unlogged] +% ** [unlabeled] [numbered] [withvalues VALUE1 VALUE2 ... VALUEk / ] +% ** [quantity Q] [at LOC1 LOC2 ... LOCk / ] [from LOC1 to LOC2 by +% ** LOC_INCREMENT] +% ** See Subsection 3.2 of the manual for the rules. + +% ** The various options of the tick field are processed by the +% ** \!nextkeyword command defined below. +% ** For example, `\!nextkeyword short ' expands to `\!ticksshort', +% ** while `\!nextkeyword withvalues' expands to `\!tickswithvalues'. + +\def\!axisticks {% + \def\!nextkeyword##1 {% + \expandafter\ifx\csname !ticks##1\endcsname \relax + \def\!next{\!fixkeyword{##1}}% + \else + \def\!next{\csname !ticks##1\endcsname}% + \fi + \!next}% + \!axissetup + \def\!axissetup{\relax}% + \edef\!ticksinoutsign{\!ticksinoutSign}% + \!ticklength=\longticklength + \!tickwidth=\linethickness + \!gridlinestatus + \!setticktransform + \!maketick + \!tickcase=0 + \def\!LTlist{}% + \!nextkeyword} + +\def\ticksout{% + \def\!ticksinoutSign{+}} +\def\ticksin{% + \def\!ticksinoutSign{-}} +\ticksout + +\def\gridlines{% + \def\!gridlinestatus{\!gridlinestootrue}} +\def\nogridlines{% + \def\!gridlinestatus{\!gridlinestoofalse}} +\nogridlines + +\def\loggedticks{% + \def\!setticktransform{\let\!ticktransform=\!logten}} +\def\unloggedticks{% + \def\!setticktransform{\let\!ticktransform=\!donothing}} +\def\!donothing#1#2{\def#2{#1}} +\unloggedticks + +% ** \!ticks/ : terminates read of tick options +\expandafter\def\csname !ticks/\endcsname{% + \!not {\ifx \!LTlist\empty} + \!placetickvalues + \fi + \def\!tickvalueslist{}% + \def\!LTlist{}% + \expandafter\csname !axis/\endcsname} + +\def\!maketick{% + \setbox\!boxA=\hbox{% + \beginpicture + \!setdimenmode + \setcoordinatesystem point at {\!zpt} {\!zpt} + \linethickness=\!tickwidth + \ifdim\!ticklength>\!zpt + \putrule from {\!zpt} {\!zpt} to + {\!ticksinoutsign\!tickxsign\!ticklength} + {\!ticksinoutsign\!tickysign\!ticklength} + \fi + \if!gridlinestoo + \putrule from {\!zpt} {\!zpt} to + {-\!tickxsign\!xaxislength} {-\!tickysign\!yaxislength} + \fi + \endpicturesave <\!Xsave,\!Ysave>}% + \wd\!boxA=\!zpt} + +\def\!ticksin{% + \def\!ticksinoutsign{-}% + \!maketick + \!nextkeyword} + +\def\!ticksout{% + \def\!ticksinoutsign{+}% + \!maketick + \!nextkeyword} + +\def\!tickslength<#1> {% + \!ticklength=#1\relax + \!maketick + \!nextkeyword} + +\def\!tickslong{% + \!tickslength<\longticklength> } + +\def\!ticksshort{% + \!tickslength<\shortticklength> } + +\def\!tickswidth<#1> {% + \!tickwidth=#1\relax + \!maketick + \!nextkeyword} + +\def\!ticksandacross{% + \!gridlinestootrue + \!maketick + \!nextkeyword} + +\def\!ticksbutnotacross{% + \!gridlinestoofalse + \!maketick + \!nextkeyword} + +\def\!tickslogged{% + \let\!ticktransform=\!logten + \!nextkeyword} + +\def\!ticksunlogged{% + \let\!ticktransform=\!donothing + \!nextkeyword} + +\def\!ticksunlabeled{% + \!tickcase=0 + \!nextkeyword} + +\def\!ticksnumbered{% + \!tickcase=1 + \!nextkeyword} + +\def\!tickswithvalues#1/ {% + \edef\!tickvalueslist{#1! /}% + \!tickcase=2 + \!nextkeyword} + +\def\!ticksquantity#1 {% + \ifnum #1>1 + \!updatetickoffset + \!countA=#1\relax + \advance \!countA -1 + \!ticklocationincr=\!axisLength + \divide \!ticklocationincr \!countA + \!ticklocation=\!axisstart + \loop \!not{\ifdim \!ticklocation>\!axisend} + \!placetick\!ticklocation + \ifcase\!tickcase + \relax % Case 0: no labels + \or + \relax % Case 1: numbered -- not available here + \or + \expandafter\!gettickvaluefrom\!tickvalueslist + \edef\!tickfield{{\the\!ticklocation}{\!value}}% + \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist% + \fi + \advance \!ticklocation \!ticklocationincr + \repeat + \fi + \!nextkeyword} + +\def\!ticksat#1 {% + \!updatetickoffset + \edef\!Loc{#1}% + \if /\!Loc + \def\next{\!nextkeyword}% + \else + \!ticksincommon + \def\next{\!ticksat}% + \fi + \next} + +\def\!ticksfrom#1 to #2 by #3 {% + \!updatetickoffset + \edef\!arg{#3}% + \expandafter\!separate\!arg\!nil + \!scalefactor=1 + \expandafter\!countfigures\!arg/ + \edef\!arg{#1}% + \!scaleup\!arg by\!scalefactor to\!countE + \edef\!arg{#2}% + \!scaleup\!arg by\!scalefactor to\!countF + \edef\!arg{#3}% + \!scaleup\!arg by\!scalefactor to\!countG + \loop \!not{\ifnum\!countE>\!countF} + \ifnum\!scalefactor=1 + \edef\!Loc{\the\!countE}% + \else + \!scaledown\!countE by\!scalefactor to\!Loc + \fi + \!ticksincommon + \advance \!countE \!countG + \repeat + \!nextkeyword} + +\def\!updatetickoffset{% + \!dimenA=\!ticksinoutsign\!ticklength + \ifdim \!dimenA>\!offset + \!offset=\!dimenA + \fi} + +\def\!placetick#1{% + \if!xswitch + \!xpos=#1\relax + \!ypos=\!axisylevel + \else + \!xpos=\!axisxlevel + \!ypos=#1\relax + \fi + \advance\!xpos \!Xsave + \advance\!ypos \!Ysave + \kern\!xpos\raise\!ypos\copy\!boxA\kern-\!xpos + \ignorespaces} + +\def\!gettickvaluefrom#1 #2 /{% + \edef\!value{#1}% + \edef\!tickvalueslist{#2 /}% + \ifx \!tickvalueslist\!endtickvaluelist + \!tickcase=0 + \fi} +\def\!endtickvaluelist{! /} + +\def\!ticksincommon{% + \!ticktransform\!Loc\!t + \!ticklocation=\!t\!!unit + \advance\!ticklocation -\!!origin + \!placetick\!ticklocation + \ifcase\!tickcase + \relax % Case 0: no labels + \or % Case 1: numbered + \ifdim\!ticklocation<-\!!origin + \edef\!Loc{$\!Loc$}% + \fi + \edef\!tickfield{{\the\!ticklocation}{\!Loc}}% + \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist% + \or % Case 2: labeled + \expandafter\!gettickvaluefrom\!tickvalueslist + \edef\!tickfield{{\the\!ticklocation}{\!value}}% + \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist% + \fi} + +\def\!separate#1\!nil{% + \!ifnextchar{-}{\!!separate}{\!!!separate}#1\!nil} +\def\!!separate-#1\!nil{% + \def\!sign{-}% + \!!!!separate#1..\!nil} +\def\!!!separate#1\!nil{% + \def\!sign{+}% + \!!!!separate#1..\!nil} +\def\!!!!separate#1.#2.#3\!nil{% + \def\!arg{#1}% + \ifx\!arg\!empty + \!countA=0 + \else + \!countA=\!arg + \fi + \def\!arg{#2}% + \ifx\!arg\!empty + \!countB=0 + \else + \!countB=\!arg + \fi} + +\def\!countfigures#1{% + \if #1/% + \def\!next{\ignorespaces}% + \else + \multiply\!scalefactor 10 + \def\!next{\!countfigures}% + \fi + \!next} + +\def\!scaleup#1by#2to#3{% + \expandafter\!separate#1\!nil + \multiply\!countA #2\relax + \advance\!countA \!countB + \if -\!sign + \!countA=-\!countA + \fi + #3=\!countA + \ignorespaces} + +\def\!scaledown#1by#2to#3{% + \!countA=#1\relax% ** get original # + \ifnum \!countA<0 % ** take abs value, + \def\!sign{-}% ** remember sign + \!countA=-\!countA + \else + \def\!sign{}% + \fi + \!countB=\!countA% ** copy |#| + \divide\!countB #2\relax% ** integer part (|#|/sf) + \!countC=\!countB% ** get sf * (|#|/sf) + \multiply\!countC #2\relax + \advance \!countA -\!countC% ** ctA is now remainder + \edef#3{\!sign\the\!countB.}% ** +- integerpart. + \!countC=\!countA % ** Tack on proper number + \ifnum\!countC=0 % ** of zeros after . + \!countC=1 + \fi + \multiply\!countC 10 + \!loop \ifnum #2>\!countC + \edef#3{#3\!zero}% + \multiply\!countC 10 + \repeat + \edef#3{#3\the\!countA}% ** Add on rest of remainder + \ignorespaces} + +\def\!placetickvalues{% + \advance\!offset \tickstovaluesleading + \if!xswitch + \setbox\!boxA=\hbox{% + \def\\##1##2{% + \!dimenput {##2} [B] (##1,\!axisylevel)}% + \beginpicture + \!LTlist + \endpicturesave <\!Xsave,\!Ysave>}% + \!dimenA=\!axisylevel + \advance\!dimenA -\!Ysave + \advance\!dimenA \!tickysign\!offset + \if -\!tickysign + \advance\!dimenA -\ht\!boxA + \else + \advance\!dimenA \dp\!boxA + \fi + \advance\!offset \ht\!boxA + \advance\!offset \dp\!boxA + \!dimenput {\box\!boxA} [Bl] <\!Xsave,\!Ysave> (\!zpt,\!dimenA) + \else + \setbox\!boxA=\hbox{% + \def\\##1##2{% + \!dimenput {##2} [r] (\!axisxlevel,##1)}% + \beginpicture + \!LTlist + \endpicturesave <\!Xsave,\!Ysave>}% + \!dimenA=\!axisxlevel + \advance\!dimenA -\!Xsave + \advance\!dimenA \!tickxsign\!offset + \if -\!tickxsign + \advance\!dimenA -\wd\!boxA + \fi + \advance\!offset \wd\!boxA + \!dimenput {\box\!boxA} [Bl] <\!Xsave,\!Ysave> (\!dimenA,\!zpt) + \fi} + + +\normalgraphs + +% \catcode`!=12 % ***** THIS MUST NEVER BE OMITTED + +\protect \endinput diff --git a/tex/context/base/thrd-pic.tex b/tex/context/base/thrd-pic.tex deleted file mode 100644 index 3c25d8a81..000000000 --- a/tex/context/base/thrd-pic.tex +++ /dev/null @@ -1,3694 +0,0 @@ -% Since this file is not available in every distribution, we -% have copied the original in this file. The manuals to -% Wichura's PiCTeX and TaBlE packages are not available on -% line and are distributed by respectively the TeX Users Group -% and Personal TeX Inc. - -% We've patched this file for catcode ! because in luatex we use -% catcode tables and using unprotect/protect is cleaner. - -% This is PiCTeX, Version 1.1 9/21/87 - -% CAVEAT: The PiCTeX manual often has a more lucid explanation -% of any given topic than you will find in the internal documentation -% of the macros. - -% PiCTeX's commands can be classified into two groups: (1) public (or -% external), and (2) private (or internal). The public macros are -% discussed at length in the manual. The only discussion of the private -% macros is the internal documentation. The private macros all have -% names beginning with an exclamation point (!) of category code 11. -% Since in normal usage "!" has category code 12, these macros can't -% be accessed or modified by the general user. - -% The macros are organized into thematically related groups. For example, -% the macros dealing with dots & dashes are all in the DASHPATTERN group. -% The table below shows which macros are in which groups. The table -% covers all public macros, and many (but not all) of PiCTeX's upper level -% private macros. Following the table, the various groups are listed -% in the order in which they appear in the table. - -% *********************** TABLE OF GROUPS OF MACROS ********************** - -% HACKS: Utility macros -% \PiC -% \PiCTeX -% \placevalueinpts -% \!!loop -% \!cfor -% \!copylist -% \!ecfor -% \!etfor -% \!getnext -% \!getnextvalueof -% \!ifempty -% \!ifnextchar -% \!leftappend -% \!listaddon -% \!loop -% \!lop -% \!mlap -% \!not -% \!removept -% \!rightappend -% \!tfor -% \!vmlap -% \!wlet - -% ALLOCATION: Allocates registers - -% AREAS: Deals with plot areas -% \axis -% \grid -% \invisibleaxes -% \normalgraphs -% \plotheading -% \setplotarea -% \visibleaxes - -% ARROWS: Draws arrows -% \arrow -% \betweenarrows - -% BARS: Draws bars -% \putbar -% \setbars - -% BOXES: Draws rectangles -% \frame -% \putrectangle -% \rectangle -% \shaderectangleson -% \shaderectanglesoff - -% CURVES: Upper level plot commands -% \hshade -% \plot -% \sethistograms -% \setlinear -% \setquadratic -% \vshade - -% DASHPATTERNS: Sets up dash patterns -% \findlength -% \setdashes -% \setdashesnear -% \setdashpattern -% \setdots -% \setdotsnear -% \setsolid -% \!dashingoff -% \!dashingon - -% DIVISION: Does long division of dimension registers -% \Divide -% \!divide - -% ELLIPSES: Draws ellipses and circles -% \circulararc -% \ellipticalarc - -% RULES: Draws rules, i.e., horizontal & vertical lines -% \putrule -% \!putdashedhline -% \!putdashedvline -% \!puthline -% \!putsolidhline -% \!putsolidvline -% \!putvline - -% LINEAR ARC: Draws straight lines -- solid and dashed -% \inboundscheckoff -% \inboundscheckon -% \!advancedashing -% \!drawlinearsegment -% \!initinboundscheck -% \!linearsolid -% \!lineardashed -% \!ljoin -% \!plotifinbounds -% \!start - -% LOGTEN: Log_10 function -% \!logten - -% PICTURES: Basic setups for PiCtures; \put commands -% \accountingoff -% \accountingon -% \beginpicture -% \endpicture -% \endpicturesave -% \lines -% \multiput -% \put -% \setcoordinatemode -% \setcoordinatesystem -% \setdimensionmode -% \stack -% \Lines -% \Xdistance -% \Ydistance -% \!dimenput -% \!ifcoordmode -% \!ifdimenmode -% \!setcoordmode -% \!setdimenmode -% \!setputobject - -% PLOTTING: Things to do with plotting -% \dontsavelinesandcurves -% \replot -% \savelinesandcurves -% \setplotsymbol -% \writesavefile -% \!plot - -% PYTHAGORAS: Euclidean distance function -% \placehypotenuse -% \!Pythag - -% QUADRATIC ARC: Draws a quadratic arc -% \!qjoin - -% ROTATIONS: Handles rotations -% \startrotation -% \stoprotation -% \!rotateaboutpivot -% \!rotateonly - -% SHADING: Handles shading -% \setshadegrid -% \setshadesymbol -% \!lshade -% \!qshade -% \!starthshade -% \!startvshade - -% TICKS: Draws ticks on graphs -% \gridlines -% \loggedticks -% \nogridlines -% \ticksin -% \ticksout -% \unloggesticks - -% ***************** END OF TABLE OF GROUPS OF MACROS ******************** - - -% \catcode`!=11 % ***** THIS MUST NEVER BE OMITTED - -\unprotect - -% ******************************* -% *** HACKS (Utility macros) *** -% ******************************* - -% ** User commands -% ** \PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC} -% ** \PiCTeX{\PiC\kern-.11em\TeX} -% ** \placevalueinpts of in {CONTROL SEQUENCE} - -% ** Internal commands -% ** \!ifnextchar{CHARACTER}{TRUE ACTION}{FALSE ACTION} -% ** \!tfor NAME := LIST \do {BODY} -% ** \!etfor NAME:= LIST \do {BODY} -% ** \!cfor NAME := LIST \do {BODY} -% ** \!ecfor NAME:= LIST \do {BODY} -% ** \!ifempty{MACRO}{TRUE ACTION}{FALSE ACTION} -% ** \!getnext\\ITEMfrom\LIST -% ** \!getnextvalueof\DIMEN\from\LIST -% ** \!copylist\LISTMACRO_A\to\LISTMACRO_B -% ** \!wlet\CONTROL_SEQUENCE_A=\CONTROL_SEQUENCE_B -% ** \!listaddon ITEM LIST -% ** \!rightappendITEM\withCS\to\LISTMACRO -% ** \!leftappendITEM\withCS\to\LISTMACRO -% ** \!lop\LISTMACRO\to\ITEM -% ** \!loop ... repeat -% ** \!!loop ... repeat -% ** \!removept{DIMENSION REGISTER}{CONTROL SEQUENCE} -% ** \!mlap{...} -% ** \!vmlap{...} -% ** \!not{TEK if-CONDITION} - -% ** First, here are the the PiCTeX logo, and the syllable PiC: -\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC} -\def\PiCTeX{\PiC\kern-.11em\TeX} - -% ** The following macro expands to parameter #2 or parameter #3 according to -% ** whether the next non-blank character following the macro is or is not #1. -% ** Blanks following the macro are gobbled. -\def\!ifnextchar#1#2#3{% - \let\!testchar=#1% - \def\!first{#2}% - \def\!second{#3}% - \futurelet\!nextchar\!testnext} -\def\!testnext{% - \ifx \!nextchar \!spacetoken - \let\!next=\!skipspacetestagain - \else - \ifx \!nextchar \!testchar - \let\!next=\!first - \else - \let\!next=\!second - \fi - \fi - \!next} -\def\\{\!skipspacetestagain} - \expandafter\def\\ {\futurelet\!nextchar\!testnext} -\def\\{\let\!spacetoken= } \\ % ** set \spacetoken to a space token - - -% ** Borrow the "tfor" macro from Latex: -% ** \!tfor NAME := LIST \do {BODY} -% ** if, before expansion, LIST = T1 ... Tn, where each Ti is a token -% ** or {...}, then executes BODY n times, with NAME = Ti on the -% ** i-th iteration. Works for n=0. -\def\!tfor#1:=#2\do#3{% - \edef\!fortemp{#2}% - \ifx\!fortemp\!empty - \else - \!tforloop#2\!nil\!nil\!!#1{#3}% - \fi} -\def\!tforloop#1#2\!!#3#4{% - \def#3{#1}% - \ifx #3\!nnil - \let\!nextwhile=\!fornoop - \else - #4\relax - \let\!nextwhile=\!tforloop - \fi - \!nextwhile#2\!!#3{#4}} - - -% ** \!etfor NAME:= LIST\do {BODY} -% ** This is like \!cfor, but LIST is any balanced token list whose complete -% ** expansion has the form T1 ... Tn -\def\!etfor#1:=#2\do#3{% - \def\!!tfor{\!tfor#1:=}% - \edef\!!!tfor{#2}% - \expandafter\!!tfor\!!!tfor\do{#3}} - - -% ** modify the Latex \tfor (token-for) loop to a \cfor (comma-for) loop. -% ** \!cfor NAME := LIST \do {BODY} -% ** if, before expansion, LIST = a1,a2,...an, then executes BODY n times, -% ** with NAME = ai on the i-th iteration. Works for n=0. -\def\!cfor#1:=#2\do#3{% - \edef\!fortemp{#2}% - \ifx\!fortemp\!empty - \else - \!cforloop#2,\!nil,\!nil\!!#1{#3}% - \fi} -\def\!cforloop#1,#2\!!#3#4{% - \def#3{#1}% - \ifx #3\!nnil - \let\!nextwhile=\!fornoop - \else - #4\relax - \let\!nextwhile=\!cforloop - \fi - \!nextwhile#2\!!#3{#4}} - - -% ** \!ecfor NAME:= LIST\do {BODY} -% ** This is like \!cfor, but LIST is any balanced token list whose complete -% ** expansion has the form a1,a2,...,an. -\def\!ecfor#1:=#2\do#3{% - \def\!!cfor{\!cfor#1:=}% - \edef\!!!cfor{#2}% - \expandafter\!!cfor\!!!cfor\do{#3}} - - -\def\!empty{} -\def\!nnil{\!nil} -\def\!fornoop#1\!!#2#3{} - - -% ** \!ifempty{ARG}{TRUE ACTION}{FALSE ACTION} -\def\!ifempty#1#2#3{% - \edef\!emptyarg{#1}% - \ifx\!emptyarg\!empty - #2% - \else - #3% - \fi} - -% ** \!getnext\\ITEMfrom\LIST -% ** \LIST has the form \\{item1}\\{item2}\\{item3}...\\{itemk} -% ** This routine sets \ITEM to item1, and cycles \LIST to -% ** \\{item2}\\{item3}...\\{itemk}\\{item1} -\def\!getnext#1\from#2{% - \expandafter\!gnext#2\!#1#2}% -\def\!gnext\\#1#2\!#3#4{% - \def#3{#1}% - \def#4{#2\\{#1}}% - \ignorespaces} - - -% ** \!getnextvalueof\DIMEN\from\LIST -% ** Similar to !getnext. -% ** \LIST has the form \\{dimen1}\\{dimen2}\\{dimen3} ... -% ** \DIMEN is a dimension register -% ** Works also for counts -% -\def\!getnextvalueof#1\from#2{% - \expandafter\!gnextv#2\!#1#2}% -\def\!gnextv\\#1#2\!#3#4{% - #3=#1% - \def#4{#2\\{#1}}% - \ignorespaces} - - -% ** \!copylist\LISTMACROA\to\LISTMACROB -% ** makes the replacement text of LISTMACRO B identical to that of -% ** list macro A. -\def\!copylist#1\to#2{% - \expandafter\!!copylist#1\!#2} -\def\!!copylist#1\!#2{% - \def#2{#1}\ignorespaces} - - -% ** \!wlet\CSA=\CSB -% ** lets control sequence \CSB = control sequence \CSA, and writes a -% ** message to that effect in the log file using plain TEK's \wlog -\def\!wlet#1=#2{% - \let#1=#2 - \wlog{\string#1=\string#2}} - -% ** \!listaddon ITEM LIST -% ** LIST <-- LIST \\ ITEM -\def\!listaddon#1#2{% - \expandafter\!!listaddon#2\!{#1}#2} -\def\!!listaddon#1\!#2#3{% - \def#3{#1\\#2}} - -% ** \!rightappendITEM\to\LISTMACRO -% ** \LISTMACRO --> \LISTMACRO\\{ITEM} -%\def\!rightappend#1\to#2{\expandafter\!!rightappend#2\!{#1}#2} -%\def\!!rightappend#1\!#2#3{\def#3{#1\\{#2}}} - - -% ** \!rightappendITEM\withCS\to\LISTMACRO -% ** \LISTMACRO --> \LISTMACRO||CS||{ITEM} -\def\!rightappend#1\withCS#2\to#3{\expandafter\!!rightappend#3\!#2{#1}#3} -\def\!!rightappend#1\!#2#3#4{\def#4{#1#2{#3}}} - - -% ** \!leftappendITEM\withCS\to\LISTMACRO -% ** \LISTMACRO --> CS||{ITEM}||\LISTMACRO -\def\!leftappend#1\withCS#2\to#3{\expandafter\!!leftappend#3\!#2{#1}#3} -\def\!!leftappend#1\!#2#3#4{\def#4{#2{#3}#1}} - - -% ** \!lop\LISTMACRO\to\ITEM -% ** \\{item1}\\{item2}\\{item3} ... --> \\{item2}\\{item3} ... -% ** item1 --> \ITEM -\def\!lop#1\to#2{\expandafter\!!lop#1\!#1#2} -\def\!!lop\\#1#2\!#3#4{\def#4{#1}\def#3{#2}} - - -% ** \!placeNUMBER\of\LISTMACRO\in\ITEM -% ** the NUMBERth item of \LISTMACRO --> replacement text of \ITEM -%\def\!place#1\of#2\in#3{\def#3{\outofrange}% -%{\count0=#1\def\\##1{\advance\count0-1 \ifnum\count0=0 \gdef#3{##1}\fi}#2}} - - -% ** Following code converts a commalist to a list macro, with all items -% ** fully expanded. -%\!ecfor\item:=\commalist\do{\expandafter\!rightappend\item\to\list} - - -% ** \!loop ... repeat -% ** This is exactly like TEX's \loop ... repeat. It can be used in nesting -% ** two loops, without puting the inner one inside a group. -\def\!loop#1\repeat{\def\!body{#1}\!iterate} -\def\!iterate{\!body\let\!next=\!iterate\else\let\!next=\relax\fi\!next} - -% ** \!!loop ... repeat -% ** This is exactly like TEX's \loop ... repeat. It can be used in nesting -% ** two loops, without puting the inner one inside a group. -\def\!!loop#1\repeat{\def\!!body{#1}\!!iterate} -\def\!!iterate{\!!body\let\!!next=\!!iterate\else\let\!!next=\relax\fi\!!next} -% (\multiput uses \!!loop) - -% ** \!removept{DIMENREG}{\CS} -% ** Defines the control sequence CS to be the value (in points) in the -% ** dimension register DIMENREG (but without the "pt" TEK usually adds) -% ** E.g., after \dimen0=12.3pt \!removept\dimen0\A, \A expands to 12.3 -\def\!removept#1#2{\edef#2{\expandafter\!!removePT\the#1}} -{\catcode`p=12 \catcode`t=12 \gdef\!!removePT#1pt{#1}} - -% ** \pladevalueinpts of in {CONTROL SEQUENCE} -\def\placevalueinpts of <#1> in #2 {% - \!removept{#1}{#2}} - -% ** \!mlap{...} \!vmlap{...} -% ** Center ... in a box of width 0. -\def\!mlap#1{\hbox to 0pt{\hss#1\hss}} -\def\!vmlap#1{\vbox to 0pt{\vss#1\vss}} - -% ** \!not{TEK if-CONDITION} -% ** By a TEK if-CONDITION is meant something like -% ** \ifnum\N<0, or \ifdim\A>\B -% ** \!not produces an if-condition which is false if the original condition -% ** is true, and true if the original condition is false. -\def\!not#1{% - #1\relax - \!switchfalse - \else - \!switchtrue - \fi - \if!switch - \ignorespaces} - - -% ******************* -% *** ALLOCATIONS *** -% ******************* - -% This section allocates all the registers PiCTeX uses. Following -% each allocation is a string of the form ....N.D...L......... ; -% the various letters show which sections of PiCTeX make explicit -% reference to that register, according to the following code: - -% H Hacks -% A Areas -% W arroWs -% B Bars -% X boXes -% C Curves -% D Dashpattterns -% V diVision -% E Ellipses -% U rUles -% L Linear arc -% G loGten -% P Pictures -% O plOtting -% Y pYthagoras -% Q Quadratic arc -% R Rotations -% S Shading -% T Ticks - -% Turn off messages from TeX's allocation macros -\let\!!!wlog=\wlog % "\wlog" is defined in plain TeX -\def\wlog#1{} - -\newdimen\headingtoplotskip %.A................. -\newdimen\linethickness %.A..X....U........T -\newdimen\longticklength %.A................T -\newdimen\plotsymbolspacing %......D...L....Q... -\newdimen\shortticklength %.A................T -\newdimen\stackleading %.A..........P...... -\newdimen\tickstovaluesleading %.A................T -\newdimen\totalarclength %......D...L....Q... -\newdimen\valuestolabelleading %.A................. - -\newbox\!boxA %.AW...............T -\newbox\!boxB %..W................ -\newbox\!picbox %............P...... -\newbox\!plotsymbol %..........L..O..... -\newbox\!putobject %............PO...S. -\newbox\!shadesymbol %.................S. - -\newcount\!countA %.A....D..UL....Q.ST -\newcount\!countB %......D..U.....Q.ST -\newcount\!countC %...............Q..T -\newcount\!countD %................... -\newcount\!countE %.............O....T -\newcount\!countF %.............O....T -\newcount\!countG %..................T -\newcount\!fiftypt %.........U......... -\newcount\!intervalno %..........L....Q... -\newcount\!npoints %..........L........ -\newcount\!nsegments %.........U......... -\newcount\!ntemp %............P...... -\newcount\!parity %.................S. -\newcount\!scalefactor %..................T -\newcount\!tfs %.......V........... -\newcount\!tickcase %..................T - -\newdimen\!Xleft %............P...... -\newdimen\!Xright %............P...... -\newdimen\!Xsave %.A................T -\newdimen\!Ybot %............P...... -\newdimen\!Ysave %.A................T -\newdimen\!Ytop %............P...... -\newdimen\!angle %........E.......... -\newdimen\!arclength %..W......UL....Q... -\newdimen\!areabloc %.A........L........ -\newdimen\!arealloc %.A........L........ -\newdimen\!arearloc %.A........L........ -\newdimen\!areatloc %.A........L........ -\newdimen\!bshrinkage %.................S. -\newdimen\!checkbot %..........L........ -\newdimen\!checkleft %..........L........ -\newdimen\!checkright %..........L........ -\newdimen\!checktop %..........L........ -\newdimen\!dimenA %.AW.X.DVEUL..OYQRST -\newdimen\!dimenB %....X.DVEU...O.QRS. -\newdimen\!dimenC %..W.X.DVEU......RS. -\newdimen\!dimenD %..W.X.DVEU....Y.RS. -\newdimen\!dimenE %..W........G..YQ.S. -\newdimen\!dimenF %...........G..YQ.S. -\newdimen\!dimenG %...........G..YQ.S. -\newdimen\!dimenH %...........G..Y..S. -\newdimen\!dimenI %...BX.........Y.... -\newdimen\!distacross %..........L....Q... -\newdimen\!downlength %..........L........ -\newdimen\!dp %.A..X.......P....S. -\newdimen\!dshade %.................S. -\newdimen\!dxpos %..W......U..P....S. -\newdimen\!dxprime %...............Q... -\newdimen\!dypos %..WB.....U..P...... -\newdimen\!dyprime %...............Q... -\newdimen\!ht %.A..X.......P....S. -\newdimen\!leaderlength %......D..U......... -\newdimen\!lshrinkage %.................S. -\newdimen\!midarclength %...............Q... -\newdimen\!offset %.A................T -\newdimen\!plotheadingoffset %.A................. -\newdimen\!plotsymbolxshift %..........L..O..... -\newdimen\!plotsymbolyshift %..........L..O..... -\newdimen\!plotxorigin %..........L..O..... -\newdimen\!plotyorigin %..........L..O..... -\newdimen\!rootten %...........G....... -\newdimen\!rshrinkage %.................S. -\newdimen\!shadesymbolxshift %.................S. -\newdimen\!shadesymbolyshift %.................S. -\newdimen\!tenAa %...........G....... -\newdimen\!tenAc %...........G....... -\newdimen\!tenAe %...........G....... -\newdimen\!tshrinkage %.................S. -\newdimen\!uplength %..........L........ -\newdimen\!wd %....X.......P....S. -\newdimen\!wmax %...............Q... -\newdimen\!wmin %...............Q... -\newdimen\!xB %...............Q... -\newdimen\!xC %...............Q... -\newdimen\!xE %..W.....E.L....Q.S. -\newdimen\!xM %..W.....E......Q.S. -\newdimen\!xS %..W.....E.L....Q.S. -\newdimen\!xaxislength %.A................T -\newdimen\!xdiff %..........L........ -\newdimen\!xleft %............P...... -\newdimen\!xloc %..WB.....U.......S. -\newdimen\!xorigin %.A........L.P....S. -\newdimen\!xpivot %................R.. -\newdimen\!xpos %..........L.P..Q.ST -\newdimen\!xprime %...............Q... -\newdimen\!xright %............P...... -\newdimen\!xshade %.................S. -\newdimen\!xshift %..W.........PO...S. -\newdimen\!xtemp %............P...... -\newdimen\!xunit %.AWBX...EUL.P..QRS. -\newdimen\!xxE %........E.......... -\newdimen\!xxM %........E.......... -\newdimen\!xxS %........E.......... -\newdimen\!xxloc %..WB....EU......... -\newdimen\!yB %...............Q... -\newdimen\!yC %...............Q... -\newdimen\!yE %..W.....E.L....Q... -\newdimen\!yM %..W.....E......Q... -\newdimen\!yS %..W.....E.L....Q... -\newdimen\!yaxislength %.A................T -\newdimen\!ybot %............P...... -\newdimen\!ydiff %..........L........ -\newdimen\!yloc %..WB.....U.......S. -\newdimen\!yorigin %.A........L.P....S. -\newdimen\!ypivot %................R.. -\newdimen\!ypos %..........L.P..Q.ST -\newdimen\!yprime %...............Q... -\newdimen\!yshade %.................S. -\newdimen\!yshift %..W.........PO...S. -\newdimen\!ytemp %............P...... -\newdimen\!ytop %............P...... -\newdimen\!yunit %.AWBX...EUL.P..QRS. -\newdimen\!yyE %........E.......... -\newdimen\!yyM %........E.......... -\newdimen\!yyS %........E.......... -\newdimen\!yyloc %..WB....EU......... -\newdimen\!zpt %.AWBX.DVEULGP.YQ.ST - -\newif\if!axisvisible %.A................. -\newif\if!gridlinestoo %..................T -\newif\if!keepPO %................... -\newif\if!placeaxislabel %.A................. -\newif\if!switch %H.................. -\newif\if!xswitch %.A................T - -\newtoks\!axisLaBeL %.A................. -\newtoks\!keywordtoks %.A................. - -\newwrite\!replotfile %.............O..... - -\newhelp\!keywordhelp{The keyword mentioned in the error message in unknown. -Replace NEW KEYWORD in the indicated response by the keyword that -should have been specified.} %.A................. - -% The following commands assign alternate names to some of the -% above registers. "\!wlet" is defined in Hacks. -\!wlet\!!origin=\!xM %.A................T -\!wlet\!!unit=\!uplength %.A................T -\!wlet\!Lresiduallength=\!dimenG %.........U......... -\!wlet\!Rresiduallength=\!dimenF %.........U......... -\!wlet\!axisLength=\!distacross %.A................T -\!wlet\!axisend=\!ydiff %.A................T -\!wlet\!axisstart=\!xdiff %.A................T -\!wlet\!axisxlevel=\!arclength %.A................T -\!wlet\!axisylevel=\!downlength %.A................T -\!wlet\!beta=\!dimenE %...............Q... -\!wlet\!gamma=\!dimenF %...............Q... -\!wlet\!shadexorigin=\!plotxorigin %.................S. -\!wlet\!shadeyorigin=\!plotyorigin %.................S. -\!wlet\!ticklength=\!xS %..................T -\!wlet\!ticklocation=\!xE %..................T -\!wlet\!ticklocationincr=\!yE %..................T -\!wlet\!tickwidth=\!yS %..................T -\!wlet\!totalleaderlength=\!dimenE %.........U......... -\!wlet\!xone=\!xprime %....X.............. -\!wlet\!xtwo=\!dxprime %....X.............. -\!wlet\!ySsave=\!yM %................... -\!wlet\!ybB=\!yB %.................S. -\!wlet\!ybC=\!yC %.................S. -\!wlet\!ybE=\!yE %.................S. -\!wlet\!ybM=\!yM %.................S. -\!wlet\!ybS=\!yS %.................S. -\!wlet\!ybpos=\!yyloc %.................S. -\!wlet\!yone=\!yprime %....X.............. -\!wlet\!ytB=\!xB %.................S. -\!wlet\!ytC=\!xC %.................S. -\!wlet\!ytE=\!downlength %.................S. -\!wlet\!ytM=\!arclength %.................S. -\!wlet\!ytS=\!distacross %.................S. -\!wlet\!ytpos=\!xxloc %.................S. -\!wlet\!ytwo=\!dyprime %....X.............. - - -% Initial values for registers -\!zpt=0pt % static -\!xunit=1pt -\!yunit=1pt -\!arearloc=\!xunit -\!areatloc=\!yunit -\!dshade=5pt -\!leaderlength=24in -\!tfs=256 % static -\!wmax=5.3pt % static -\!wmin=2.7pt % static -\!xaxislength=\!xunit -\!xpivot=\!zpt -\!yaxislength=\!yunit -\!ypivot=\!zpt -\plotsymbolspacing=.4pt - \!dimenA=50pt \!fiftypt=\!dimenA % static - -\!rootten=3.162278pt % static -\!tenAa=8.690286pt % static (A5) -\!tenAc=2.773839pt % static (A3) -\!tenAe=2.543275pt % static (A1) - -% Initial values for control sequences -\def\!cosrotationangle{1} %................R.. -\def\!sinrotationangle{0} %................R.. -\def\!xpivotcoord{0} %................R.. -\def\!xref{0} %............P...... -\def\!xshadesave{0} %.................S. -\def\!ypivotcoord{0} %................R.. -\def\!yref{0} %............P...... -\def\!yshadesave{0} %.................S. -\def\!zero{0} %..................T - -% Reset TeX to report allocations -\let\wlog=\!!!wlog -% ************************************* -% *** AREAS: Deals with plot areas *** -% ************************************* -% -% ** User commands -% ** \setplotarea x from LEFT XCOORD to RIGTH XCOORD, y from BOTTOM YCOORD -% ** to TOP YCOORD -% ** \axis BOTTOM-LEFT-TOP-RIGHT [SHIFTEDTO xy=COORD] [VISIBLE-INVISIBLE] -% ** [LABEL {label}] [TICKS] / -% ** \visibleaxes -% ** \invisibleaxes -% ** \plotheading {HEADING} -% ** \grid {# of columns} {# of rows} -% ** \normalgraphs - -% ** \normalgraphs -% ** Sets defaults for graph setup. See Subsection 3.4 of manual. -\def\normalgraphs{% - \longticklength=.4\baselineskip - \shortticklength=.25\baselineskip - \tickstovaluesleading=.25\baselineskip - \valuestolabelleading=.8\baselineskip - \linethickness=.4pt - \stackleading=.17\baselineskip - \headingtoplotskip=1.5\baselineskip - \visibleaxes - \ticksout - \nogridlines - \unloggedticks} -% -% ** \setplotarea x from LEFT XCOORD to RIGTH XCOORD, y from BOTTOM YCOORD -% ** to TOP YCOORD -% ** Reserves space in PICBOX for a rectangular box with the indicated -% ** coordinates. Must be specified before calls to \axis, -% ** \grid, \plotheading. -% ** See Subsection 3.1 of the manual. -\def\setplotarea x from #1 to #2, y from #3 to #4 {% - \!arealloc=\!M{#1}\!xunit \advance \!arealloc -\!xorigin - \!areabloc=\!M{#3}\!yunit \advance \!areabloc -\!yorigin - \!arearloc=\!M{#2}\!xunit \advance \!arearloc -\!xorigin - \!areatloc=\!M{#4}\!yunit \advance \!areatloc -\!yorigin - \!initinboundscheck - \!xaxislength=\!arearloc \advance\!xaxislength -\!arealloc - \!yaxislength=\!areatloc \advance\!yaxislength -\!areabloc - \!plotheadingoffset=\!zpt - \!dimenput {{\setbox0=\hbox{}\wd0=\!xaxislength\ht0=\!yaxislength\box0}} - [bl] (\!arealloc,\!areabloc)} -% -% ** \visibleaxes, \invisibleaxes -% ** Switches for setting visibility of subsequent axes. -% ** See Subsection 3.2 of the manual. -\def\visibleaxes{% - \def\!axisvisibility{\!axisvisibletrue}} -\def\invisibleaxes{% - \def\!axisvisibility{\!axisvisiblefalse}} -% -% ** The next few macros enable the user to fix up an erroneous keyword -% ** in the \axis command. -% \newhelp is in ALLOCATIONS -% \newhelp\!keywordhelp{The keyword mentioned in the error message in unknown. -% Replace NEW KEYWORD in the indicated response by the keyword that -% should have been specified.} - -\def\!fixkeyword#1{% - \errhelp=\!keywordhelp - \errmessage{Unrecognized keyword `#1': \the\!keywordtoks{NEW KEYWORD}'}} - -% \newtoks\!keywordtoks In ALLOCATIONS. -\!keywordtoks={enter `i\fixkeyword} - -\def\fixkeyword#1{% - \!nextkeyword#1 } - -% ** \axis BOTTOM-LEFT-TOP-RIGHT [SHIFTEDTO xy=COORD] [VISIBLE-INVISIBLE] -% ** [LABEL {label}] [TICKS] / -% ** Exactly one of the keywords BOTTOM, LEFT, TOP, RIGHT must be -% ** specified. Axis is drawn along the indicated edge of the current -% ** plot area, shifted if the SHIFTEDTO option is used, visible or -% ** invisible according the selected option, with an optional LABEL, -% ** and optional TICKS (see ticks.tex for the options avialabel with -% ** TICKS). The TICKS option must be the last one specified. The \axis -% ** MUST be terminated with a / followed by a space. -% ** See Subsection 3.2 of the manual for more information. - -% ** The various options of the \axis command are processed by the -% ** \!nextkeyword macro defined below. For example, -% ** `\!nextkeyword shiftedto ' expands to `\!axisshiftedto'. -\def\axis {% - \def\!nextkeyword##1 {% - \expandafter\ifx\csname !axis##1\endcsname \relax - \def\!next{\!fixkeyword{##1}}% - \else - \def\!next{\csname !axis##1\endcsname}% - \fi - \!next}% - \!offset=\!zpt - \!axisvisibility - \!placeaxislabelfalse - \!nextkeyword} - -% ** This and the various macros that follow handle the keyword -% ** specifications on the \axis command -% ** See Subsection 3.2 of the manual. -\def\!axisbottom{% - \!axisylevel=\!areabloc - \def\!tickxsign{0}% - \def\!tickysign{-}% - \def\!axissetup{\!axisxsetup}% - \def\!axislabeltbrl{t}% - \!nextkeyword} - -\def\!axistop{% - \!axisylevel=\!areatloc - \def\!tickxsign{0}% - \def\!tickysign{+}% - \def\!axissetup{\!axisxsetup}% - \def\!axislabeltbrl{b}% - \!nextkeyword} - -\def\!axisleft{% - \!axisxlevel=\!arealloc - \def\!tickxsign{-}% - \def\!tickysign{0}% - \def\!axissetup{\!axisysetup}% - \def\!axislabeltbrl{r}% - \!nextkeyword} - -\def\!axisright{% - \!axisxlevel=\!arearloc - \def\!tickxsign{+}% - \def\!tickysign{0}% - \def\!axissetup{\!axisysetup}% - \def\!axislabeltbrl{l}% - \!nextkeyword} - -\def\!axisshiftedto#1=#2 {% - \if 0\!tickxsign - \!axisylevel=\!M{#2}\!yunit - \advance\!axisylevel -\!yorigin - \else - \!axisxlevel=\!M{#2}\!xunit - \advance\!axisxlevel -\!xorigin - \fi - \!nextkeyword} - -\def\!axisvisible{% - \!axisvisibletrue - \!nextkeyword} - -\def\!axisinvisible{% - \!axisvisiblefalse - \!nextkeyword} - -\def\!axislabel#1 {% - \!axisLaBeL={#1}% - \!placeaxislabeltrue - \!nextkeyword} - -\expandafter\def\csname !axis/\endcsname{% - \!axissetup % This could done already by "ticks"; if so, now \relax - \if!placeaxislabel - \!placeaxislabel - \fi - \if +\!tickysign % ** (A "top" axis) - \!dimenA=\!axisylevel - \advance\!dimenA \!offset % ** dimA = top of the axis structure - \advance\!dimenA -\!areatloc % ** dimA = excess over the plot area - \ifdim \!dimenA>\!plotheadingoffset - \!plotheadingoffset=\!dimenA % ** Greatest excess over the plot area - \fi - \fi} - -% ** \grid {c} {r} -% ** Partitions the plot area into c columns and r rows; see Subsection 3.3 -% ** of the manual. -% ** (Other grid patterns can be drawn with the TICKS option of the \axis -% ** command. -\def\grid #1 #2 {% - \!countA=#1\advance\!countA 1 - \axis bottom invisible ticks length <\!zpt> andacross quantity {\!countA} / - \!countA=#2\advance\!countA 1 - \axis left invisible ticks length <\!zpt> andacross quantity {\!countA} / } - -% ** \plotheading{HEADING} -% ** Places HEADING centered above the top of the plotarea (and above -% ** any top axis ticks marks, tick labels, and axis label); see -% ** Subsection 3.3 of the manual. -\def\plotheading#1 {% - \advance\!plotheadingoffset \headingtoplotskip - \!dimenput {#1} [B] <.5\!xaxislength,\!plotheadingoffset> - (\!arealloc,\!areatloc)} - -% ** From here on, the routines are internal. -\def\!axisxsetup{% - \!axisxlevel=\!arealloc - \!axisstart=\!arealloc - \!axisend=\!arearloc - \!axisLength=\!xaxislength - \!!origin=\!xorigin - \!!unit=\!xunit - \!xswitchtrue - \if!axisvisible - \!makeaxis - \fi} - -\def\!axisysetup{% - \!axisylevel=\!areabloc - \!axisstart=\!areabloc - \!axisend=\!areatloc - \!axisLength=\!yaxislength - \!!origin=\!yorigin - \!!unit=\!yunit - \!xswitchfalse - \if!axisvisible - \!makeaxis - \fi} - -\def\!makeaxis{% - \setbox\!boxA=\hbox{% (Make a pseudo-y[x] tick for an x[y]-axis) - \beginpicture - \!setdimenmode - \setcoordinatesystem point at {\!zpt} {\!zpt} - \putrule from {\!zpt} {\!zpt} to - {\!tickysign\!tickysign\!axisLength} - {\!tickxsign\!tickxsign\!axisLength} - \endpicturesave <\!Xsave,\!Ysave>}% - \wd\!boxA=\!zpt - \!placetick\!axisstart} - -\def\!placeaxislabel{% - \advance\!offset \valuestolabelleading - \if!xswitch - \!dimenput {\the\!axisLaBeL} [\!axislabeltbrl] - <.5\!axisLength,\!tickysign\!offset> (\!axisxlevel,\!axisylevel) - \advance\!offset \!dp % ** advance offset by the "tallness" - \advance\!offset \!ht % ** of the label - \else - \!dimenput {\the\!axisLaBeL} [\!axislabeltbrl] - <\!tickxsign\!offset,.5\!axisLength> (\!axisxlevel,\!axisylevel) - \fi - \!axisLaBeL={}} - - -% ******************************* -% *** ARROWS (Draws arrows) *** -% ******************************* -% -% ** User commands -% ** \arrow [MID FRACTION, BASE FRACTION] -% ** [] from XFROM YFROM to XTO YTO -% ** \betweenarrows {TEXT} [orientation & shift] from XFROM YFROM to XTO YTO - -% ** \arrow [MID FRACTION, BASE FRACTION] -% ** [] from XFROM YFROM to XTO YTO -% ** Draws an arrow from (XFROM,YFROM) to (XTO,YTO). The arrow head -% ** is constructed two quadratic arcs, which extend back a distance -% ** ARROW HEAD LENGTH (a dimension) on both sides of the arrow shaft. -% ** All the way back the arcs are a distance BASE FRACTION*ARROW HEAD -% ** LENGTH apart, while half-way back they are a distance MID FRACTION* -% ** ARROW HEAD LENGTH apart. is optional, and has -% ** its usual interpreation. See Subsection 5.4 of the manual. - -\def\arrow <#1> [#2,#3]{% - \!ifnextchar<{\!arrow{#1}{#2}{#3}}{\!arrow{#1}{#2}{#3}<\!zpt,\!zpt> }} - -\def\!arrow#1#2#3<#4,#5> from #6 #7 to #8 #9 {% -% -% ** convert to dimensions - \!xloc=\!M{#8}\!xunit - \!yloc=\!M{#9}\!yunit - \!dxpos=\!xloc \!dimenA=\!M{#6}\!xunit \advance \!dxpos -\!dimenA - \!dypos=\!yloc \!dimenA=\!M{#7}\!yunit \advance \!dypos -\!dimenA - \let\!MAH=\!M% ** save current c/d mode - \!setdimenmode% ** go into dimension mode -% - \!xshift=#4\relax \!yshift=#5\relax% ** pick up shift - \!reverserotateonly\!xshift\!yshift% ** back rotate shift - \advance\!xshift\!xloc \advance\!yshift\!yloc -% -% ** draw shaft of arrow - \!xS=-\!dxpos \advance\!xS\!xshift - \!yS=-\!dypos \advance\!yS\!yshift - \!start (\!xS,\!yS) - \!ljoin (\!xshift,\!yshift) -% -% ** find 32*cosine and 32*sine of angle of rotation - \!Pythag\!dxpos\!dypos\!arclength - \!divide\!dxpos\!arclength\!dxpos - \!dxpos=32\!dxpos \!removept\!dxpos\!!cos - \!divide\!dypos\!arclength\!dypos - \!dypos=32\!dypos \!removept\!dypos\!!sin -% -% ** construct arrowhead - \!halfhead{#1}{#2}{#3}% ** draw half of arrow head - \!halfhead{#1}{-#2}{-#3}% ** draw other half -% - \let\!M=\!MAH% ** restore old c/d mode - \ignorespaces} -% -% ** draw half of arrow head - \def\!halfhead#1#2#3{% - \!dimenC=-#1% - \divide \!dimenC 2 % ** half way back - \!dimenD=#2\!dimenC% ** half the mid width - \!rotate(\!dimenC,\!dimenD)by(\!!cos,\!!sin)to(\!xM,\!yM) - \!dimenC=-#1% ** all the way back - \!dimenD=#3\!dimenC - \!dimenD=.5\!dimenD% ** half the full width - \!rotate(\!dimenC,\!dimenD)by(\!!cos,\!!sin)to(\!xE,\!yE) - \!start (\!xshift,\!yshift) - \advance\!xM\!xshift \advance\!yM\!yshift - \advance\!xE\!xshift \advance\!yE\!yshift - \!qjoin (\!xM,\!yM) (\!xE,\!yE) - \ignorespaces} - - -% ** \betweenarrows {TEXT} [orientation & shift] from XFROM YFROM to XTO YTO -% ** Makes things like <--- text --->, using arrow heads from TeX's fonts. -% ** See Subsection 5.4 of the manual. -\def\betweenarrows #1#2 from #3 #4 to #5 #6 {% - \!xloc=\!M{#3}\!xunit \!xxloc=\!M{#5}\!xunit% - \!yloc=\!M{#4}\!yunit \!yyloc=\!M{#6}\!yunit% - \!dxpos=\!xxloc \advance\!dxpos by -\!xloc - \!dypos=\!yyloc \advance\!dypos by -\!yloc - \advance\!xloc .5\!dxpos - \advance\!yloc .5\!dypos -% - \let\!MBA=\!M% ** save current coord\dimen mode - \!setdimenmode% ** express locations in dimens - \ifdim\!dypos=\!zpt - \ifdim\!dxpos<\!zpt \!dxpos=-\!dxpos \fi - \put {\!lrarrows{\!dxpos}{#1}}#2{} at {\!xloc} {\!yloc} - \else - \ifdim\!dxpos=\!zpt - \ifdim\!dypos<\!zpt \!dypos=-\!zpt \fi - \put {\!udarrows{\!dypos}{#1}}#2{} at {\!xloc} {\!yloc} - \fi - \fi - \let\!M=\!MBA% ** restore previous c/d mode - \ignorespaces} - -% ** Subroutine for left-right between arrows -\def\!lrarrows#1#2{% #1=width, #2=text - {\setbox\!boxA=\hbox{$\mkern-2mu\mathord-\mkern-2mu$}% - \setbox\!boxB=\hbox{$\leftarrow$}\!dimenE=\ht\!boxB - \setbox\!boxB=\hbox{}\ht\!boxB=2\!dimenE - \hbox to #1{$\mathord\leftarrow\mkern-6mu - \cleaders\copy\!boxA\hfil - \mkern-6mu\mathord-$% - \kern.4em $\vcenter{\box\!boxB}$$\vcenter{\hbox{#2}}$\kern.4em - $\mathord-\mkern-6mu - \cleaders\copy\!boxA\hfil - \mkern-6mu\mathord\rightarrow$}}} - -% ** Subroutine for up-down between arrows -\def\!udarrows#1#2{% #1=width, #2=text - {\setbox\!boxB=\hbox{#2}% - \setbox\!boxA=\hbox to \wd\!boxB{\hss$\vert$\hss}% - \!dimenE=\ht\!boxA \advance\!dimenE \dp\!boxA \divide\!dimenE 2 - \vbox to #1{\offinterlineskip - \vskip .05556\!dimenE - \hbox to \wd\!boxB{\hss$\mkern.4mu\uparrow$\hss}\vskip-\!dimenE - \cleaders\copy\!boxA\vfil - \vskip-\!dimenE\copy\!boxA - \vskip\!dimenE\copy\!boxB\vskip.4em - \copy\!boxA\vskip-\!dimenE - \cleaders\copy\!boxA\vfil - \vskip-\!dimenE \hbox to \wd\!boxB{\hss$\mkern.4mu\downarrow$\hss} - \vskip .05556\!dimenE}}} - - -% *************************** -% *** BARS (Draws bars) *** -% *************************** -% -% ** User commands: -% ** \putbar [] breadth from XSTART YSTART -% ** to XEND YEND -% ** \setbars [] breadth baseline at XY = COORD -% ** [baselabels ([B_ORIENTATION_x,B_ORIENTATION_y] )] -% ** [endlabels ([E_ORIENTATION_x,E_ORIENTATION_y] )] - - -% ** \putbar [] breadth from XSTART YSTART -% ** to XEND YEND -% ** Either XSTART=XEND or YSTART=YEND. Draws a rectangle between -% ** (XSTART,YSTART) & (XEND,YEND). The "depth" of the rectangle -% ** is determined by those two plot positions; its other -% ** dimension "breadth" is specified by the dimension BREADTH. -% ** See Subsection 4.2 of the manual. -\def\putbar#1breadth <#2> from #3 #4 to #5 #6 {% - \!xloc=\!M{#3}\!xunit \!xxloc=\!M{#5}\!xunit% - \!yloc=\!M{#4}\!yunit \!yyloc=\!M{#6}\!yunit% - \!dypos=\!yyloc \advance\!dypos by -\!yloc - \!dimenI=#2 -% - \ifdim \!dimenI=\!zpt % ** If 0 breadth - \putrule#1from {#3} {#4} to {#5} {#6} % ** Then draw line - \else % ** Else, put in a rectangle - \let\!MBar=\!M% ** save current c/d mode - \!setdimenmode % ** go into dimension mode - \divide\!dimenI 2 - \ifdim \!dypos=\!zpt - \advance \!yloc -\!dimenI % ** Equal y coordinates - \advance \!yyloc \!dimenI - \else - \advance \!xloc -\!dimenI % ** Equal x coordinates - \advance \!xxloc \!dimenI - \fi - \putrectangle#1corners at {\!xloc} {\!yloc} and {\!xxloc} {\!yyloc} - \let\!M=\!MBar % ** restore c/d mode - \fi - \ignorespaces} - - -% ** \setbars [] breadth baseline at XY = COORD -% ** [baselabels ([B_ORIENTATION_x,B_ORIENTATION_y] )] -% ** [endlabels ([E_ORIENTATION_x,E_ORIENTATION_y] )] -% ** This command puts PiCTeX into the bar graph drawing mode described -% ** in Subsection 4.4 of the manual. -\def\setbars#1breadth <#2> baseline at #3 = #4 {% - \edef\!barshift{#1}% - \edef\!barbreadth{#2}% - \edef\!barorientation{#3}% - \edef\!barbaseline{#4}% - \def\!bardobaselabel{\!bardoendlabel}% - \def\!bardoendlabel{\!barfinish}% - \let\!drawcurve=\!barcurve - \!setbars} -\def\!setbars{% - \futurelet\!nextchar\!!setbars} -\def\!!setbars{% - \if b\!nextchar - \def\!!!setbars{\!setbarsbget}% - \else - \if e\!nextchar - \def\!!!setbars{\!setbarseget}% - \else - \def\!!!setbars{\relax}% - \fi - \fi - \!!!setbars} -\def\!setbarsbget baselabels (#1) {% - \def\!barbaselabelorientation{#1}% - \def\!bardobaselabel{\!!bardobaselabel}% - \!setbars} -\def\!setbarseget endlabels (#1) {% - \edef\!barendlabelorientation{#1}% - \def\!bardoendlabel{\!!bardoendlabel}% - \!setbars} - -% ** \!barcurve -% ** Draws a bargraph with preset values of barshift, barbreadth, -% ** barorientation (x or y) and barbaseline (coordinate) -\def\!barcurve #1 #2 {% - \if y\!barorientation - \def\!basexarg{#1}% - \def\!baseyarg{\!barbaseline}% - \else - \def\!basexarg{\!barbaseline}% - \def\!baseyarg{#2}% - \fi - \expandafter\putbar\!barshift breadth <\!barbreadth> from {\!basexarg} - {\!baseyarg} to {#1} {#2} - \def\!endxarg{#1}% - \def\!endyarg{#2}% - \!bardobaselabel} - -\def\!!bardobaselabel "#1" {% - \put {#1}\!barbaselabelorientation{} at {\!basexarg} {\!baseyarg} - \!bardoendlabel} - -\def\!!bardoendlabel "#1" {% - \put {#1}\!barendlabelorientation{} at {\!endxarg} {\!endyarg} - \!barfinish} - -\def\!barfinish{% - \!ifnextchar/{\!finish}{\!barcurve}} - - -% ******************************** -% *** BOXES (Draws rectangles) *** -% ******************************** -% -% ** User commands: -% ** \putrectangle [] corners at XCOORD1 YCOORD1 -% ** and XCOORD2 YCOORD2 -% ** \shaderectangleson -% ** \shaderectanglesoff -% ** \frame [] {TEXT} -% ** \rectangle -% -% -% ** \putrectangle [] corners at XCOORD1 YCOORD1 -% ** and XCOORD2 YCOORD2 -% ** Draws a rectangle with corners at (X1,Y1), (X2,Y1), (X1,Y2), (X2,Y2) -% ** Lines have thickness \linethickness, and overlap at the corners. -% ** The optional field functions as with a \put command. -% ** See Subsection 4.2 of the manual. -\def\putrectangle{% - \!ifnextchar<{\!putrectangle}{\!putrectangle<\!zpt,\!zpt> }} -\def\!putrectangle<#1,#2> corners at #3 #4 and #5 #6 {% -% -% ** get locations - \!xone=\!M{#3}\!xunit \!xtwo=\!M{#5}\!xunit% - \!yone=\!M{#4}\!yunit \!ytwo=\!M{#6}\!yunit% - \ifdim \!xtwo<\!xone - \!dimenI=\!xone \!xone=\!xtwo \!xtwo=\!dimenI - \fi - \ifdim \!ytwo<\!yone - \!dimenI=\!yone \!yone=\!ytwo \!ytwo=\!dimenI - \fi - \!dimenI=#1\relax \advance\!xone\!dimenI \advance\!xtwo\!dimenI - \!dimenI=#2\relax \advance\!yone\!dimenI \advance\!ytwo\!dimenI - \let\!MRect=\!M% ** save current coord/dimen mode - \!setdimenmode -% -% ** shade rectangle if appropriate - \!shaderectangle -% -% ** draw horizontal edges - \!dimenI=.5\linethickness - \advance \!xone -\!dimenI% ** adjust x-location to overlap corners - \advance \!xtwo \!dimenI% ** ditto - \putrule from {\!xone} {\!yone} to {\!xtwo} {\!yone} - \putrule from {\!xone} {\!ytwo} to {\!xtwo} {\!ytwo} -% -% ** draw vertical edges - \advance \!xone \!dimenI% ** restore original x-values - \advance \!xtwo -\!dimenI% - \advance \!yone -\!dimenI% ** adjust y-location to overlap corners - \advance \!ytwo \!dimenI% ** ditto - \putrule from {\!xone} {\!yone} to {\!xone} {\!ytwo} - \putrule from {\!xtwo} {\!yone} to {\!xtwo} {\!ytwo} -% - \let\!M=\!MRect% ** restore coord/dimen mode - \ignorespaces} - -% ** \shaderectangleson -% ** Subsequent rectangles will be shaded according to -% ** the current shading pattern. Affects \putrectangle, \putbar, -% ** \frame, \sethistograms, and \setbars. See Subsection 7.5 of the manual. -\def\shaderectangleson{% - \def\!shaderectangle{\!!shaderectangle}% - \ignorespaces} -% ** \shaderectanglesoff -% ** Suppresses \shaderectangleson. The default. -\def\shaderectanglesoff{% - \def\!shaderectangle{}% - \ignorespaces} - -\shaderectanglesoff - -% ** The following internal routine shades the current rectangle, when -% ** \!shaderectangle = \!!shaderectangle . -\def\!!shaderectangle{% - \!dimenA=\!xtwo \advance \!dimenA -\!xone - \!dimenB=\!ytwo \advance \!dimenB -\!yone - \ifdim \!dimenA<\!dimenB - \!startvshade (\!xone,\!yone,\!ytwo) - \!lshade (\!xtwo,\!yone,\!ytwo) - \else - \!starthshade (\!yone,\!xone,\!xtwo) - \!lshade (\!ytwo,\!xone,\!xtwo) - \fi - \ignorespaces} - -% ** \frame [] {TEXT} -% ** Draws a frame of thickness linethickness about the box enclosing -% ** TEXT; the frame is separated from the box by a distance of -% ** SEPARATION. The result is an hbox with the same baseline as TEXT. -% ** If is omitted, you get the effect of <0pt>. -% ** See Subsection 4.2 of the manual. -\def\frame{% - \!ifnextchar<{\!frame}{\!frame<\!zpt> }} -\long\def\!frame<#1> #2{% - \beginpicture - \setcoordinatesystem units <1pt,1pt> point at 0 0 - \put {#2} [Bl] at 0 0 - \!dimenA=#1\relax - \!dimenB=\!wd \advance \!dimenB \!dimenA - \!dimenC=\!ht \advance \!dimenC \!dimenA - \!dimenD=\!dp \advance \!dimenD \!dimenA - \let\!MFr=\!M - \!setdimenmode - \putrectangle corners at {-\!dimenA} {-\!dimenD} and {\!dimenB} {\!dimenC} - \!setcoordmode - \let\!M=\!MFr - \endpicture - \ignorespaces} - -% ** \rectangle -% ** Constructs a rectangle of width WIDTH and heigth HEIGHT. -% ** See Subsection 4.2 of the manual. -\def\rectangle <#1> <#2> {% - \setbox0=\hbox{}\wd0=#1\ht0=#2\frame {\box0}} - - -% ********************************************* -% *** CURVES (Upper level \plot commands) *** -% ********************************************* -% -% ** User commands -% ** \plot DATA / -% ** \plot "FILE NAME" -% ** \setquadratic -% ** \setlinear -% ** \sethistograms -% ** \vshade ... -% ** \hshade ... - -% \plot: multi-purpose command. Draws histograms, bar graphs, piecewise-linear -% or piecewise quadratic curves, depending on the setting of \!drawcurve. -% See Subsections 4.3-4.5, 5.1, 5.2 of the manual. -\def\plot{% - \!ifnextchar"{\!plotfromfile}{\!drawcurve}} -\def\!plotfromfile"#1"{% - \expandafter\!drawcurve \normalinput #1 /} - -% Command to set piecewise quadratic mode -% See Subsections 5.1, 7.3, and 7.4 of the manual. -\def\setquadratic{% - \let\!drawcurve=\!qcurve - \let\!!Shade=\!!qShade - \let\!!!Shade=\!!!qShade} - -% Command to set piecewise linear mode -% See Subsections 5.1, 7.3, and 7.4 of the manual. -\def\setlinear{% - \let\!drawcurve=\!lcurve - \let\!!Shade=\!!lShade - \let\!!!Shade=\!!!lShade} - -% Command to set histogram mode -% See Subsection 4.3 of the manual. -\def\sethistograms{% - \let\!drawcurve=\!hcurve} - -% Commands to cycle through list of coordinates in piecewise quadratic -% interpolation mode -\def\!qcurve #1 #2 {% - \!start (#1,#2) - \!Qjoin} -\def\!Qjoin#1 #2 #3 #4 {% - \!qjoin (#1,#2) (#3,#4) % \!qjoin is defined in QUADRATIC - \!ifnextchar/{\!finish}{\!Qjoin}} - -% Commands to cycle through list of coordinates in piecewise linear -% interpolation mode -\def\!lcurve #1 #2 {% - \!start (#1,#2) - \!Ljoin} -\def\!Ljoin#1 #2 {% - \!ljoin (#1,#2) % \!ljoin is defined in LINEAR - \!ifnextchar/{\!finish}{\!Ljoin}} - -\def\!finish/{\ignorespaces} - -% Command to cycle through list of coordinates in histogram mode -\def\!hcurve #1 #2 {% - \edef\!hxS{#1}% - \edef\!hyS{#2}% - \!hjoin} -\def\!hjoin#1 #2 {% - \putrectangle corners at {\!hxS} {\!hyS} and {#1} {#2} - \edef\!hxS{#1}% - \!ifnextchar/{\!finish}{\!hjoin}} - - -% \vshade: See Subsection 7.3 of the manual. -\def\vshade #1 #2 #3 {% - \!startvshade (#1,#2,#3) - \!Shadewhat} - -% \hshade: See Subsection 7.4 of the manual. -\def\hshade #1 #2 #3 {% - \!starthshade (#1,#2,#3) - \!Shadewhat} - -% Commands to cycle through coordinates and optional "edge effect" -% fields while shading. -\def\!Shadewhat{% - \futurelet\!nextchar\!Shade} -\def\!Shade{% - \if <\!nextchar - \def\!nextShade{\!!Shade}% - \else - \if /\!nextchar - \def\!nextShade{\!finish}% - \else - \def\!nextShade{\!!!Shade}% - \fi - \fi - \!nextShade} -\def\!!lShade<#1> #2 #3 #4 {% - \!lshade <#1> (#2,#3,#4) % \!lshade is defined in SHADING - \!Shadewhat} -\def\!!!lShade#1 #2 #3 {% - \!lshade (#1,#2,#3) - \!Shadewhat} -\def\!!qShade<#1> #2 #3 #4 #5 #6 #7 {% - \!qshade <#1> (#2,#3,#4) (#5,#6,#7) % \!qshade is defined in SHADING - \!Shadewhat} -\def\!!!qShade#1 #2 #3 #4 #5 #6 {% - \!qshade (#1,#2,#3) (#4,#5,#6) - \!Shadewhat} - -% ** Set default interpolation mode -\setlinear - - -% ******************************************** -% *** DASHPATTERNS (Sets up dash patterns) *** -% ******************************************** - -% ** User commands: -% ** \setdashpattern -% ** \setdots -% ** \setdotsnear for -% ** \setdashes -% ** \setdashesnear for -% ** \setsolid -% ** \findlength {CURVE CMDS} - -% ** Internal commands: -% ** \!dashingon -% ** \!dashingoff - -% ** Dash patterns are specified by a balanced token list whose complete -% ** expansion has the form: DIMEN1,DIMEN2,DIMEN3,DIMEN4,... ; this produces -% ** an arc of length DIMEN1, a skip of length DIMEN2, an arc of length -% ** DIMEN3, a skip of length DIMEN4, ... . Any number of DIMEN values may -% ** be given. The pattern is repeated as many times (perhaps fractional) -% ** as necessary to draw the curve. -% ** A dash pattern remains in effect until it is overridden by a call to -% ** \setdashpattern, or to \setdots, \setdotsnear ... , \setdashes, -% ** \setdashesnear ... , or \setsolid. -% ** Solid lines are the default. - - -% ** \def\setdashpattern -% ** The following routine converts a balanced list of tokens whose -% ** complete expansion has the form DIMEN1,DIMEN2, ... , DIMENk into -% ** three list macros that are used in drawing dashed rules and curves: -% ** !Flist: \!Rule{DIMEN1}\!Skip{DIMEN2}\!Rule{DIMEN3}\!Skip{DIMEN4} ... -% ** !Blist: ...\!Skip{DIMEN4}\!Rule{DIMEN3}\!Skip{DIMEN2}\!Rule{DIMEN1} -% ** !UDlist: \\{DIMEN1}\\{DIMEN2}\\{DIMEN3}\\{DIMEN4} ...; -% ** calculates \!leaderlength := DIMEN1 + ... + DIMENk; and -% ** sets the curve drawing routines to dash mode. -% ** Those lists are used by the curve drawing routines. -% ** Dimenj ... may be given as an explicit dimension (e.g., 5pt), or -% ** as an expression involving a dimension register (e.g., -2.5\dimen0). -% ** See Subsection 6.2 of the manual -\def\setdashpattern <#1>{% - \def\!Flist{}\def\!Blist{}\def\!UDlist{}% - \!countA=0 - \!ecfor\!item:=#1\do{% - \!dimenA=\!item\relax - \expandafter\!rightappend\the\!dimenA\withCS{\\}\to\!UDlist% - \advance\!countA 1 - \ifodd\!countA - \expandafter\!rightappend\the\!dimenA\withCS{\!Rule}\to\!Flist% - \expandafter\!leftappend\the\!dimenA\withCS{\!Rule}\to\!Blist% - \else - \expandafter\!rightappend\the\!dimenA\withCS{\!Skip}\to\!Flist% - \expandafter\!leftappend\the\!dimenA\withCS{\!Skip}\to\!Blist% - \fi}% - \!leaderlength=\!zpt - \def\!Rule##1{\advance\!leaderlength ##1}% - \def\!Skip##1{\advance\!leaderlength ##1}% - \!Flist% - \ifdim\!leaderlength>\!zpt - \else - \def\!Flist{\!Skip{24in}}\def\!Blist{\!Skip{24in}}\ignorespaces - \def\!UDlist{\\{\!zpt}\\{24in}}\ignorespaces - \!leaderlength=24in - \fi - \!dashingon} - - -% ** \!dashingon -- puts the curve drawing routines into dash mode -% ** \!dashingoff -- puts the curve drawing routines into solid mode -% ** These are internal commands, invoked by \setdashpattern and \setsolid -\def\!dashingon{% - \def\!advancedashing{\!!advancedashing}% - \def\!drawlinearsegment{\!lineardashed}% - \def\!puthline{\!putdashedhline}% - \def\!putvline{\!putdashedvline}% -% \def\!putsline{\!putdashedsline}% - \ignorespaces}% -\def\!dashingoff{% - \def\!advancedashing{\relax}% - \def\!drawlinearsegment{\!linearsolid}% - \def\!puthline{\!putsolidhline}% - \def\!putvline{\!putsolidvline}% -% \def\!putsline{\!putsolidsline}% - \ignorespaces} - - -% ** \setdots -- sets up a dot/skip pattern where dot (actually -% ** the current plotsymbol) is plunked down once for every LENGTH -% ** traveled along the curve. LENGTH defaults to 5pt. -% ** See Subsection 6.1 of the manual. -\def\setdots{% - \!ifnextchar<{\!setdots}{\!setdots<5pt>}} -\def\!setdots<#1>{% - \!dimenB=#1\advance\!dimenB -\plotsymbolspacing - \ifdim\!dimenB<\!zpt - \!dimenB=\!zpt - \fi -\setdashpattern <\plotsymbolspacing,\!dimenB>} - -% ** \setdotsnear for -% ** sets up a dot pattern where the dots are approximately LENGTH apart, -% ** the total length of the pattern is ARC LENGTH, and the pattern -% ** begins and ends with a dot. See Subsection 6.3 of the manual. -\def\setdotsnear <#1> for <#2>{% - \!dimenB=#2\relax \advance\!dimenB -.05pt - \!dimenC=#1\relax \!countA=\!dimenC - \!dimenD=\!dimenB \advance\!dimenD .5\!dimenC \!countB=\!dimenD - \divide \!countB \!countA - \ifnum 1>\!countB - \!countB=1 - \fi - \divide\!dimenB \!countB - \setdots <\!dimenB>} - -% ** \setdashes -- sets up a dash/skip pattern where the dash -% ** and the skip are each of length LENGTH (the dash is formed by -% ** plunking down the current plotsymbol over an arc of length LENGTH -% ** and so may actually be longer than LENGTH. LENGTH defaults to 5pt. -% ** See Subsection 6.1 of the manual. -\def\setdashes{% - \!ifnextchar<{\!setdashes}{\!setdashes<5pt>}} -\def\!setdashes<#1>{\setdashpattern <#1,#1>} - -% ** \setdashesnear ... -% ** Like \setdotsnear; the pattern begins and ends with a dash. -% ** See Subsection 6.3 of the manual. -\def\setdashesnear <#1> for <#2>{% - \!dimenB=#2\relax - \!dimenC=#1\relax \!countA=\!dimenC - \!dimenD=\!dimenB \advance\!dimenD .5\!dimenC \!countB=\!dimenD - \divide \!countB \!countA - \ifodd \!countB - \else - \advance \!countB 1 - \fi - \divide\!dimenB \!countB - \setdashes <\!dimenB>} - -% ** \setsolid -- puts the curve drawing routines in "solid line" mode, -% ** the default mode. See Subsection 6.1 of the manual. -\def\setsolid{% - \def\!Flist{\!Rule{24in}}\def\!Blist{\!Rule{24in}}% - \def\!UDlist{\\{24in}\\{\!zpt}}% - \!dashingoff} -\setsolid - -% ** \findlength {CURVE CMDS} -% ** PiCTeX executes the \start, \ljoin, and \qjoin cmds comprising -% ** CURVE CMDS without plotting anything, but stashes the length -% ** of the phantom curve away in \totalarclength. -% ** See Subsection 6.3 of the manual. -\def\findlength#1{% - \begingroup - \setdashpattern <0pt, \maxdimen> - \setplotsymbol ({}) - \dontsavelinesandcurves - #1% - \endgroup - \ignorespaces} - - -% ************************************************************* -% *** DIVISION (Does long division of dimension registers) *** -% ************************************************************* - -% ** User command: -% ** \Divide {DIVIDEND} by {DIVISOR} forming {RESULT} - -% ** Internal command -% ** \!divide{DIVIDEND}{DIVISOR}{RESULT} - -% ** \!divide DIVIDEND [by] DIVISOR [to get] ANSWER -% ** Divides the dimension DIVIDEND by the dimension DIVISOR, placing the -% ** quotient in the dimension register ANSWER. Values are understood to -% ** be in points. E.g. 12.5pt/1.4pt=8.92857pt. -% ** Quotient is accurate to 1/65536pt=2**[-16]pt -% ** |DIVISOR| should be < 2048pt (about 28 inches). -\def\!divide#1#2#3{% - \!dimenB=#1% ** dimB holds current remainder (r) - \!dimenC=#2% ** dimC holds divisor (d) - \!dimenD=\!dimenB% ** dimD holds quotient q=r/d for this - \divide \!dimenD \!dimenC% ** step, in units of scaled pts - \!dimenA=\!dimenD% ** dimA eventually holds answer (a) - \multiply\!dimenD \!dimenC% ** r <-- r - dq - \advance\!dimenB -\!dimenD% ** First step complete. Have integer part -% ** of a, and corresponding remainder. - \!dimenD=\!dimenC% ** Temporarily use dimD to hold |d| - \ifdim\!dimenD<\!zpt \!dimenD=-\!dimenD - \fi - \ifdim\!dimenD<64pt% ** Branch on the magnitude of |d| - \!divstep[\!tfs]\!divstep[\!tfs]% - \else - \!!divide - \fi - #3=\!dimenA\ignorespaces} - -% ** The following code handles divisors d with -% ** (1) .88in = 64pt <= d < 256pt = 3.54in -% ** (2) 3.54in = 256pt <= d < 2048pt = 28.34in -% ** Anything bigger than that may result in an overflow condition. -% ** For our purposes, we should never even see case (2). -\def\!!divide{% - \ifdim\!dimenD<256pt - \!divstep[64]\!divstep[32]\!divstep[32]% - \else - \!divstep[8]\!divstep[8]\!divstep[8]\!divstep[8]\!divstep[8]% - \!dimenA=2\!dimenA - \fi} - - -% ** The following macro does the real long division work. -\def\!divstep[#1]{% ** #1 = "B" - \!dimenB=#1\!dimenB% ** r <-- B*r - \!dimenD=\!dimenB% ** dimD holds quotient q=r/d for this - \divide \!dimenD by \!dimenC% ** step, in units of scaled pts - \!dimenA=#1\!dimenA% ** a <-- B*a + q - \advance\!dimenA by \!dimenD% - \multiply\!dimenD by \!dimenC% ** r <-- r - dq - \advance\!dimenB by -\!dimenD} - -% ** \Divide: See Subsection 9.3 of the manual. -\def\Divide <#1> by <#2> forming <#3> {% - \!divide{#1}{#2}{#3}} - - -% ********************************************* -% *** ELLIPSES (Draws ellipses and circles) *** -% ********************************************* - -% ** User commands -% ** \ellipticalarc axes ratio A:B DEGREES degrees from XSTART YSTART -% ** center at XCENTER YCENTER -% ** \circulararc DEGREES degrees from XSTART YSTART -% ** center at XCENTER YCENTER - -% ** Internal command -% ** \!sinandcos{32*ANGLE in radians}{32*SIN}{32*COS} - - -% ** \ellipticalarc axes ratio A:B DEGREES degrees from XSTART YSTART -% ** center at XCENTER YCENTER -% ** Draws a elliptical arc starting at the coordinate point (XSTART,YSTART). -% ** The center of the ellipse of which the arc is a segment is at -% ** (XCENTER,YCENTER). -% ** The arc extends through an angle of DEGREES degrees (may be + or -). -% ** A:B is the ratio of the length of the xaxis to the length of -% ** the yaxis of the ellipse -% ** Sqrt{[(XSTART-XCENTER)/A]**2 + [(YSTART-YCENTER)/B]**2} -% ** must be < 512pt (about 7in). -% ** Doesn't modify the dimensions (ht, dp, wd) of the PiCture under -% ** construction. - -% ** \circulararc -- See Subsection 5.3 of the manual. -\def\circulararc{% - \ellipticalarc axes ratio 1:1 } - -% ** \ellipticalarc -- See Subsection 5.3 of the manual. -\def\ellipticalarc axes ratio #1:#2 #3 degrees from #4 #5 center at #6 #7 {% - \!angle=#3pt\relax% ** get angle - \ifdim\!angle>\!zpt - \def\!sign{}% ** counterclockwise - \else - \def\!sign{-}\!angle=-\!angle% ** clockwise - \fi - \!xxloc=\!M{#6}\!xunit% ** convert CENTER to dimension - \!yyloc=\!M{#7}\!yunit - \!xxS=\!M{#4}\!xunit% ** get STARTing point on rim of ellipse - \!yyS=\!M{#5}\!yunit - \advance\!xxS -\!xxloc% ** make center of ellipse (0,0) - \advance\!yyS -\!yyloc - \!divide\!xxS{#1pt}\!xxS % ** scale point on ellipse to point on - \!divide\!yyS{#2pt}\!yyS % corresponding circle -% - \let\!MC=\!M% ** save current c/d mode - \!setdimenmode% ** go into dimension mode -% - \!xS=#1\!xxS \advance\!xS\!xxloc - \!yS=#2\!yyS \advance\!yS\!yyloc - \!start (\!xS,\!yS)% - \!loop\ifdim\!angle>14.9999pt% ** draw in major portion of ellipse - \!rotate(\!xxS,\!yyS)by(\!cos,\!sign\!sin)to(\!xxM,\!yyM) - \!rotate(\!xxM,\!yyM)by(\!cos,\!sign\!sin)to(\!xxE,\!yyE) - \!xM=#1\!xxM \advance\!xM\!xxloc \!yM=#2\!yyM \advance\!yM\!yyloc - \!xE=#1\!xxE \advance\!xE\!xxloc \!yE=#2\!yyE \advance\!yE\!yyloc - \!qjoin (\!xM,\!yM) (\!xE,\!yE) - \!xxS=\!xxE \!yyS=\!yyE - \advance \!angle -15pt - \repeat - \ifdim\!angle>\!zpt% ** complete remaining arc, if any - \!angle=100.53096\!angle% ** convert angle to radians, divide - \divide \!angle 360 % ** by 2, and multiply by 32 - \!sinandcos\!angle\!!sin\!!cos% ** get 32*sin & 32*cos - \!rotate(\!xxS,\!yyS)by(\!!cos,\!sign\!!sin)to(\!xxM,\!yyM) - \!rotate(\!xxM,\!yyM)by(\!!cos,\!sign\!!sin)to(\!xxE,\!yyE) - \!xM=#1\!xxM \advance\!xM\!xxloc \!yM=#2\!yyM \advance\!yM\!yyloc - \!xE=#1\!xxE \advance\!xE\!xxloc \!yE=#2\!yyE \advance\!yE\!yyloc - \!qjoin (\!xM,\!yM) (\!xE,\!yE) - \fi -% - \let\!M=\!MC% ** restore c/d mode - \ignorespaces}% ** if appropriate - - -% ** \!rotate(XREG,YREG)by(32cos,32sin)to(XXREG,YYREG) -% ** rotates (XREG,YREG) by angle with specfied scaled cos & sin to -% ** (XXREG,YYREG). Uses \!dimenA & \!dimenB as scratch registers. -\def\!rotate(#1,#2)by(#3,#4)to(#5,#6){% - \!dimenA=#3#1\advance \!dimenA -#4#2% ** Rcos(x+t)=Rcosx*cost - Rsinx*sint - \!dimenB=#3#2\advance \!dimenB #4#1% ** Rsin(x+t)=Rsinx*cost + Rcosx*sint - \divide \!dimenA 32 \divide \!dimenB 32 - #5=\!dimenA #6=\!dimenB - \ignorespaces} -\def\!sin{4.17684}% ** 32*sin(pi/24) (pi/24=7.5deg) -\def\!cos{31.72624}% ** 32*cos(pi/24) - - -% ** \!sinandcos{32*ANGLE in radians}{\SINCS}{\COSCS} -% ** Computes the 32*sine and 32*cosine of a small ANGLE expressed in -% ** radians/32 and puts these values in the replacement texts of -% ** \SINCS and \COSCS -\def\!sinandcos#1#2#3{% - \!dimenD=#1% ** angle is expressed in radians/32: 1pt = 1/32rad - \!dimenA=\!dimenD% ** dimA will eventually contain 32sin(angle)in pts - \!dimenB=32pt% ** dimB will eventually contain 32cos(angle)in pts - \!removept\!dimenD\!value% ** get value of 32*angle, without "pt" - \!dimenC=\!dimenD% ** holds 32*angle**i/i! in pts - \!dimenC=\!value\!dimenC \divide\!dimenC by 64 % ** now 32*angle**2/2 - \advance\!dimenB by -\!dimenC% ** 32-32*angle**2/2 - \!dimenC=\!value\!dimenC \divide\!dimenC by 96 % ** now 32*angle**3/3! - \advance\!dimenA by -\!dimenC% ** now 32*(angle-angle**3/6) - \!dimenC=\!value\!dimenC \divide\!dimenC by 128 % ** now 32*angle**4/4! - \advance\!dimenB by \!dimenC% - \!removept\!dimenA#2% ** set 32*sin(angle) - \!removept\!dimenB#3% ** set 32*cos(angle) - \ignorespaces} - - -% ***************************************************************** -% *** RULES (Draws rules, i.e., horizontal & vertical lines) *** -% ***************************************************************** - -% ** User command: -% ** \putrule [] from XCOORD1 YCOORD1 -% ** to XCOORD2 YCOORD2 - -% ** Internal commands: -% ** \!puthline [] (h = horizontal) -% ** Set by dashpat to either: \!putsolidhline or \!putdashedhline -% ** \!putvline [] (v = vertical) -% ** Either: \!putsolidvline or \!putdashedvline - - -% ** \putrule [] from XCOORD1 YCOORD1 -% ** to XCOORD2 YCOORD2 -% ** Draws a rule -- dashed or solid depending on the current dash pattern -- -% ** from (X1,Y1) to (X2,Y2). Uses TEK's \hrule & \vrule & \leaders -% ** constructions to handle horizontal & vertical lines efficiently both -% ** in terms of execution time and space in the DVI file. -% ** See Subsection 4.1 of the manual. -\def\putrule#1from #2 #3 to #4 #5 {% - \!xloc=\!M{#2}\!xunit \!xxloc=\!M{#4}\!xunit% - \!yloc=\!M{#3}\!yunit \!yyloc=\!M{#5}\!yunit% - \!dxpos=\!xxloc \advance\!dxpos by -\!xloc - \!dypos=\!yyloc \advance\!dypos by -\!yloc -% - \ifdim\!dypos=\!zpt - \def\!!Line{\!puthline{#1}}\ignorespaces - \else - \ifdim\!dxpos=\!zpt - \def\!!Line{\!putvline{#1}}\ignorespaces - \else - \def\!!Line{} - \fi - \fi - \let\!ML=\!M% ** save current coord\dimen mode - \!setdimenmode% ** express locations in dimens - \!!Line% - \let\!M=\!ML% ** restore previous c/d mode - \ignorespaces} - - -% ** \!putsolidhline [] -% ** Place horizontal solid line -\def\!putsolidhline#1{% - \ifdim\!dxpos>\!zpt - \put{\!hline\!dxpos}#1[l] at {\!xloc} {\!yloc} - \else - \put{\!hline{-\!dxpos}}#1[l] at {\!xxloc} {\!yyloc} - \fi - \ignorespaces} - -% ** \!putsolidvline [shifted ] -% ** Place vertical solid line -\def\!putsolidvline#1{% - \ifdim\!dypos>\!zpt - \put{\!vline\!dypos}#1[b] at {\!xloc} {\!yloc} - \else - \put{\!vline{-\!dypos}}#1[b] at {\!xxloc} {\!yyloc} - \fi - \ignorespaces} - -\def\!hline#1{\hbox to #1{\leaders \hrule height\linethickness\hfill}} -\def\!vline#1{\vbox to #1{\leaders \vrule width\linethickness\vfill}} - - -% ** \!putdashedhline [] -% ** Place dashed horizontal line -\def\!putdashedhline#1{% - \ifdim\!dxpos>\!zpt - \!DLsetup\!Flist\!dxpos - \put{\hbox to \!totalleaderlength{\!hleaders}\!hpartialpattern\!Rtrunc} - #1[l] at {\!xloc} {\!yloc} - \else - \!DLsetup\!Blist{-\!dxpos} - \put{\!hpartialpattern\!Ltrunc\hbox to \!totalleaderlength{\!hleaders}} - #1[r] at {\!xloc} {\!yloc} - \fi - \ignorespaces} - -% ** \!putdashedhline [] -% ** Place dashed vertical line -\def\!putdashedvline#1{% - \!dypos=-\!dypos% ** vertical leaders go from top to bottom - \ifdim\!dypos>\!zpt - \!DLsetup\!Flist\!dypos - \put{\vbox{\vbox to \!totalleaderlength{\!vleaders} - \!vpartialpattern\!Rtrunc}}#1[t] at {\!xloc} {\!yloc} - \else - \!DLsetup\!Blist{-\!dypos} - \put{\vbox{\!vpartialpattern\!Ltrunc - \vbox to \!totalleaderlength{\!vleaders}}}#1[b] at {\!xloc} {\!yloc} - \fi - \ignorespaces} - - -% ** The rest of the macros in this section are subroutines used by -% ** \!putdashedhline and \!putdashedvline. -\def\!DLsetup#1#2{% ** Dashed-Line set up - \let\!RSlist=#1% ** set !Rule-Skip list - \!countB=#2% ** convert rule length to integer (number of sps) - \!countA=\!leaderlength% ** ditto, leaderlength - \divide\!countB by \!countA% ** number of complete leader units - \!totalleaderlength=\!countB\!leaderlength - \!Rresiduallength=#2% - \advance \!Rresiduallength by -\!totalleaderlength% \** excess length - \!Lresiduallength=\!leaderlength - \advance \!Lresiduallength by -\!Rresiduallength - \ignorespaces} - -\def\!hleaders{% - \def\!Rule##1{\vrule height\linethickness width##1}% - \def\!Skip##1{\hskip##1}% - \leaders\hbox{\!RSlist}\hfill} - -\def\!hpartialpattern#1{% - \!dimenA=\!zpt \!dimenB=\!zpt - \def\!Rule##1{#1{##1}\vrule height\linethickness width\!dimenD}% - \def\!Skip##1{#1{##1}\hskip\!dimenD}% - \!RSlist} - -\def\!vleaders{% - \def\!Rule##1{\hrule width\linethickness height##1}% - \def\!Skip##1{\vskip##1}% - \leaders\vbox{\!RSlist}\vfill} - -\def\!vpartialpattern#1{% - \!dimenA=\!zpt \!dimenB=\!zpt - \def\!Rule##1{#1{##1}\hrule width\linethickness height\!dimenD}% - \def\!Skip##1{#1{##1}\vskip\!dimenD}% - \!RSlist} - -\def\!Rtrunc#1{\!trunc{#1}>\!Rresiduallength} -\def\!Ltrunc#1{\!trunc{#1}<\!Lresiduallength} - -\def\!trunc#1#2#3{% - \!dimenA=\!dimenB - \advance\!dimenB by #1% - \!dimenD=\!dimenB \ifdim\!dimenD#2#3\!dimenD=#3\fi - \!dimenC=\!dimenA \ifdim\!dimenC#2#3\!dimenC=#3\fi - \advance \!dimenD by -\!dimenC} - - -% **************************************************************** -% *** LINEAR ARC (Draws straight lines -- solid and dashed) *** -% **************************************************************** - -% ** User commands -% ** \inboundscheckoff -% ** \inboundscheckon - -% ** Internal commands -% ** \!start (XCOORD,YCOORD) -% ** \!ljoin (XCOORD,YCOORD) -% ** \!drawlinearsegment -- set by \dashpat to either -% ** \!linearsolid or \!lineardashed -% ** \!advancedashing -- set by \dashpat to either -% ** \relax or \!!advancedashing -% ** \!plotifinbounds -- set by \inboundscheck off/on to either -% ** \!plot or \!!plotifinbounds -% ** \!initinboundscheck -- set by \inboundscheck off/on to either -% ** \relax or \!!initinboundscheck - - -% \plotsymbolspacing ** distance between consecutive plot positions -% \!xS ** starting x -% \!yS ** starting y -% \!xE ** ending x -% \!yE ** ending y -% \!xdiff ** x_end - x_start -% \!ydiff ** y_end - y_start -% \!distacross ** how far along curve next point to be plotted is -% \!arclength ** approximate length of arc for current interval -% \!downlength ** remaining length for "pen" to be down -% \!uplength ** length for "pen" to be down -% \!intervalno ** counts segments to curve -% \totalarclength ** cumulative distance along curve -% \!npoints ** approximately (arc length / plotsymbolspacing) - -% ** Calls -- \!Pythag, \!divide, \!plot - - -% ** \!start (XCOORD,YCOORD) -% ** Sets initial point for linearly (or quadratically) interpolated curve -\def\!start (#1,#2){% - \!plotxorigin=\!xorigin \advance \!plotxorigin by \!plotsymbolxshift - \!plotyorigin=\!yorigin \advance \!plotyorigin by \!plotsymbolyshift - \!xS=\!M{#1}\!xunit \!yS=\!M{#2}\!yunit - \!rotateaboutpivot\!xS\!yS - \!copylist\!UDlist\to\!!UDlist% **\!UDlist has the form \\{dimen1}\\{dimen2}.. -% ** Routine will draw dashed line with pen -% ** down for dimen1, up for dimen2, ... - \!getnextvalueof\!downlength\from\!!UDlist - \!distacross=\!zpt% ** 1st point goes at start of curve - \!intervalno=0 % ** initialize interval counter - \global\totalarclength=\!zpt% ** initialize distance traveled along curve - \ignorespaces} - - -% ** \!ljoin (XCOORD,YCOORD) -% ** Draws a straight line starting at the last point specified -% ** by the most recent \!start, \!ljoin, or \!qjoin, and -% ** ending at (XCOORD,YCOORD). -\def\!ljoin (#1,#2){% - \advance\!intervalno by 1 - \!xE=\!M{#1}\!xunit \!yE=\!M{#2}\!yunit - \!rotateaboutpivot\!xE\!yE - \!xdiff=\!xE \advance \!xdiff by -\!xS%** xdiff = xE - xS - \!ydiff=\!yE \advance \!ydiff by -\!yS%** ydiff = yE - yS - \!Pythag\!xdiff\!ydiff\!arclength% ** arclength = sqrt(xdiff**2+ydiff**2) - \global\advance \totalarclength by \!arclength% - \!drawlinearsegment% ** set by dashpat to \!linearsolid or \!lineardashed - \!xS=\!xE \!yS=\!yE% ** shift ending points to starting points - \ignorespaces} - - -% ** The following routine is used to draw a "solid" line between (xS,yS) -% ** and (xE,yE). Points are spaced nearly every \plotsymbolspacing length -% ** along the line. -\def\!linearsolid{% - \!npoints=\!arclength - \!countA=\plotsymbolspacing - \divide\!npoints by \!countA% ** now #pts =. arclength/plotsymbolspacing - \ifnum \!npoints<1 - \!npoints=1 - \fi - \divide\!xdiff by \!npoints - \divide\!ydiff by \!npoints - \!xpos=\!xS \!ypos=\!yS -% - \loop\ifnum\!npoints>-1 - \!plotifinbounds - \advance \!xpos by \!xdiff - \advance \!ypos by \!ydiff - \advance \!npoints by -1 - \repeat - \ignorespaces} - - -% ** The following routine is used to draw a dashed line between (xS,yS) -% ** and (xE,yE). The dash pattern continues from the previous segment. -\def\!lineardashed{% -% ** - \ifdim\!distacross>\!arclength - \advance \!distacross by -\!arclength %nothing to plot in this interval -% - \else -% - \loop\ifdim\!distacross<\!arclength -% ** plot point, interpolating linearly in x and y - \!divide\!distacross\!arclength\!dimenA% ** dimA = across/arclength - \!removept\!dimenA\!t% ** \!t holds value in dimA, without the "pt" - \!xpos=\!t\!xdiff \advance \!xpos by \!xS - \!ypos=\!t\!ydiff \advance \!ypos by \!yS - \!plotifinbounds - \advance\!distacross by \plotsymbolspacing - \!advancedashing - \repeat -% - \advance \!distacross by -\!arclength% ** prepare for next interval - \fi - \ignorespaces} - - -\def\!!advancedashing{% - \advance\!downlength by -\plotsymbolspacing - \ifdim \!downlength>\!zpt - \else - \advance\!distacross by \!downlength - \!getnextvalueof\!uplength\from\!!UDlist - \advance\!distacross by \!uplength - \!getnextvalueof\!downlength\from\!!UDlist - \fi} - - -% ** \inboundscheckoff & \inboundscheckon: See Subsection 5.5 of the manual. -\def\inboundscheckoff{% - \def\!plotifinbounds{\!plot(\!xpos,\!ypos)}% - \def\!initinboundscheck{\relax}\ignorespaces} -\def\inboundscheckon{% - \def\!plotifinbounds{\!!plotifinbounds}% - \def\!initinboundscheck{\!!initinboundscheck}% - \!initinboundscheck\ignorespaces} -\inboundscheckoff - -% ** The following code plots the current point only if it falls in the -% ** current plotarea. It doesn't matter if the coordinate system has -% ** changed since the plotarea was set up. However, shifts of the plot -% ** are ignored (how the plotsymbol stands relative to its plot position is -% ** unknown anyway). -\def\!!plotifinbounds{% - \ifdim \!xpos<\!checkleft - \else - \ifdim \!xpos>\!checkright - \else - \ifdim \!ypos<\!checkbot - \else - \ifdim \!ypos>\!checktop - \else - \!plot(\!xpos,\!ypos) - \fi - \fi - \fi - \fi} - - -\def\!!initinboundscheck{% - \!checkleft=\!arealloc \advance\!checkleft by \!xorigin - \!checkright=\!arearloc \advance\!checkright by \!xorigin - \!checkbot=\!areabloc \advance\!checkbot by \!yorigin - \!checktop=\!areatloc \advance\!checktop by \!yorigin} - - -% ********************************* -% *** LOGTEN (Log_10 function) *** -% ********************************* -% -% ** \!logten{X} -% ** Calculates log_10 of X. X and LOG10(X) are in fixed point notation. -% ** X must be positive; it may have an optional `+' sign; any number -% ** of digits may be specified for X. The absolute error in LOG10(X) is -% ** less than .0001 (probably < .00006). That's about as good as you -% ** hope for, since TEX only operates to 5 figures after the decimal -% ** point anyway. - -% \!rootten=3.162278pt **** These are values are set in ALLOCATIONS -% \!tenAe=2.543275pt (=A5) -% \!tenAc=2.773839pt (=A3) -% \!tenAa=8.690286pt (=A1) - -\def\!logten#1#2{% - \expandafter\!!logten#1\!nil - \!removept\!dimenF#2% - \ignorespaces} - -\def\!!logten#1#2\!nil{% - \if -#1% - \!dimenF=\!zpt - \def\!next{\ignorespaces}% - \else - \if +#1% - \def\!next{\!!logten#2\!nil}% - \else - \if .#1% - \def\!next{\!!logten0.#2\!nil}% - \else - \def\!next{\!!!logten#1#2..\!nil}% - \fi - \fi - \fi - \!next} - -\def\!!!logten#1#2.#3.#4\!nil{% - \!dimenF=1pt % ** DimF holds log10 original argument - \if 0#1% - \!!logshift#3pt % ** Argument < 1 - \else % ** Argument >= 1 - \!logshift#2/% ** Shift decimal pt as many places - \!dimenE=#1.#2#3pt % ** as there are figures in #2 - \fi % ** Now dimE holds revised X want log10 of - \ifdim \!dimenE<\!rootten% ** Transform X to XX between sqrt(10) - \multiply \!dimenE 10 % ** and 10*sqrt(10) - \advance \!dimenF -1pt - \fi - \!dimenG=\!dimenE% ** dimG <- (XX + 10) - \advance\!dimenG 10pt - \advance\!dimenE -10pt % ** dimE <- (XX - 10) - \multiply\!dimenE 10 % ** dimE = 10*(XX-10) - \!divide\!dimenE\!dimenG\!dimenE% ** Now dimE=10t==10*(XX-10)/(XX+10) - \!removept\!dimenE\!t% ** !t=10t, with "pt" removed - \!dimenG=\!t\!dimenE% ** dimG=100t**2 - \!removept\!dimenG\!tt% ** !tt=100t**2, with "pt" removed - \!dimenH=\!tt\!tenAe% ** dimH=10*a5*(10t)**2 /100 - \divide\!dimenH 100 - \advance\!dimenH \!tenAc% ** ditto + 10*a3 - \!dimenH=\!tt\!dimenH% ** ditto * (10t)**2 /100 - \divide\!dimenH 100 - \advance\!dimenH \!tenAa% ** ditto + 10*a1 - \!dimenH=\!t\!dimenH% ** ditto * 10t / 100 - \divide\!dimenH 100 % ** Now dimH = log10(XX) - 1 - \advance\!dimenF \!dimenH}% ** dimF = log10(X) - -\def\!logshift#1{% - \if #1/% - \def\!next{\ignorespaces}% - \else - \advance\!dimenF 1pt - \def\!next{\!logshift}% - \fi - \!next} - - \def\!!logshift#1{% - \advance\!dimenF -1pt - \if 0#1% - \def\!next{\!!logshift}% - \else - \if p#1% - \!dimenF=1pt - \def\!next{\!dimenE=1p}% - \else - \def\!next{\!dimenE=#1.}% - \fi - \fi - \!next} - - -% *********************************************************** -% *** PICTURES (Basic setups for PiCtures; \put commands) *** -% *********************************************************** - -% ** User Commands: -% ** \beginpicture -% ** \endpicture -% ** \endpicturesave -% ** \setcoordinatesystem units point at XREF YREF -% ** \put {OBJECT} [ORIENTATION] at XCOORD YCOORD -% ** \multiput {OJBECT} [ORIENTATION] ) at -% ** XCOORD YCOORD -% ** *NUMBER_OF_TIMES DXCOORD DYCOORD / -% ** \accountingon -% ** \accountingoff -% ** \stack [ORIENTATION] {LIST OF ITEMS} -% ** \lines [ORIENTATION] {LINES} -% ** \Lines [ORIENTATION] {LINES} -% ** \setdimensionmode -% ** \setcoordinatemode -% ** \Xdistance -% ** \Ydistance - -% ** Internal commands: -% ** \!setputobject{OBJECT}{[ORIENTATION]} -% ** \!dimenput{OBJECT}[ORIENTATION](XDIMEN,YDIMEN) -% ** \!setdimenmode -% ** \!setcoordmode -% ** \!ifdimenmode -% ** \!ifcoordmode - - -% ** \beginpicture -% ** \endpicture -% ** \endpicturesave -% ** \beginpicture ... \endpicture creates an hbox. Objects are -% ** placed in this box using the \put command and the like (see below). -% ** The location of an object is specified in terms of coordinate system(s) -% ** established by \setcoordinatesystem. Each coordinate system (there -% ** might be just one) specifies the length of 1 horizontal unit, the length -% ** of 1 vertical unit, and the coordinates of a "reference point". The -% ** reference points of various coordinate systems will be in the same -% ** physical location. The macros keep track of the size of the objects -% ** and their locations. The resulting hbox is the smallest hbox which -% ** encloses all the objects, and whose TEK reference point is the point -% ** on the left edge of the box closest vertically to the PICTEX reference -% ** point. Using \endpicturesave, you can (globally) save the distance TEK's -% ** reference point is to the right (respectively, up from) PICTEX's -% ** reference point in the dimension register \XREG (respectively \YREG). -% ** You can then \put the picture OBJECT into a larger picture so that its -% ** reference point is at (XCOORD,YCOORD) with the command -% ** \put {picture OBJECT} [Bl] <\XREG, \YREG> at XCOORD YCOORD - -% ** \beginpicture : See Subsection 1.1 of the manual. -\def\beginpicture{% - \setbox\!picbox=\hbox\bgroup% - \!xleft=\maxdimen - \!xright=-\maxdimen - \!ybot=\maxdimen - \!ytop=-\maxdimen} - -% ** \endpicture : See Subsection 1.1 of the manual. -\def\endpicture{% - \ifdim\!xleft=\maxdimen% ** check if nothing was put in picbox - \!xleft=\!zpt \!xright=\!zpt \!ybot=\!zpt \!ytop=\!zpt - \fi - \global\!Xleft=\!xleft \global\!Xright=\!xright - \global\!Ybot=\!ybot \global\!Ytop=\!ytop - \egroup% - \ht\!picbox=\!Ytop \dp\!picbox=-\!Ybot - \ifdim\!Ybot>\!zpt - \else - \ifdim\!Ytop<\!zpt - \!Ybot=\!Ytop - \else - \!Ybot=\!zpt - \fi - \fi - \hbox{\kern-\!Xleft\lower\!Ybot\box\!picbox\kern\!Xright}} - -% ** \endpicturesave : See Subsection 8.4 of the manual. -\def\endpicturesave <#1,#2>{% - \endpicture \global #1=\!Xleft \global #2=\!Ybot \ignorespaces} - - -% ** \setcoordinatesystem units -% ** point at XREF YREF -% ** Each of `units ' and `point at XREF YREF' -% ** are optional. -% ** Unit lengths must be given in dimensions (e.g., <10pt,1in>). -% ** Default unit lengths are 1pt, 1pt, or previous unit lengths. -% ** Reference point is specified in current units (e.g., 3 5 ). -% ** Default reference point is 0 0 , or previous reference point. -% ** Unit lengths and reference points obey TEX's scoping rules. -% ** See Subsection 1.2 of the manual. -\def\setcoordinatesystem{% - \!ifnextchar{u}{\!getlengths } - {\!getlengths units <\!xunit,\!yunit>}} -\def\!getlengths units <#1,#2>{% - \!xunit=#1\relax - \!yunit=#2\relax - \!ifcoordmode - \let\!SCnext=\!SCccheckforRP - \else - \let\!SCnext=\!SCdcheckforRP - \fi - \!SCnext} -\def\!SCccheckforRP{% - \!ifnextchar{p}{\!cgetreference } - {\!cgetreference point at {\!xref} {\!yref} }} -\def\!cgetreference point at #1 #2 {% - \edef\!xref{#1}\edef\!yref{#2}% - \!xorigin=\!xref\!xunit \!yorigin=\!yref\!yunit - \!initinboundscheck % ** See linear.tex - \ignorespaces} -\def\!SCdcheckforRP{% - \!ifnextchar{p}{\!dgetreference}% - {\ignorespaces}} -\def\!dgetreference point at #1 #2 {% - \!xorigin=#1\relax \!yorigin=#2\relax - \ignorespaces} - - -% ** \put {OBJECT} [XY] at (XCOORD,YCOORD) -% ** `[XY]' and `' are optional. -% ** First OBJECT is placed in an hbox (the "objectbox") and then a -% ** "reference point" is assigned to the objectbox as follows: -% ** [1] first, the reference point is taken to be the center of the box; -% ** [2] next, centering is overridden by the specifications -% ** X=l -- reference point along the left edge of the objectbox -% ** X=r -- reference point along the right edge of the objectbox -% ** Y=b -- reference point along the bottom edge of the objectbox -% ** Y=B -- reference point along the Baseline of the objectbox -% ** Y=t -- reference point along the top edge of the objectbox; -% ** [3] finally the reference point is shifted left by XDIMEN, down -% ** by YDIMEN (both default to 0pt). -% ** The objectbox is placed within PICBOX with its reference point at -% ** (XCOORD,YCOORD). -% ** If OBJECT is a saved box, say box0, you have to write -% ** \put{\box0}... or \put{\copy0}... -% ** The objectbox is void after the put. -% ** See Subsection 2.1 of the manual. -\long\def\put#1#2 at #3 #4 {% - \!setputobject{#1}{#2}% - \!xpos=\!M{#3}\!xunit \!ypos=\!M{#4}\!yunit - \!rotateaboutpivot\!xpos\!ypos% - \advance\!xpos -\!xorigin \advance\!xpos -\!xshift - \advance\!ypos -\!yorigin \advance\!ypos -\!yshift - \kern\!xpos\raise\!ypos\box\!putobject\kern-\!xpos% - \!doaccounting\ignorespaces} - -% ** \multiput etc. Like \put. The objectbox is not voided until the -% ** termininating /, and is placed repeatedly with: -% ** XCOORD YCOORD -- the objectbox is put down with its reference point -% ** at (XCOORD,YCOORD); -% ** *N DXCOORD DYCOORD -- each of N times the current -% ** (xcoord,ycoord) is incremented by (DXCOORD,DYCOORD), and the -% ** objectbox is put down with its reference point at (xcoord,ycoord) -% ** (This specification has to follow an XCOORD YCOORD pair) -% ** See Subsection 2.2 of the manual. -\long\def\multiput #1#2 at {% - \!setputobject{#1}{#2}% - \!ifnextchar"{\!putfromfile}{\!multiput}} -\def\!putfromfile"#1"{% - \expandafter\!multiput \normalinput #1 /} -\def\!multiput{% - \futurelet\!nextchar\!!multiput} -\def\!!multiput{% - \if *\!nextchar - \def\!nextput{\!alsoby}% - \else - \if /\!nextchar - \def\!nextput{\!finishmultiput}% - \else - \def\!nextput{\!alsoat}% - \fi - \fi - \!nextput} -\def\!finishmultiput/{% - \setbox\!putobject=\hbox{}% - \ignorespaces} - -% ** \!alsoat XCOORD YCOORD -% ** The objectbox is put down with reference point at XCOORD,YCOORD -\def\!alsoat#1 #2 {% - \!xpos=\!M{#1}\!xunit \!ypos=\!M{#2}\!yunit - \!rotateaboutpivot\!xpos\!ypos% - \advance\!xpos -\!xorigin \advance\!xpos -\!xshift - \advance\!ypos -\!yorigin \advance\!ypos -\!yshift - \kern\!xpos\raise\!ypos\copy\!putobject\kern-\!xpos% - \!doaccounting - \!multiput} - -% ** \!alsoby*N DXCOORD DYCOORD -% ** N times, the current (XCOORD,YCOORD) is advanced by (DXCOORD,DYCOORD), -% ** and the current (shifted, oriented) OBJECT is put down. -\def\!alsoby*#1 #2 #3 {% - \!dxpos=\!M{#2}\!xunit \!dypos=\!M{#3}\!yunit - \!rotateonly\!dxpos\!dypos - \!ntemp=#1% - \!!loop\ifnum\!ntemp>0 - \advance\!xpos by \!dxpos \advance\!ypos by \!dypos - \kern\!xpos\raise\!ypos\copy\!putobject\kern-\!xpos% - \advance\!ntemp by -1 - \repeat - \!doaccounting - \!multiput} - -% ** \accountingoff : Suspends PiCTeX's accounting of the aggregate -% ** size of the picture box. -% ** \accounting on : Reinstates accounting. -% ** See Subsection 8.2 of the manual. -\def\accountingon{\def\!doaccounting{\!!doaccounting}\ignorespaces} -\def\accountingoff{\def\!doaccounting{}\ignorespaces} -\accountingon -\def\!!doaccounting{% - \!xtemp=\!xpos - \!ytemp=\!ypos - \ifdim\!xtemp<\!xleft - \!xleft=\!xtemp - \fi - \advance\!xtemp by \!wd - \ifdim\!xright<\!xtemp - \!xright=\!xtemp - \fi - \advance\!ytemp by -\!dp - \ifdim\!ytemp<\!ybot - \!ybot=\!ytemp - \fi - \advance\!ytemp by \!dp - \advance\!ytemp by \!ht - \ifdim\!ytemp>\!ytop - \!ytop=\!ytemp - \fi} - -\long\def\!setputobject#1#2{% - \setbox\!putobject=\hbox{#1}% - \!ht=\ht\!putobject \!dp=\dp\!putobject \!wd=\wd\!putobject - \wd\!putobject=\!zpt - \!xshift=.5\!wd \!yshift=.5\!ht \advance\!yshift by -.5\!dp - \edef\!putorientation{#2}% - \expandafter\!SPOreadA\!putorientation[]\!nil% - \expandafter\!SPOreadB\!putorientation<\!zpt,\!zpt>\!nil\ignorespaces} - -\def\!SPOreadA#1[#2]#3\!nil{\!etfor\!orientation:=#2\do\!SPOreviseshift} - -\def\!SPOreadB#1<#2,#3>#4\!nil{\advance\!xshift by -#2\advance\!yshift by -#3} - -\def\!SPOreviseshift{% - \if l\!orientation - \!xshift=\!zpt - \else - \if r\!orientation - \!xshift=\!wd - \else - \if b\!orientation - \!yshift=-\!dp - \else - \if B\!orientation - \!yshift=\!zpt - \else - \if t\!orientation - \!yshift=\!ht - \fi - \fi - \fi - \fi - \fi} - - -% ** \!dimenput{OBJECT} [XY] (XLOC,YLOC) -% ** This is an internal put routine, similar to \put, except that -% ** XLOC=distance right from reference point, YLOC=distance up from -% ** reference point. XLOC and YLOC are dimensions, so this routine -% ** is completely independent of the current coordinate system. -% ** This routine does NOT do ROTATIONS. -\long\def\!dimenput#1#2(#3,#4){% - \!setputobject{#1}{#2}% - \!xpos=#3\advance\!xpos by -\!xshift - \!ypos=#4\advance\!ypos by -\!yshift - \kern\!xpos\raise\!ypos\box\!putobject\kern-\!xpos% - \!doaccounting\ignorespaces} - - -% ** The following macros permit the picture drawing routines to be used -% ** either in the default "coordinate mode", or in "dimension mode". -% ** In coordinate mode \!M(1.5,\!xunit) expands to 1.5\!xunit -% ** In dimension mode \!M(1.5pt,\!xunit) expands to 1.5pt -% ** Dimension mode is useful in coding macros. -% ** Any special purpose picture macro that sets dimension mode should -% ** reset coordinate mode before completion. -% ** See Subsection 9.2 of the manual. -\def\!setdimenmode{% - \let\!M=\!M!!\ignorespaces} -\def\!setcoordmode{% - \let\!M=\!M!\ignorespaces} -\def\!ifcoordmode{% - \ifx \!M \!M!} -\def\!ifdimenmode{% - \ifx \!M \!M!!} -\def\!M!#1#2{#1#2} -\def\!M!!#1#2{#1} -\!setcoordmode -\let\setdimensionmode=\!setdimenmode -\let\setcoordinatemode=\!setcoordmode - -% ** \Xdistance{XCOORD}, \Ydistance{YCOORD} are the horizontal and -% ** vertical distances from the origin (0,0) to the point -% ** (XCOORD,YCOORD) in the current coordinate system. -% ** See Subsection 9.2 of the manual. -\def\Xdistance#1{% - \!M{#1}\!xunit - \ignorespaces} -\def\Ydistance#1{% - \!M{#1}\!yunit - \ignorespaces} - -% ** The following macros -- \stack, \line, and \Lines -- are useful for -% ** annotating PiCtures. They can be used outside the \beginpicture ... -% ** \endpicture environment. - -% ** \stack [POSITIONING] {VALUESLIST} -% ** Builds a vertical stack of the values in VALUESLIST. Values in -% ** VALUESLIST are separated by commas. In the resulting stack, values are -% ** centered by default, and positioned flush left (right) if -% ** POSITIONING = l (r). Values are separated vertically by LEADING, -% ** which defaults to \stackleading. -% ** See Subsection 2.3 of the manual. -\def\stack{% - \!ifnextchar[{\!stack}{\!stack[c]}} -\def\!stack[#1]{% - \let\!lglue=\hfill \let\!rglue=\hfill - \expandafter\let\csname !#1glue\endcsname=\relax - \!ifnextchar<{\!!stack}{\!!stack<\stackleading>}} -\def\!!stack<#1>#2{% - \vbox{\def\!valueslist{}\!ecfor\!value:=#2\do{% - \expandafter\!rightappend\!value\withCS{\\}\to\!valueslist}% - \!lop\!valueslist\to\!value - \let\\=\cr\lineskiplimit=\maxdimen\lineskip=#1% - \baselineskip=-1000pt\halign{\!lglue##\!rglue\cr \!value\!valueslist\cr}}% - \ignorespaces} - -% ** \lines [POSITIONING] {LINES} -% ** Builds a vertical array of the lines in LINES. Each line in LINES -% ** is terminated by a \cr. In the resulting array, lines are -% ** centered by default, and positioned flush left (right) if -% ** POSITIONING = l (r). The lines in the array are subject to TeX's -% ** usual spacing rules: in particular the baselines are ordinarily an equal -% ** distance apart. The baseline of the array is the baseline of the -% ** the bottom line. -% ** See Subsection 2.3 of the manual. -\def\lines{% - \!ifnextchar[{\!lines}{\!lines[c]}} -\def\!lines[#1]#2{% - \let\!lglue=\hfill \let\!rglue=\hfill - \expandafter\let\csname !#1glue\endcsname=\relax - \vbox{\halign{\!lglue##\!rglue\cr #2\crcr}}% - \ignorespaces} - -% ** \Lines [POSITIONING] {LINES} -% ** Like \lines, but the baseline of the array is the baseline of the -% ** top line. See Subsection 2.3 of the manual. -\def\Lines{% - \!ifnextchar[{\!Lines}{\!Lines[c]}} -\def\!Lines[#1]#2{% - \let\!lglue=\hfill \let\!rglue=\hfill - \expandafter\let\csname !#1glue\endcsname=\relax - \vtop{\halign{\!lglue##\!rglue\cr #2\crcr}}% - \ignorespaces} - - -% ********************************************* -% *** PLOTTING (Things to do with plotting) *** -% ********************************************* - -% ** User commands -% ** \setplotsymbol ({PLOTSYMBOL} [ORIENTATION] ) -% ** \savelinesandcurves on "FILE_NAME" -% ** \dontsavelinesandcurves -% ** \writesavefile {MESSAGE} -% ** \replot {FILE_NAME} - -% ** Internal command -% ** \!plot(XDIMEN,YDIMEN) - -% ** \setplotsymbol ({PLOTSYMBOL} [ ] < , >) -% ** Save PLOTSYMBOL away in an hbox for use with curve plotting routines -% ** See Subsection 5.2 of the manual. -\def\setplotsymbol(#1#2){% - \!setputobject{#1}{#2} - \setbox\!plotsymbol=\box\!putobject% - \!plotsymbolxshift=\!xshift - \!plotsymbolyshift=\!yshift - \ignorespaces} - -\setplotsymbol({\fiverm .})% ** initialize plotsymbol - - -% ** \!plot is either \!!plot (when no lines and curves are being saved) or -% ** \!!!plot (when lines and curves are being saved) - -% ** \!!plot(XDIMEN,YDIMEN) -% ** Places the current plotsymbol a horizontal distance=XDIMEN-xorigin -% ** and a vertical distance=YDIMEN-yorigin from the current -% ** reference point. -\def\!!plot(#1,#2){% - \!dimenA=-\!plotxorigin \advance \!dimenA by #1% ** over - \!dimenB=-\!plotyorigin \advance \!dimenB by #2% ** up - \kern\!dimenA\raise\!dimenB\copy\!plotsymbol\kern-\!dimenA% - \ignorespaces} - -% ** \!!!plot(XDIMEN,YDIMEN) -% ** Like \!!plot, but also saves the plot location in units of -% ** scaled point, on file `replotfile' -\def\!!!plot(#1,#2){% - \!dimenA=-\!plotxorigin \advance \!dimenA by #1% ** over - \!dimenB=-\!plotyorigin \advance \!dimenB by #2% ** up - \kern\!dimenA\raise\!dimenB\copy\!plotsymbol\kern-\!dimenA% - \!countE=\!dimenA - \!countF=\!dimenB - \immediate\write\!replotfile{\the\!countE,\the\!countF.}% - \ignorespaces} - - -% ** \savelinesandcurves on "FILE_NAME" -% ** Switch to save locations used for plotting lines and curves -% ** (No advantage in saving locations for solid lines; however -% ** replotting curve locations speeds things up by a factor of about 4. -% ** \dontsavelinesandcurves -% ** Terminates \savelinesandcurves. The default. -% ** See Subsection 5.6 of the manual. -\def\savelinesandcurves on "#1" {% - \immediate\closeout\!replotfile - \immediate\openout\!replotfile=#1% - \let\!plot=\!!!plot} - -\def\dontsavelinesandcurves {% - \let\!plot=\!!plot} -\dontsavelinesandcurves - -% ** \writesavefile {MESSAGE} -% ** The message is preceded by a "%", so that it won't interfere -% ** with replotting. -% ** See Subsection 5.6 of the manual. -{\catcode`\%=11\xdef\!Commentsignal{%}} -\def\writesavefile#1 {% - \immediate\write\!replotfile{\!Commentsignal #1}% - \ignorespaces} - -% ** \replot "FILE_NAME" -% ** Replots the locations saved earlier under \savelinesandcurves -% ** on "FILE_NAME" -% ** See Subsection 5.6 of the manual. -\def\replot"#1" {% - \expandafter\!replot\normalinput #1 /} -\def\!replot#1,#2. {% - \!dimenA=#1sp - \kern\!dimenA\raise#2sp\copy\!plotsymbol\kern-\!dimenA - \futurelet\!nextchar\!!replot} -\def\!!replot{% - \if /\!nextchar - \def\!next{\!finish}% - \else - \def\!next{\!replot}% - \fi - \!next} -% ************************************************** -% *** PYTHAGORAS (Euclidean distance function) *** -% ************************************************** - -% ** User command: -% ** \placehypotenuse for and in - -% ** Internal command: -% ** \!Pythag{X}{Y}{Z} -% ** Input X,Y are dimensions, or dimension registers. -% ** Output Z == sqrt(X**2+Y**2) must be a dimension register. -% ** Assumes that |X|+|Y| < 2048pt (about 28in). - -% ** Without loss of generality, suppose x>0, y>0. Put s = x+y, -% ** z = sqrt(x**2+y**2). Then z = s*f, where f = sqrt(t**2 + (1-t)**2) -% ** = sqrt((1+tau**2)/2), where t = x/s and tau = 2(t-1/2) . - -% ** Uses the \!divide macro (which uses registers \!dimenA--\!dimenD. -% ** Uses the \!removept macro (e.g., 123.45pt --> 123.45) -% ** Uses registers \!dimenE--\!dimenI. -\def\!Pythag#1#2#3{% - \!dimenE=#1\relax - \ifdim\!dimenE<\!zpt - \!dimenE=-\!dimenE - \fi% ** dimE = |x| - \!dimenF=#2\relax - \ifdim\!dimenF<\!zpt - \!dimenF=-\!dimenF - \fi% ** dimF = |y| - \advance \!dimenF by \!dimenE% ** dimF = s = |x|+|y| - \ifdim\!dimenF=\!zpt - \!dimenG=\!zpt% ** dimG = z = sqrt(x**2+y**2) - \else - \!divide{8\!dimenE}\!dimenF\!dimenE% ** now dimE = 8t = (8|x|)/s - \advance\!dimenE by -4pt% ** 8tau = (8t-4)*2 - \!dimenE=2\!dimenE% ** (tau = 2*t - 1) - \!removept\!dimenE\!!t% ** 8tau, without "pt" - \!dimenE=\!!t\!dimenE% ** (8tau)**2, in pts - \advance\!dimenE by 64pt% ** u = [64 + (8tau)**2]/2 - \divide \!dimenE by 2% ** [u = (8f)**2] - \!dimenH=7pt% ** initial guess g at sqrt(u) - \!!Pythag\!!Pythag\!!Pythag% ** 3 iterations give sqrt(u) - \!removept\!dimenH\!!t% ** 8f=sqrt(u), without "pt" - \!dimenG=\!!t\!dimenF% ** z = (8f)*s/8 - \divide\!dimenG by 8 - \fi - #3=\!dimenG - \ignorespaces} - -\def\!!Pythag{% ** Newton-Raphson for sqrt - \!divide\!dimenE\!dimenH\!dimenI% ** v = u/g - \advance\!dimenH by \!dimenI% ** g <-- (g + u/g)/2 - \divide\!dimenH by 2} - -% ** \placehypotenuse for and in -% ** See Subsection 9.3 of the manual. -\def\placehypotenuse for <#1> and <#2> in <#3> {% - \!Pythag{#1}{#2}{#3}} - - -% ********************************************** -% *** QUADRATIC ARC (Draws a quadratic arc) *** -% ********************************************** - -% ** Internal command -% ** \!qjoin (XCOORD1,YCOORD1) (XCOORD2,YCOORD2) - -% ** \!qjoin (XCOORD1,YCOORD1) (XCOORD2,YCOORD2) -% ** Draws an arc starting at the (last) point specified by the most recent -% ** \!qjoin, or \!ljoin, or \!start and passing through (X_1,Y_1), (X_2,Y_2). -% ** Uses quadratic interpolation in both x and y: -% ** x(t), 0 <= t <= 1, interpolates x_0, x_1, x_2 at t=0, .5, 1 -% ** y(t), 0 <= t <= 1, interpolates y_0, y_1, y_2 at t=0, .5, 1 - -\def\!qjoin (#1,#2) (#3,#4){% - \advance\!intervalno by 1 - \!ifcoordmode - \edef\!xmidpt{#1}\edef\!ymidpt{#2}% - \else - \!dimenA=#1\relax \edef\!xmidpt{\the\!dimenA}% - \!dimenA=#2\relax \edef\!xmidpt{\the\!dimenA}% - \fi - \!xM=\!M{#1}\!xunit \!yM=\!M{#2}\!yunit \!rotateaboutpivot\!xM\!yM - \!xE=\!M{#3}\!xunit \!yE=\!M{#4}\!yunit \!rotateaboutpivot\!xE\!yE -% -% ** Find coefficients for x(t)=a_x + b_x*t + c_x*t**2 - \!dimenA=\!xM \advance \!dimenA by -\!xS% ** dimA = I = xM - xS - \!dimenB=\!xE \advance \!dimenB by -\!xM% ** dimB = II = xE-xM - \!xB=3\!dimenA \advance \!xB by -\!dimenB% ** b=3I-II - \!xC=2\!dimenB \advance \!xC by -2\!dimenA% ** c=2(II-I) -% -% ** Find coefficients for y(t)=y_x + b_y*t + c_y*t**2 - \!dimenA=\!yM \advance \!dimenA by -\!yS% - \!dimenB=\!yE \advance \!dimenB by -\!yM% - \!yB=3\!dimenA \advance \!yB by -\!dimenB% - \!yC=2\!dimenB \advance \!yC by -2\!dimenA% -% -% ** Use Simpson's rule to calculate arc length over [0,1/2]: -% ** arc length = 1/2[1/6 f(0) + 4/6 f(1/4) + 1/6 f(1/2)] -% ** with f(t) = sqrt(x'(t)**2 + y'(t)**2). - \!xprime=\!xB \!yprime=\!yB% ** x'(t) = b + 2ct - \!dxprime=.5\!xC \!dyprime=.5\!yC% ** dt=1/4 ==> dx'(t) = c/2 - \!getf \!midarclength=\!dimenA - \!getf \advance \!midarclength by 4\!dimenA - \!getf \advance \!midarclength by \!dimenA - \divide \!midarclength by 12 -% -% ** Get arc length over [0,1]. - \!arclength=\!dimenA - \!getf \advance \!arclength by 4\!dimenA - \!getf \advance \!arclength by \!dimenA - \divide \!arclength by 12% ** Now have arc length over [1/2,1] - \advance \!arclength by \!midarclength - \global\advance \totalarclength by \!arclength -% -% -% ** Check to see if there's anything to plot in this interval - \ifdim\!distacross>\!arclength - \advance \!distacross by -\!arclength% ** nothing -% - \else - \!initinverseinterp% ** initialize for inverse interpolation on arc length - \loop\ifdim\!distacross<\!arclength% ** loop over points on arc - \!inverseinterp% ** find t such that arc length[0,t] = distacross, -% ** using inverse quadratic interpolation -% ** now evaluate x(t)=(c*t + b)*t + a - \!xpos=\!t\!xC \advance\!xpos by \!xB - \!xpos=\!t\!xpos \advance \!xpos by \!xS -% ** evaluate y(t) - \!ypos=\!t\!yC \advance\!ypos by \!yB - \!ypos=\!t\!ypos \advance \!ypos by \!yS - \!plotifinbounds% ** plot point if in bounds - \advance\!distacross \plotsymbolspacing%** advance arc length for next pt - \!advancedashing% ** see "linear" - \repeat -% - \advance \!distacross by -\!arclength% ** prepare for next interval - \fi -% - \!xS=\!xE% ** shift ending points to starting points - \!yS=\!yE - \ignorespaces} - - -% ** \!getf -- Calculates sqrt(x'(t)**2 + y'(t)**2) and advances -% ** x'(t) and y'(t) -\def\!getf{\!Pythag\!xprime\!yprime\!dimenA% - \advance\!xprime by \!dxprime - \advance\!yprime by \!dyprime} - - -% ** \!initinverseinterp -- initializes for inverse quadratic interpolation -% ** of arc length provided 1/3 < midarclength/arclength < 2/3; otherwise -% ** initializes for inverse linear interpolation. -\def\!initinverseinterp{% - \ifdim\!arclength>\!zpt - \!divide{8\!midarclength}\!arclength\!dimenE% ** dimE=8w=8r/s, where r -% ** = midarclength, s=arclength -% ** Test for w out of range: w<1/3 or w>2/3 - \ifdim\!dimenE<\!wmin \!setinverselinear - \else - \ifdim\!dimenE>\!wmax \!setinverselinear - \else% ** w in range: initialize - \def\!inverseinterp{\!inversequad}\ignorespaces -% -% ** Calculate the coefficients \!beta and \!gamma of the quadratic -% ** t = \!beta*v + \!gamma*v**2 -% ** taking the values t=0, 1/2, 1 at v=0, w==r/s, 1 respectively: -% ** \!beta = (1/2 - w**2)/[w(1-w)] -% ** \!gamma = 1 - beta. -% - \!removept\!dimenE\!Ew% ** 8w, without "pt" - \!dimenF=-\!Ew\!dimenE% ** -(8w)**2 - \advance\!dimenF by 32pt% ** 32 - (8w)**2 - \!dimenG=8pt - \advance\!dimenG by -\!dimenE% ** 8 - 8w - \!dimenG=\!Ew\!dimenG% ** (8w)*(8-8w) - \!divide\!dimenF\!dimenG\!beta% ** beta = (32-(8w)**2)/(8w(8-8w)) -% ** = (1/2 - w**2)/(w(1-w)) - \!gamma=1pt - \advance \!gamma by -\!beta% ** gamma = 1-beta - \fi% ** end of the \ifdim\!dimenE>\!wmax - \fi% ** end of the \ifdim\!dimenE<\!wmin - \fi% ** end of the \ifdim\!arclength>\!zpt - \ignorespaces} - - -% ** For 0 <= t <= 1, let AL(t) = arclength[0,t]/arclength[0,1]; note -% ** AL(0)=0, AL(1/2)=midarclength/arclength, AL(1)=1. This routine -% ** calculates an approximation to AL^{-1}(distance across/arclength), -% ** using the assumption that AL^{-1} is quadratic. Specifically, -% ** it finds t such that -% ** AL^{-1}(v) =. t = v*(\!beta + \!gamma*v) -% ** where \!beta and \!gamma are set by \!initinv, and where -% ** v=distance across/arclength -\def\!inversequad{% - \!divide\!distacross\!arclength\!dimenG% ** dimG = v = distacross/arclength - \!removept\!dimenG\!v% ** v, without "pt" - \!dimenG=\!v\!gamma% ** gamma*v - \advance\!dimenG by \!beta% ** beta + gamma*v - \!dimenG=\!v\!dimenG% ** t = v*(beta + gamma*v) - \!removept\!dimenG\!t}% ** t, without "pt" - - -% ** When w <= 1/3 or w >= 2/3, the following routine writes (using -% ** plain TEK's \wlog command) a warning message on the user's log file, -% ** and initializes for inverse linear interpolation on arc length. -\def\!setinverselinear{% - \def\!inverseinterp{\!inverselinear}% - \divide\!dimenE by 8 \!removept\!dimenE\!t - \!countC=\!intervalno \multiply \!countC 2 - \!countB=\!countC \advance \!countB -1 - \!countA=\!countB \advance \!countA -1 - \wlog{\the\!countB th point (\!xmidpt,\!ymidpt) being plotted - doesn't lie in the}% - \wlog{ middle third of the arc between the \the\!countA th - and \the\!countC th points:}% - \wlog{ [arc length \the\!countA\space to \the\!countB]/[arc length - \the \!countA\space to \the\!countC]=\!t.}% - \ignorespaces} - -% ** Inverse linear interpolation -\def\!inverselinear{% - \!divide\!distacross\!arclength\!dimenG - \!removept\!dimenG\!t} - - -% ************************************** -% ** ROTATIONS (Handles rotations) *** -% ************************************** - -% ** User commands -% ** \startrotation [by COS_OF_ANGLE SIN_OF_ANGLE] [about XPIVOT YPIVOT] -% ** \stoprotation - -% ** \startrotation [by COS_OF_ANGLE SIN_OF_ANGLE] [about XPIVOT YPIVOT] -% ** Future (XCOORD,YCOORD)'s will be rotated about (XPIVOT,YPIVOT) -% ** by the angle with the give COS and SIN. Both fields are optional. -% ** [COS,SIN] defaults to previous value, or (1,0). -% ** (XPIVOT,YPIVOT) defaults to previous value, or (0,0) -% ** You can't change the coordinate system in the scope of a rotation. -% ** See Subsection 9.1 of the manual. -\def\startrotation{% - \let\!rotateaboutpivot=\!!rotateaboutpivot - \let\!rotateonly=\!!rotateonly - \!ifnextchar{b}{\!getsincos }% - {\!getsincos by {\!cosrotationangle} {\!sinrotationangle} }} -\def\!getsincos by #1 #2 {% - \edef\!cosrotationangle{#1}% - \edef\!sinrotationangle{#2}% - \!ifcoordmode - \let\!ROnext=\!ccheckforpivot - \else - \let\!ROnext=\!dcheckforpivot - \fi - \!ROnext} -\def\!ccheckforpivot{% - \!ifnextchar{a}{\!cgetpivot}% - {\!cgetpivot about {\!xpivotcoord} {\!ypivotcoord} }} -\def\!cgetpivot about #1 #2 {% - \edef\!xpivotcoord{#1}% - \edef\!ypivotcoord{#2}% - \!xpivot=#1\!xunit \!ypivot=#2\!yunit - \ignorespaces} -\def\!dcheckforpivot{% - \!ifnextchar{a}{\!dgetpivot}{\ignorespaces}} -\def\!dgetpivot about #1 #2 {% - \!xpivot=#1\relax \!ypivot=#2\relax - \ignorespaces} - - -% ** Following terminates rotation. -% ** See Subsection 9.1 of the manual. -\def\stoprotation{% - \let\!rotateaboutpivot=\!!!rotateaboutpivot - \let\!rotateonly=\!!!rotateonly - \ignorespaces} - -% ** !!rotateaboutpivot{XREG}{YREG} -% ** XREG <-- xpvt + cos(angle)*(XREG-xpvt) - sin(angle)*(YREG-ypvt) -% ** YREG <-- ypvt + cos(angle)*(YREG-ypvt) + sin(angle)*(XREG-xpvt) -% ** XREG,YREG are dimension registers. Can't be \!dimenA to \!dimenD -\def\!!rotateaboutpivot#1#2{% - \!dimenA=#1\relax \advance\!dimenA -\!xpivot - \!dimenB=#2\relax \advance\!dimenB -\!ypivot - \!dimenC=\!cosrotationangle\!dimenA - \advance \!dimenC -\!sinrotationangle\!dimenB - \!dimenD=\!cosrotationangle\!dimenB - \advance \!dimenD \!sinrotationangle\!dimenA - \advance\!dimenC \!xpivot \advance\!dimenD \!ypivot - #1=\!dimenC #2=\!dimenD - \ignorespaces} - -% ** \!!rotateonly{XREG}{YREG} -% ** Like \!!rotateaboutpivot, but with a pivot of (0,0) -\def\!!rotateonly#1#2{% - \!dimenA=#1\relax \!dimenB=#2\relax - \!dimenC=\!cosrotationangle\!dimenA - \advance \!dimenC -\!rotsign\!sinrotationangle\!dimenB - \!dimenD=\!cosrotationangle\!dimenB - \advance \!dimenD \!rotsign\!sinrotationangle\!dimenA - #1=\!dimenC #2=\!dimenD - \ignorespaces} -\def\!rotsign{} -\def\!!!rotateaboutpivot#1#2{\relax} -\def\!!!rotateonly#1#2{\relax} -\stoprotation - -\def\!reverserotateonly#1#2{% - \def\!rotsign{-}% - \!rotateonly{#1}{#2}% - \def\!rotsign{}% - \ignorespaces} - - -% ********************************** -% *** SHADING (Handles shading) *** -% ********************************** - -% ** User commands -% ** \setshadegrid [span ] [point at XSHADE YSHADE] -% ** \setshadesymbol [] ({SHADESYMBOL} -% ** [ORIENTATION]) - -% ** Internal commands: -% ** \!startvshade (xS,ybS,ytS) -% ** \!starthshade (yS,xlS,xrS) -% ** \!lshade [] -% ** ** when shading vertically: -% ** [the region from (xS,ybS,ytS) to] (xE,ybE,ytE) -% ** ** when shading horizontally: -% ** [the region from (yS,xlS,xrS) to] (yE,xlE,xrE) -% ** \!qshade [] -% ** ** when shading vertically: -% ** [the region from (xS,ybS,ytS) to] (xM,ybM,ytM) (xE,ybE,ytE) -% ** ** when shading horizontally: -% ** [the region from (yS,xlS,xrS) to] (yM,xlM,xrM) (yE,xlE,xrE) -% ** \!lattice{ANCHOR}{SPAN}{LOCATION}{INDEX}{LATTICE LOCATION} -% ** \!override{NOMINAL DIMEN}{REPLACEMENT DIMEN}{DIMEN} - - -% ** The shading routine can operate either in a "vertical mode" or a -% ** "horizontal mode". In vertical mode, the region to be shaded is specified -% ** in the form -% ** {(x,y): xl <= x <= xr & yb(x) <= y <= yt(x)} -% ** where yb and yt are functions of x. In horizontal mode, the region -% ** is specified in the form -% ** {(x,y): yb <= y <= yt & xl(y) <= x <= xr(y)}. -% ** The functions yb and yt may be either both linear or both quadratic; -% ** similarly for xl and xr. A region with say, piecewise quadratic bottom -% ** and top boundaries, can be shaded by consecutive (vertical) \!qshades, -% ** proceeding from left to right. Similarly, a region with piecewise -% ** quadratic left and right boundaries can be shaded by consecutive -% ** (horizontal) \!qshades, proceeding from bottom to top. More complex -% ** regions can be shaded by partitioning them into appropriate subregions, -% ** and shading those. - -% ** Shading is accomplished by placing a user-selected shading symbol at -% ** those points of a regular grid which fall within the region to be -% ** shaded. This region can be "shrunk" so that a largish shading symbol -% ** will not extend outside it. Shrinking is accomplished by specifying -% ** shrinkages for the left, right, bottom, and top boundaries, in a manner -% ** discussed further below. - -% ** \shades and \!joins MUST NOT be intermingled. Finish drawing a curve -% ** before starting to shade a region, and finish shading a region before -% ** starting to draw a curve. - - -% ** \setshadegrid [span ] [point at XSHADE YSHADE] -% ** The shading symbol is placed down on the points of a grid centered -% ** at the coordinate point (XSHADE,YSHADE). The grid points are of the -% ** form (j*SPAN,k*SPAN), with j+k even. SPAN is specified -% ** as a dimension. -% ** (XSHADE,YSHADE) defaults to previous (XSHADE,YSHADE) (or (0,0) if none) -% ** SPAN defaults to previous span (or 5pt if none) -% ** See Subsection 7.2 of the manual. -\def\setshadegrid{% - \!ifnextchar{s}{\!getspan } - {\!getspan span <\!dshade>}} -\def\!getspan span <#1>{% - \!dshade=#1\relax - \!ifcoordmode - \let\!GRnext=\!GRccheckforAP - \else - \let\!GRnext=\!GRdcheckforAP - \fi - \!GRnext} -\def\!GRccheckforAP{% - \!ifnextchar{p}{\!cgetanchor } - {\!cgetanchor point at {\!xshadesave} {\!yshadesave} }} -\def\!cgetanchor point at #1 #2 {% - \edef\!xshadesave{#1}\edef\!yshadesave{#2}% - \!xshade=\!xshadesave\!xunit \!yshade=\!yshadesave\!yunit - \ignorespaces} -\def\!GRdcheckforAP{% - \!ifnextchar{p}{\!dgetanchor}% - {\ignorespaces}} -\def\!dgetanchor point at #1 #2 {% - \!xshade=#1\relax \!yshade=#2\relax - \ignorespaces} - -% ** \setshadesymbol [] ({SHADESYMBOL} -% ** [ORIENTATION]) -% ** Saves SHADESYMBOL away in an hbox for use with shading routines. -% ** A shade symbol will not be plotted if its plot position comes within -% ** distance LS of the left boundary, RS of the right boundary, TS of the -% ** top boundary, BS of the bottom boundary. These parameters have -% ** default values that should work in most cases (see below). -% ** To override a default value, specify the replacement value -% ** in the appropriate subfield of the shrinkages field. -% ** 0pt may be coded as "z" (without the quotes). To accept a -% ** default value, leave the field empty. Thus -% ** [,z,,5pt] sets LS=default, RS=0pt, BS=default, TS=5pt . -% ** Skipping the shrinkages field accepts all the defaults. -% ** See Subsection 7.1 of the manual. -\def\setshadesymbol{% - \!ifnextchar<{\!setshadesymbol}{\!setshadesymbol<,,,> }} - -\def\!setshadesymbol <#1,#2,#3,#4> (#5#6){% -% ** set the shadesymbol - \!setputobject{#5}{#6}% - \setbox\!shadesymbol=\box\!putobject% - \!shadesymbolxshift=\!xshift \!shadesymbolyshift=\!yshift -% -% ** set the shrinkages - \!dimenA=\!xshift \advance\!dimenA \!smidge% ** default LS = xshift - smidge - \!override\!dimenA{#1}\!lshrinkage% - \!dimenA=\!wd \advance \!dimenA -\!xshift% ** default RS = width - xshift - \advance\!dimenA \!smidge% - smidge - \!override\!dimenA{#2}\!rshrinkage - \!dimenA=\!dp \advance \!dimenA \!yshift% ** default BS = depth + yshift - \advance\!dimenA \!smidge% - smidge - \!override\!dimenA{#3}\!bshrinkage - \!dimenA=\!ht \advance \!dimenA -\!yshift% ** default TS = height - yshift - \advance\!dimenA \!smidge% - smidge - \!override\!dimenA{#4}\!tshrinkage - \ignorespaces} -\def\!smidge{-.2pt}% - -% ** \!override{NOMINAL DIMEN}{REPLACEMENT DIMEN}{DIMEN} -% ** Overrides the NOMINAL DIMEN by the REPLACEMENT DIMEN to produce DIMEN, -% ** according to the following rules: -% ** REPLACEMENT DIMEN empty: DIMEN <-- NOMINAL DIMEN -% ** REPLACEMENT DIMEN z: DIMEN <-- 0pt -% ** otherwise: DIMEN <-- REPLACEMENT DIMEN -% ** DIMEN must be a dimension register -\def\!override#1#2#3{% - \edef\!!override{#2}% - \ifx \!!override\empty - #3=#1\relax - \else - \if z\!!override - #3=\!zpt - \else - \ifx \!!override\!blankz - #3=\!zpt - \else - #3=#2\relax - \fi - \fi - \fi - \ignorespaces} -\def\!blankz{ z} - -\setshadesymbol ({\fiverm .})% ** initialize plotsymbol -% ** \fivesy ^^B is a small cross - - -% ** \!startvshade [at] (xS,ybS,ytS) -% ** Initiates vertical shading mode -\def\!startvshade#1(#2,#3,#4){% - \let\!!xunit=\!xunit% - \let\!!yunit=\!yunit% - \let\!!xshade=\!xshade% - \let\!!yshade=\!yshade% - \def\!getshrinkages{\!vgetshrinkages}% - \let\!setshadelocation=\!vsetshadelocation% - \!xS=\!M{#2}\!!xunit - \!ybS=\!M{#3}\!!yunit - \!ytS=\!M{#4}\!!yunit - \!shadexorigin=\!xorigin \advance \!shadexorigin \!shadesymbolxshift - \!shadeyorigin=\!yorigin \advance \!shadeyorigin \!shadesymbolyshift - \ignorespaces} - -% ** \!starthshade [at] (yS,xlS,xrS) -% ** Initiates horizontal shading mode -\def\!starthshade#1(#2,#3,#4){% - \let\!!xunit=\!yunit% - \let\!!yunit=\!xunit% - \let\!!xshade=\!yshade% - \let\!!yshade=\!xshade% - \def\!getshrinkages{\!hgetshrinkages}% - \let\!setshadelocation=\!hsetshadelocation% - \!xS=\!M{#2}\!!xunit - \!ybS=\!M{#3}\!!yunit - \!ytS=\!M{#4}\!!yunit - \!shadexorigin=\!xorigin \advance \!shadexorigin \!shadesymbolxshift - \!shadeyorigin=\!yorigin \advance \!shadeyorigin \!shadesymbolyshift - \ignorespaces} - - -% ** \!lattice{ANCHOR}{SPAN}{LOCATION}{INDEX}{LATTICE LOCATION} -% ** Consider the lattice with points ANCHOR + j*SPAN. This routine determines -% ** the index k of the smallest lattice point >= LOCATION, and sets -% ** LATTICE LOCATION = ANCHOR + k*SPAN. -% ** INDEX is assumed to be a count register, LATTICE LOCATION a dimen reg. -\def\!lattice#1#2#3#4#5{% - \!dimenA=#1% ** dimA = ANCHOR - \!dimenB=#2% ** dimB = SPAN (assumed > 0pt) - \!countB=\!dimenB% ** ctB = SPAN, as a count -% -% ** Determine index of smallest lattice point >= LOCATION - \!dimenC=#3% ** dimC = LOCATION - \advance\!dimenC -\!dimenA% ** now dimC = LOCATION-ANCHOR - \!countA=\!dimenC% ** ctA = above, as a count - \divide\!countA \!countB% ** now ctA = desired index, if dimC <= 0 - \ifdim\!dimenC>\!zpt - \!dimenD=\!countA\!dimenB% ** (tentative k)*span - \ifdim\!dimenD<\!dimenC% ** if this is false, ctA = desired index - \advance\!countA 1 % ** if true, have to add 1 - \fi - \fi -% - \!dimenC=\!countA\!dimenB% ** lattice location = anchor + ctA*span - \advance\!dimenC \!dimenA - #4=\!countA% ** the desired index - #5=\!dimenC% ** corresponding lattice location - \ignorespaces} - - -% ** \!qshade [with shrinkages] [[LS,RS,BS,TS]] -% ***** during vertical shading: -% ** [the region from (xS,ybS,ytS) to] (xM,ybM,ytM) [and] (xE,ybE,ytE) -% ** Shades the region {(x,y): xS <= x <= xE, yb(x) <= y <= yt(x)}, where -% ** yb is the quadratic thru (xS,ybS) & (xM,ybM) & (xE,ybE) -% ** yt is the quadratic thru (xS,ytS) & (xM,ybM) & (xE,ytE) -% ** xS,ybS,ytS are either given by \!startvshade or carried over -% ** as the ending values of the immediately preceding \!qshade. -% ** For the interpretation of LS, RS, BS, & TS, see \setshadesymbol. The -% ** values set there can be overridden, for the course of this \!qshade -% ** only, in the same manner as overrides are specified for -% ** \setshadesymbol. -% ***** during horizontal shading: -% ** [the region from (yS,xlS,xrS) to] (yM,xlM,xrM) [and] (yE,xlE,xrE) -\def\!qshade#1(#2,#3,#4)#5(#6,#7,#8){% - \!xM=\!M{#2}\!!xunit - \!ybM=\!M{#3}\!!yunit - \!ytM=\!M{#4}\!!yunit - \!xE=\!M{#6}\!!xunit - \!ybE=\!M{#7}\!!yunit - \!ytE=\!M{#8}\!!yunit - \!getcoeffs\!xS\!ybS\!xM\!ybM\!xE\!ybE\!ybB\!ybC%**Get coefficients B & C for - \!getcoeffs\!xS\!ytS\!xM\!ytM\!xE\!ytE\!ytB\!ytC%**y=y0 + B(x-X0) + C(x-X0)**2 - \def\!getylimits{\!qgetylimits}% - \!shade{#1}\ignorespaces} - -% ** \!lshade ... (xE,ybE,ytE) -% ** This is like \!qshade, but the top and bottom boundaries are linear, -% ** rather than quadratic. -\def\!lshade#1(#2,#3,#4){% - \!xE=\!M{#2}\!!xunit - \!ybE=\!M{#3}\!!yunit - \!ytE=\!M{#4}\!!yunit - \!dimenE=\!xE \advance \!dimenE -\!xS% ** xE-xS - \!dimenC=\!ytE \advance \!dimenC -\!ytS% ** ytE-ytS - \!divide\!dimenC\!dimenE\!ytB% ** ytB = (ytE-ytS)/(xE-xS) - \!dimenC=\!ybE \advance \!dimenC -\!ybS% ** ybE-ybS - \!divide\!dimenC\!dimenE\!ybB% ** ybB = (ybE-ybS)/(xE-xS) - \def\!getylimits{\!lgetylimits}% - \!shade{#1}\ignorespaces} - -% ** \!getcoeffs{X0}{Y0}{X1}{Y1}{X2}{Y2}{B}{C} -% ** Finds B and C such that the quadratic y = Y0 + B(x-X0) + C(x-X0)**2 -% ** passes through (X1,Y1) and (X2,Y2): when X0=0=Y0, the formulas are: -% ** B = S1 - X1*C, C = (S2-S1)/X2 -% ** with -% ** S1 = Y1/X1, S2 = (Y2-Y1)/(X2-X1). -\def\!getcoeffs#1#2#3#4#5#6#7#8{% - \!dimenC=#4\advance \!dimenC -#2% ** dimC=Y1-Y0 - \!dimenE=#3\advance \!dimenE -#1% ** dimE=X1-X0 - \!divide\!dimenC\!dimenE\!dimenF% ** dimF=S1 - \!dimenC=#6\advance \!dimenC -#4% ** dimC=Y2-Y1 - \!dimenH=#5\advance \!dimenH -#3% ** dimH=X2-X1 - \!divide\!dimenC\!dimenH\!dimenG% ** dimG=S2 - \advance\!dimenG -\!dimenF% ** dimG=S2-S1 - \advance \!dimenH \!dimenE% ** dimH=X2-X0 - \!divide\!dimenG\!dimenH#8% ** C=(S2-S1)/(X2-X0) - \!removept#8\!t% ** C, without "pt" - #7=-\!t\!dimenE% ** -C*(X1-X0) - \advance #7\!dimenF% ** B=S1-C*(X1-X0) - \ignorespaces} - - -\def\!shade#1{% -% ** Get LS,RS,BS,TS for this panel - \!getshrinkages#1<,,,>\!nil% % ** now effective LS=dimE, RS=dimF, -% ** BS=dimG, TS=dimH - \advance \!dimenE \!xS% ** now dimE=xS+LS - \!lattice\!!xshade\!dshade\!dimenE% ** set parity=index of left-mst x-lattice - \!parity\!xpos% ** point >= xS+LS, xpos=its location - \!dimenF=-\!dimenF% ** set dimF=xE-RS - \advance\!dimenF \!xE -% - \!loop\!not{\ifdim\!xpos>\!dimenF}% ** loop over x-lattice points <= xE-RS - \!shadecolumn% - \advance\!xpos \!dshade% ** move over to next column - \advance\!parity 1% ** increase index of x-point - \repeat -% - \!xS=\!xE% ** shift ending values to starting values - \!ybS=\!ybE - \!ytS=\!ytE - \ignorespaces} - - -\def\!vgetshrinkages#1<#2,#3,#4,#5>#6\!nil{% - \!override\!lshrinkage{#2}\!dimenE - \!override\!rshrinkage{#3}\!dimenF - \!override\!bshrinkage{#4}\!dimenG - \!override\!tshrinkage{#5}\!dimenH - \ignorespaces} -\def\!hgetshrinkages#1<#2,#3,#4,#5>#6\!nil{% - \!override\!lshrinkage{#2}\!dimenG - \!override\!rshrinkage{#3}\!dimenH - \!override\!bshrinkage{#4}\!dimenE - \!override\!tshrinkage{#5}\!dimenF - \ignorespaces} - - -\def\!shadecolumn{% - \!dxpos=\!xpos - \advance\!dxpos -\!xS% ** dx = x - xS - \!removept\!dxpos\!dx% ** ditto, without "pt" - \!getylimits% ** get top and bottom y-values - \advance\!ytpos -\!dimenH% ** less TS - \advance\!ybpos \!dimenG% ** plus BS - \!yloc=\!!yshade% ** get anchor point for this column - \ifodd\!parity - \advance\!yloc \!dshade - \fi - \!lattice\!yloc{2\!dshade}\!ybpos% - \!countA\!ypos% ** ypos=smallest y point for this column - \!dimenA=-\!shadexorigin \advance \!dimenA \!xpos% ** over - \loop\!not{\ifdim\!ypos>\!ytpos}% ** loop over ypos <= yt(t) - \!setshadelocation% ** vmode: xloc=xpos, yloc=ypos -% ** hmode: xloc=ypos, yloc=xpos - \!rotateaboutpivot\!xloc\!yloc% - \!dimenA=-\!shadexorigin \advance \!dimenA \!xloc% ** over - \!dimenB=-\!shadeyorigin \advance \!dimenB \!yloc% ** up - \kern\!dimenA \raise\!dimenB\copy\!shadesymbol \kern-\!dimenA - \advance\!ypos 2\!dshade - \repeat - \ignorespaces} - -\def\!qgetylimits{% - \!dimenA=\!dx\!ytC - \advance\!dimenA \!ytB% ** yt(t)=ytS + dx*(Bt + dx*Ct) - \!ytpos=\!dx\!dimenA - \advance\!ytpos \!ytS - \!dimenA=\!dx\!ybC - \advance\!dimenA \!ybB% ** yb(t)=ybS + dx*(Bb + dx*Cb) - \!ybpos=\!dx\!dimenA - \advance\!ybpos \!ybS} - -\def\!lgetylimits{% - \!ytpos=\!dx\!ytB% ** yt(t)=ytS + dx*Bt - \advance\!ytpos \!ytS - \!ybpos=\!dx\!ybB% ** yb(t)=ybS + dx*Bb - \advance\!ybpos \!ybS} - -\def\!vsetshadelocation{% ** vmode: xloc=xpos, yloc=ypos - \!xloc=\!xpos - \!yloc=\!ypos} -\def\!hsetshadelocation{% ** hmode: xloc=ypos, yloc=xpos - \!xloc=\!ypos - \!yloc=\!xpos} - - -% ************************************** -% *** TICKS (Draws ticks on graphs) *** -% ************************************** - -% ** User commands -% ** \ticksout -% ** \ticksin -% ** \gridlines -% ** \nogridlines -% ** \loggedticks -% ** \unloggesticks -% ** See Subsection 3.4 of the manual - -% ** The following is an option of the \axis command -% ** ticks -% ** [in] [out] -% ** [long] [short] [length ] -% ** [width ] -% ** [andacross] [butnotacross] -% ** [logged] [unlogged] -% ** [unlabeled] [numbered] [withvalues VALUE1 VALUE2 ... VALUEk / ] -% ** [quantity Q] [at LOC1 LOC2 ... LOCk / ] [from LOC1 to LOC2 by -% ** LOC_INCREMENT] -% ** See Subsection 3.2 of the manual for the rules. - -% ** The various options of the tick field are processed by the -% ** \!nextkeyword command defined below. -% ** For example, `\!nextkeyword short ' expands to `\!ticksshort', -% ** while `\!nextkeyword withvalues' expands to `\!tickswithvalues'. - -\def\!axisticks {% - \def\!nextkeyword##1 {% - \expandafter\ifx\csname !ticks##1\endcsname \relax - \def\!next{\!fixkeyword{##1}}% - \else - \def\!next{\csname !ticks##1\endcsname}% - \fi - \!next}% - \!axissetup - \def\!axissetup{\relax}% - \edef\!ticksinoutsign{\!ticksinoutSign}% - \!ticklength=\longticklength - \!tickwidth=\linethickness - \!gridlinestatus - \!setticktransform - \!maketick - \!tickcase=0 - \def\!LTlist{}% - \!nextkeyword} - -\def\ticksout{% - \def\!ticksinoutSign{+}} -\def\ticksin{% - \def\!ticksinoutSign{-}} -\ticksout - -\def\gridlines{% - \def\!gridlinestatus{\!gridlinestootrue}} -\def\nogridlines{% - \def\!gridlinestatus{\!gridlinestoofalse}} -\nogridlines - -\def\loggedticks{% - \def\!setticktransform{\let\!ticktransform=\!logten}} -\def\unloggedticks{% - \def\!setticktransform{\let\!ticktransform=\!donothing}} -\def\!donothing#1#2{\def#2{#1}} -\unloggedticks - -% ** \!ticks/ : terminates read of tick options -\expandafter\def\csname !ticks/\endcsname{% - \!not {\ifx \!LTlist\empty} - \!placetickvalues - \fi - \def\!tickvalueslist{}% - \def\!LTlist{}% - \expandafter\csname !axis/\endcsname} - -\def\!maketick{% - \setbox\!boxA=\hbox{% - \beginpicture - \!setdimenmode - \setcoordinatesystem point at {\!zpt} {\!zpt} - \linethickness=\!tickwidth - \ifdim\!ticklength>\!zpt - \putrule from {\!zpt} {\!zpt} to - {\!ticksinoutsign\!tickxsign\!ticklength} - {\!ticksinoutsign\!tickysign\!ticklength} - \fi - \if!gridlinestoo - \putrule from {\!zpt} {\!zpt} to - {-\!tickxsign\!xaxislength} {-\!tickysign\!yaxislength} - \fi - \endpicturesave <\!Xsave,\!Ysave>}% - \wd\!boxA=\!zpt} - -\def\!ticksin{% - \def\!ticksinoutsign{-}% - \!maketick - \!nextkeyword} - -\def\!ticksout{% - \def\!ticksinoutsign{+}% - \!maketick - \!nextkeyword} - -\def\!tickslength<#1> {% - \!ticklength=#1\relax - \!maketick - \!nextkeyword} - -\def\!tickslong{% - \!tickslength<\longticklength> } - -\def\!ticksshort{% - \!tickslength<\shortticklength> } - -\def\!tickswidth<#1> {% - \!tickwidth=#1\relax - \!maketick - \!nextkeyword} - -\def\!ticksandacross{% - \!gridlinestootrue - \!maketick - \!nextkeyword} - -\def\!ticksbutnotacross{% - \!gridlinestoofalse - \!maketick - \!nextkeyword} - -\def\!tickslogged{% - \let\!ticktransform=\!logten - \!nextkeyword} - -\def\!ticksunlogged{% - \let\!ticktransform=\!donothing - \!nextkeyword} - -\def\!ticksunlabeled{% - \!tickcase=0 - \!nextkeyword} - -\def\!ticksnumbered{% - \!tickcase=1 - \!nextkeyword} - -\def\!tickswithvalues#1/ {% - \edef\!tickvalueslist{#1! /}% - \!tickcase=2 - \!nextkeyword} - -\def\!ticksquantity#1 {% - \ifnum #1>1 - \!updatetickoffset - \!countA=#1\relax - \advance \!countA -1 - \!ticklocationincr=\!axisLength - \divide \!ticklocationincr \!countA - \!ticklocation=\!axisstart - \loop \!not{\ifdim \!ticklocation>\!axisend} - \!placetick\!ticklocation - \ifcase\!tickcase - \relax % Case 0: no labels - \or - \relax % Case 1: numbered -- not available here - \or - \expandafter\!gettickvaluefrom\!tickvalueslist - \edef\!tickfield{{\the\!ticklocation}{\!value}}% - \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist% - \fi - \advance \!ticklocation \!ticklocationincr - \repeat - \fi - \!nextkeyword} - -\def\!ticksat#1 {% - \!updatetickoffset - \edef\!Loc{#1}% - \if /\!Loc - \def\next{\!nextkeyword}% - \else - \!ticksincommon - \def\next{\!ticksat}% - \fi - \next} - -\def\!ticksfrom#1 to #2 by #3 {% - \!updatetickoffset - \edef\!arg{#3}% - \expandafter\!separate\!arg\!nil - \!scalefactor=1 - \expandafter\!countfigures\!arg/ - \edef\!arg{#1}% - \!scaleup\!arg by\!scalefactor to\!countE - \edef\!arg{#2}% - \!scaleup\!arg by\!scalefactor to\!countF - \edef\!arg{#3}% - \!scaleup\!arg by\!scalefactor to\!countG - \loop \!not{\ifnum\!countE>\!countF} - \ifnum\!scalefactor=1 - \edef\!Loc{\the\!countE}% - \else - \!scaledown\!countE by\!scalefactor to\!Loc - \fi - \!ticksincommon - \advance \!countE \!countG - \repeat - \!nextkeyword} - -\def\!updatetickoffset{% - \!dimenA=\!ticksinoutsign\!ticklength - \ifdim \!dimenA>\!offset - \!offset=\!dimenA - \fi} - -\def\!placetick#1{% - \if!xswitch - \!xpos=#1\relax - \!ypos=\!axisylevel - \else - \!xpos=\!axisxlevel - \!ypos=#1\relax - \fi - \advance\!xpos \!Xsave - \advance\!ypos \!Ysave - \kern\!xpos\raise\!ypos\copy\!boxA\kern-\!xpos - \ignorespaces} - -\def\!gettickvaluefrom#1 #2 /{% - \edef\!value{#1}% - \edef\!tickvalueslist{#2 /}% - \ifx \!tickvalueslist\!endtickvaluelist - \!tickcase=0 - \fi} -\def\!endtickvaluelist{! /} - -\def\!ticksincommon{% - \!ticktransform\!Loc\!t - \!ticklocation=\!t\!!unit - \advance\!ticklocation -\!!origin - \!placetick\!ticklocation - \ifcase\!tickcase - \relax % Case 0: no labels - \or % Case 1: numbered - \ifdim\!ticklocation<-\!!origin - \edef\!Loc{$\!Loc$}% - \fi - \edef\!tickfield{{\the\!ticklocation}{\!Loc}}% - \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist% - \or % Case 2: labeled - \expandafter\!gettickvaluefrom\!tickvalueslist - \edef\!tickfield{{\the\!ticklocation}{\!value}}% - \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist% - \fi} - -\def\!separate#1\!nil{% - \!ifnextchar{-}{\!!separate}{\!!!separate}#1\!nil} -\def\!!separate-#1\!nil{% - \def\!sign{-}% - \!!!!separate#1..\!nil} -\def\!!!separate#1\!nil{% - \def\!sign{+}% - \!!!!separate#1..\!nil} -\def\!!!!separate#1.#2.#3\!nil{% - \def\!arg{#1}% - \ifx\!arg\!empty - \!countA=0 - \else - \!countA=\!arg - \fi - \def\!arg{#2}% - \ifx\!arg\!empty - \!countB=0 - \else - \!countB=\!arg - \fi} - -\def\!countfigures#1{% - \if #1/% - \def\!next{\ignorespaces}% - \else - \multiply\!scalefactor 10 - \def\!next{\!countfigures}% - \fi - \!next} - -\def\!scaleup#1by#2to#3{% - \expandafter\!separate#1\!nil - \multiply\!countA #2\relax - \advance\!countA \!countB - \if -\!sign - \!countA=-\!countA - \fi - #3=\!countA - \ignorespaces} - -\def\!scaledown#1by#2to#3{% - \!countA=#1\relax% ** get original # - \ifnum \!countA<0 % ** take abs value, - \def\!sign{-}% ** remember sign - \!countA=-\!countA - \else - \def\!sign{}% - \fi - \!countB=\!countA% ** copy |#| - \divide\!countB #2\relax% ** integer part (|#|/sf) - \!countC=\!countB% ** get sf * (|#|/sf) - \multiply\!countC #2\relax - \advance \!countA -\!countC% ** ctA is now remainder - \edef#3{\!sign\the\!countB.}% ** +- integerpart. - \!countC=\!countA % ** Tack on proper number - \ifnum\!countC=0 % ** of zeros after . - \!countC=1 - \fi - \multiply\!countC 10 - \!loop \ifnum #2>\!countC - \edef#3{#3\!zero}% - \multiply\!countC 10 - \repeat - \edef#3{#3\the\!countA}% ** Add on rest of remainder - \ignorespaces} - -\def\!placetickvalues{% - \advance\!offset \tickstovaluesleading - \if!xswitch - \setbox\!boxA=\hbox{% - \def\\##1##2{% - \!dimenput {##2} [B] (##1,\!axisylevel)}% - \beginpicture - \!LTlist - \endpicturesave <\!Xsave,\!Ysave>}% - \!dimenA=\!axisylevel - \advance\!dimenA -\!Ysave - \advance\!dimenA \!tickysign\!offset - \if -\!tickysign - \advance\!dimenA -\ht\!boxA - \else - \advance\!dimenA \dp\!boxA - \fi - \advance\!offset \ht\!boxA - \advance\!offset \dp\!boxA - \!dimenput {\box\!boxA} [Bl] <\!Xsave,\!Ysave> (\!zpt,\!dimenA) - \else - \setbox\!boxA=\hbox{% - \def\\##1##2{% - \!dimenput {##2} [r] (\!axisxlevel,##1)}% - \beginpicture - \!LTlist - \endpicturesave <\!Xsave,\!Ysave>}% - \!dimenA=\!axisxlevel - \advance\!dimenA -\!Xsave - \advance\!dimenA \!tickxsign\!offset - \if -\!tickxsign - \advance\!dimenA -\wd\!boxA - \fi - \advance\!offset \wd\!boxA - \!dimenput {\box\!boxA} [Bl] <\!Xsave,\!Ysave> (\!dimenA,\!zpt) - \fi} - - -\normalgraphs - -% \catcode`!=12 % ***** THIS MUST NEVER BE OMITTED - -\protect \endinput diff --git a/tex/context/base/thrd-tab.mkii b/tex/context/base/thrd-tab.mkii new file mode 100644 index 000000000..dd3838ce2 --- /dev/null +++ b/tex/context/base/thrd-tab.mkii @@ -0,0 +1,2006 @@ +% Since this file is not available in every distribution, we +% have copied the original in this file. The manuals to +% Wichura's PiCTeX and TaBlE packages are not available on +% line and are distributed by respectively the TeX Users Group +% and Personal TeX Inc. Many macros of TaBlE are overloaded +% and/or extended in core-tab.tex. The extensions concern +% splitting over pages, color and consistent spacing. + +% We've patched this file for catcode ! because in luatex we use +% catcode tables and using unprotect/protect is cleaner. Late +% 2007 we also decided no longer to treat quotes and bars the +% TaBLe way and instead of messy pushing and popping of catcodes +% we commented a couple of lines here. We just assume that the +% template has no active bar and quote. Inside tables we now +% have the regular meaning of active bars in ConTeXt. More +% drastic extensions and patched can be found in core-tab.tex. + +% TABLE 1.0 +% Copyright Michael J. Wichura August 1988 (patched by Hans Hagen) + +% The TABLE macros are divided into sections, roughly according to +% function: + +% Section Name Function +% a Allocation Allocates storage registers for parameters. +% f Format Reads format section; builds preamble for \halign; +% processes \ReFormat command. +% g Get Value Converts "spec"'s (as in spec_{LT}) to +% corresponding "values"'s (as in value_{LT}). +% h Hacks Utility macros; error messages; miscellaneous commands. +% k Keys Definition and scanning of format keys. +% n Numeric Macros for TABLE's numeric format. +% s Struts Macros for struts. +% t Tables Sets up \halign for table; end-of-row processing; +% alternate vertical rules; spanning; horizontal +% lines; stretching and shrinking; repositioning +% commands. + +% The name of each internal macro begins with the prefix "\!t", the +% "!" having category code 11, followed by the letter of the section +% in which the macro is defined. For example, a macro beginning "\!th" +% is defined in Section h (Hacks). There a few exceptions: +% the general purpose macros "\!ttemp", "\!ttempa", "\!ttempb", and +% "\!tnext" are repeatedly defined on the spot as the need arises. + +% External macros (and active characters) are defined in the following +% sections: +% Macro Section +% " t +% \- t +% \= t +% \ActivateBarAndQuote h +% \AugmentedTableStrut s +% \BackSpace h +% \BeginFormat f +% \BeginTable t +% \BeginTableParBox a +% \Center t +% \ColumnWidthFactor a +% \ColumnWidthUnit a +% \DQuote h +% \EndFormat k (\EndFormat is actually a key) +% \EndTable t +% \EndTableParBox a +% \Enlarge s +% \enlarge s +% \EveryTable a +% \EveryTableParBox a +% \Expand t +% \InterColumnSpaceFactor a +% \InterColumnSpaceUnit a +% \JustCenter t +% \JustLeft t +% \JustRight t +% \KernFactor a +% \KernUnit a +% \Left t +% \LeftTabskip a +% \LineThicknessFactor a +% \LineThicknessUnit a +% \LongLines t +% \Lower h +% \MakeStrut s +% \NewFormatKey k +% \NormalCWU a +% \NormalICSU a +% \NormalKU a +% \NormalLTU a +% \NormalSU a +% \NormalTableUnits a +% \OpenUp s +% \PseudoVrule t +% \Raise h +% \ReadFormatKeys k +% \ReFormat f +% \Right t +% \RightTabskip a +% \SetTableToWidth t +% \Smash h +% \StandardTableStrut s +% \StrutDepthFactor a +% \StrutHeightFactor a +% \StrutUnit a +% \TaBlE h +% \TracingFormats a +% \TracingKeys a +% \Use t +% \use t +% \VBar h +% \Vspace h +% \VspaceFactor a +% \WidenTableBy t +% \\ t +% \_ t +% \| t +% | t +% ~ t + +\unprotect + +% \catcode `\!=11 +% \catcode `\@=11 + +\newif\ifh@ % normally in plain tex +\newif\ifv@ % normally in plain tex + +% Don't try to read the TABLE macros until after you've read the +% TABLE manual. The internal documentation of the macros is +% sketchy; you need the manual to understand what's going on. +% You should also review the material on \halign s in the TeXbook, +% since TABLE uses an \halign to perform its alignments. + +% In studying the TABLE macros, you should start by skimming the +% macros in the "miscellaneous hacks", "error messages", and "loops" +% subsections of Section h, as well as the "\GetValue" macro in +% Section g; these macros are called many times by the other macros. +% To continue with a "bottom-up" approach, read next Sections k, +% f, and t. (Top-downers should reverse the order.) The other +% Sections can be looked at as the need arises. + +% ********************************************************************* +% SECTION A: ALLOCATION +% ********************************************************************* + +\let\!tacr=\\ % Save meaning of \\ (Needed if TABLE is used with LaTeX + +% ********************************************************************* +% TABLE PARAMETERS: Units +% ********************************************************************* + +\newdimen\LineThicknessUnit +\newdimen\StrutUnit +\newskip \InterColumnSpaceUnit +\newdimen\ColumnWidthUnit +\newdimen\KernUnit + +\let\!taLTU=\LineThicknessUnit % Used in preamble +\let\!taCWU=\ColumnWidthUnit % Used in preamble +\let\!taKU =\KernUnit % Used in preamble + +\newtoks\NormalTLTU +\newtoks\NormalTSU +\newtoks\NormalTICSU +\newtoks\NormalTCWU +\newtoks\NormalTKU + +% NOTE: The user should modify the following DEFAULTS to suit his/her +% taste, and output device: +%\def\PixelsPerInch{300} +\NormalTLTU={1in \divide \LineThicknessUnit by 300 } +\NormalTSU ={\normalbaselineskip + \divide \StrutUnit by 11 } % 11 = 8+3 = NormalT Height+Depth Factors +\NormalTICSU={.5em plus 1fil minus .25em} % .5em = width of a digit +\NormalTCWU ={.5em} +\NormalTKU ={.5em} + +\def\NormalTableUnits{% + \LineThicknessUnit =\the\NormalTLTU + \StrutUnit =\the\NormalTSU + \InterColumnSpaceUnit=\the\NormalTICSU + \ColumnWidthUnit =\the\NormalTCWU + \KernUnit =\the\NormalTKU} + +\NormalTableUnits + +% The user should issue \NormalTableUnits when setting a table +% in a different point size, since the Table...Units themselves +% are static while the Normal...Units vary with the point size. + + +% ********************************************************************* +% TABLE PARAMETERS: Factors +% ********************************************************************* + +\newcount\LineThicknessFactor +\newcount\StrutHeightFactor +\newcount\StrutDepthFactor +\newcount\InterColumnSpaceFactor +\newcount\ColumnWidthFactor +\newcount\KernFactor +\newcount\VspaceFactor + +% DEFAULTS: +\LineThicknessFactor =2 +\StrutHeightFactor =8 +\StrutDepthFactor =3 +\InterColumnSpaceFactor =3 +\ColumnWidthFactor =10 +\KernFactor =1 +\VspaceFactor =2 + + +% ********************************************************************* +% DIAGNOSTIC PARAMETERS +% ********************************************************************* + +\newcount\TracingKeys % >=1 reports new keys, >=2 reports key usage +\newcount\TracingFormats % >=1 reports templates for columns + % >=2 reports \halign preamble + + +% ********************************************************************* +% PARBLOCK PARAMETERS +% ********************************************************************* + +\def\BeginTableParBox#1{% + \vtop\bgroup + \hsize=#1 + \normalbaselines + \let~=\!ttTie + \let\-=\!ttDH + \the\EveryTableParBox} + +\def\EndTableParBox{% + \MakeStrut{0pt}{\StrutDepthFactor\StrutUnit} + \egroup} % finishes the \vtop begun by \BeginTableParbox + +\newtoks\EveryTableParBox +\EveryTableParBox={% + \parindent=0pt + \raggedright + \rightskip=0pt plus 4em % Provide more stretch + \relax} + + +% ********************************************************************* +% EVERY TABLE TOKENS +% ********************************************************************* + +\newtoks\EveryTable +\newtoks\!taTableSpread + + +% ********************************************************************* +% Extreme left- and right- tabskips +% ********************************************************************* + +\newskip\LeftTabskip +\newskip\RightTabskip + + +% ********************************************************************* +% INTERNAL VARIABLES +% ********************************************************************* + +\newcount\!taCountA +\newcount\!taColumnNumber +\newcount\!taRecursionLevel % (Initially 0) + +\newdimen\!taDimenA % used by \Enlarge +\newdimen\!taDimenB % used by \Enlarge +\newdimen\!taDimenC % used by numeric.tex +\newdimen\!taMinimumColumnWidth + +\newtoks\!taToksA + +\newtoks\!taPreamble +\newtoks\!taDataColumnTemplate +\newtoks\!taRuleColumnTemplate +\newtoks\!taOldRuleColumnTemplate +\newtoks\!taLeftGlue +\newtoks\!taRightGlue + +\newskip\!taLastRegularTabskip + +\newif\if!taDigit +\newif\if!taBeginFormat +\newif\if!taOnceOnlyTabskip + + + +% ********************************************************************* +% SECTION H: HACKS +% ********************************************************************* + +% **************************************************************** +% TABLE LOGO +% **************************************************************** +\def\TaBlE{% + T\kern-.27em\lower.5ex\hbox{A}\kern-.18em B\kern-.1em + \lower.5ex\hbox{L}\kern-.075em E} + + +% **************************************************************** +% ACTIVE CHARACTERS +% **************************************************************** + +% ACTIVATE BAR AND QUOTE: Makes | and " active if they aren't +% already active (in which case the user will probably have given +% them special meanings); definitions are provided which effectively +% undoes the activeness outside a Table. + +{\catcode`\|=13 \catcode`\"=13 + \gdef\ActivateBarAndQuote{% + \ifnum \catcode`\|=13 + \else + \catcode`\|=13 + \def|{% + \ifmmode + \vert + \else + \char`\| + \fi}% + \fi + \ifnum \catcode`\"=13 + \else + \catcode`\"=13 + \def"{\char`\"}% + \fi}} + +% **************************************************************** +% Macros for | and " having category code 12. +% **************************************************************** +{\catcode `\|=12 \catcode `\"=12 +\gdef\VBar{|} +\gdef\DQuote{"}} + + +% **************************************************************** +% MISCELANEOUS HACKS +% **************************************************************** + +% MESSAGE : Writes out to terminal and log file. +\def\!thMessage#1{\immediate\write16{#1}\ignorespaces} + +% X: Abbreviation for expandafter +\let\!thx=\expandafter + +% GOBBLE: Eats next token +\def\!thGobble#1{} + +% SPACE TOKEN +\def\\{\let\!thSpaceToken= }\\ + +% HEIGHT, DEPTH, AND WIDTH +\def\!thHeight{height} +\def\!thDepth{depth} +\def\!thWidth{width} + +% TOKSEDEF =: Places , fully expanded a la \edef, in the specified . +\def\!thToksEdef#1=#2{% + \edef\!ttemp{#2}% + #1\!thx{\!ttemp}% + \ignorespaces} + + +% **************************************************************** +% ERROR MESSAGES +% **************************************************************** + +% STORE ERROR MSG +% Replacement text of is a macro with Message +% as its name. E.g., after \StoreErrorMsg\Help{Type }, +% \Help expands to "\Type " +\def\!thStoreErrorMsg#1#2{% + \toks0 =\!thx{\csname #2\endcsname}% + \edef#1{\the\toks0 }} + +% READ ERROR MSG +% Continuing the above example, \ReadErrorMsg\Help produces "Type " +\def\!thReadErrorMsg#1{% + \!thx\!thx\!thx\!thGobble\!thx\string #1} + +% ERROR +\def\!thError#1#2{% + \begingroup + \newlinechar=`\^^J% + \edef\!ttemp{#2}% + \errhelp=\!thx{\!ttemp}% + \!thMessage{% + ^^J\!thReadErrorMsg\!thErrorMsgA + ^^J\!thReadErrorMsg\!thErrorMsgB}% + \errmessage{#1}% + \endgroup} + +% TEXT FOR ERROR MESSAGE +\!thStoreErrorMsg\!thErrorMsgA{% + TABLE error; see manual for explanation.} +\!thStoreErrorMsg\!thErrorMsgB{% + Type \space H \space for immediate help.} + +% GET REPLACEMENT +% must be a control sequence +\def\!thGetReplacement#1#2{% + \begingroup + \!thMessage{#1} + \endlinechar=-1 + \global\read16 to#2% + \endgroup} + + +% **************************************************************** +% LOOP MACRO +% **************************************************************** + +% LOOP ... REPEAT macro from TUGboat Vol 8 #2: 1987 +% Syntax is like that of plain TeX's \loop ... \repeat macro +\def\!thLoop#1\repeat{% + \def\!thIterate{% + #1% + \!thx \!thIterate + \fi}% + \!thIterate + \let\!thIterate\relax} + + +% *************************************************************** +% VERTICALLY-CENTERED SMASH +% *************************************************************** + +% SMASH: Like TeX's \smash, only the argument +% is centered vertically before its height and depth are smashed to 0pt. +\def\Smash{% + \relax + \ifmmode + \expandafter\mathpalette + \expandafter\!thDoMathVCS + \else + \expandafter\!thDoVCS + \fi} + +% DO VCS +\def\!thDoVCS#1{% + \setbox\zerocount\hbox{#1}% + \!thFinishVCS} + +% DO MATH VCS +\def\!thDoMathVCS#1#2{% + \setbox\zerocount\hbox{$\mathsurround\zeropoint#1{#2}$}% + \!thFinishVCS} + +% FINISH VCS +\def\!thFinishVCS{% + \vbox to\zeropoint{\vss\box\zerocount\vss}} + + +% *************************************************************** +% RAISE AND LOWER +% *************************************************************** + +% Like TeX's \raise and \lower, except: (1) The first argument +% to these commands is a dimension expressed in TABLE's usual conventions; +% the default is (StrutHeightFactor+StrutDepthFactor)*StrutUnit/2 +% (2) like \smash, these commands function in math mode as well +% as horizontal mode; (3) again like \smash, the result is declared +% to have height and depth 0pt + +% Examples \Raise2{Stuff}: "Stuff" is raised 2*StrutUnit +% \Raise {Stuff}: "Stuff" is raised a half-line +% $\Lower(10pt){\alpha}$: "$\alpha$" is lowered 10 points + +% RAISE +\def\Raise{% + \def\!thSign{+}% + \!tgGetValue\!thSetDimen} + +% LOWER +\def\Lower{% + \def\!thSign{-}% + \!tgGetValue\!thSetDimen} + +% SET DIMEN +\def\!thSetDimen{% + \ifnum \!tgCode=1 + \ifx \!tgValue\empty + \!taDimenA \StrutHeightFactor\StrutUnit + \advance \!taDimenA \StrutDepthFactor\StrutUnit + \divide \!taDimenA 2 + \else + \!taDimenA \!tgValue\StrutUnit + \fi + \else + \!taDimenA \!tgValue + \fi + \!taDimenA=\!thSign\!taDimenA\relax + % + % BRANCH ON MODE + \ifmmode + \expandafter\mathpalette + \expandafter\!thDoMathRaise + \else + \expandafter\!thDoSimpleRaise + \fi} + +% DO SIMPLE RAISE +\def\!thDoSimpleRaise#1{% + \setbox\zerocount\hbox{\raise \!taDimenA\hbox{#1}}% + \!thFinishRaise} % From Plain TeX: \ht0=0pt \dp0=0pt \box0 + +% DO MATH RAISE +\def\!thDoMathRaise#1#2{% + \setbox\zerocount\hbox{\raise \!taDimenA\hbox{$\mathsurround\zeropoint#1{#2}$}}% + \!thFinishRaise} + +% FINISH RAISE. This is the same as Plain's \finsm@sh; some macro +% packages redefine \finsm@sh. +\def\!thFinishRaise{% + \ht\zerocount\zeropoint + \dp\zerocount\zeropoint + \box\zerocount} + + +% *************************************************************** +% BACK SPACE +% *************************************************************** +\def\BackSpace{% + \!tgGetValue\!thKernBack} + +\def\!thKernBack{% + \kern - + \ifnum \!tgCode=1 + \ifx \!tgValue\empty + \the\KernFactor + \else + \!tgValue % user-specified integer + \fi + \KernUnit + \else + \!tgValue % user-specified dimension + \fi + \ignorespaces}% + + +% *************************************************************** +% Vspace +% *************************************************************** +\def\Vspace{% + \noalign + \bgroup + \!tgGetValue\!thVspace} + +\def\!thVspace{% + \vskip + \ifnum \!tgCode=1 + \ifx \!tgValue\empty + \the\VspaceFactor + \else + \!tgValue % user-specified integer + \fi + \StrutUnit + \else + \!tgValue % user-specified skip + \fi + \egroup} % Ends the \noalign + +% ********************************************************************* +% SECTION F: FORMAT +% ********************************************************************* + +% As explained in Section 3.3 of the manual, TABLE alternates each +% of the user's "data" columns with a "rule" column; moreover, TABLE +% places a "dummy data" column at the left and right of a table. +% A table with n nominal data columns therefore actually has a +% total of +% n (nominal data columns) +% +(n+1) (rule columns) +% + 2 (dummy data columns) +% ____ +% 2n+3 +% columns. + +% FORMATs job is to create an \halign preamble for the alignment +% of these (2n+3) columns. The preamble consists of templates +% for the various columns, strung together with &'s and interlaced +% with \tabskip glue specifications. + +% FORMAT constructs the template for a nomimal data column according +% to the user-specified format keys. As the keys are read from left +% to right, the template is built up "from the inside out" (as +% illustrated in Section 3.1.9 of the manual), the inner-most part +% being the "#" sign. A "|" in the format terminates template +% building; the completed template is adjoined to preamble along +% with the template for the following rule column. + +% Minimum column widths, if specified, are implemented by creating +% an "artificial row" with data entries of the form +% \hskip . +% This row has zero height and depth and is completely invisible. + + +% BEGIN FORMAT +\def\BeginFormat{% + %catcode`\|=12 % Inhibit expansion if | immediately follows a + %catcode`\"=12 % read by \getvalue. + \!taPreamble={}% + \!taColumnNumber=0 + \skip0 =\InterColumnSpaceUnit + \multiply\skip0 \InterColumnSpaceFactor + \divide\skip0 2 + \!taRuleColumnTemplate=\!thx{% + \!thx\tabskip\the\skip0 }% + \!taLastRegularTabskip=\skip0 + \!taOnceOnlyTabskipfalse + \!taBeginFormattrue % Used to intercept key "]" + \def\!tfRowOfWidths{}% Artificial Table Row with horizontal struts + % to enforce specified minimum column widths + \ReadFormatKeys} + +% SET (MINIMUM COLUMN) WIDTH: Invoked by the key "w". +\def\!tfSetWidth{% + \ifx \!tfRowOfWidths \empty % true if no prior "w" keys + \ifnum \!taColumnNumber>0 % true if "w" key is to right of first "|" + \begingroup % RowOfWidths={&\omit || n copies of + % &\omit&\omit}, where n = number of columns + \!taCountA=1 % to the left of this one + \aftergroup \edef \aftergroup \!tfRowOfWidths \aftergroup {% + \aftergroup &\aftergroup \omit + \!thLoop + \ifnum \!taCountA<\!taColumnNumber + \advance\!taCountA 1 + \aftergroup \!tfAOAO + \repeat + \aftergroup }% + \endgroup + \fi + \fi + \ifx [\!ttemp % \!tgGetValue sets \!ttemp = token after w + \!thx\!tfSetWidthText + \else + \!thx\!tfSetWidthValue + \fi} + +% AOAO = (Apersand Omit Ampersand Omit) +\def\!tfAOAO{% + &\omit&\omit} + +% SET WIDTH TEXT +\def\!tfSetWidthText [#1]{% #1 = specified text + \def\!tfWidthText{#1}% + \ReadFormatKeys} + +% SET WIDTH VALUE +\def\!tfSetWidthValue{% + \!taMinimumColumnWidth = + \ifnum \!tgCode=1 + \ifx\!tgValue\empty % Use default multiplier if user didn't specify one + \ColumnWidthFactor + \else + \!tgValue + \fi + \ColumnWidthUnit + \else + \!tgValue + \fi + \def\!tfWidthText{}% Override possible prior `w[sample entry]' + \ReadFormatKeys} + + +% SET TABSKIP: Invoked by the tabskip keys "t" and "o" +\def\!tfSetTabskip{% + \ifnum \!tgCode=1 + \skip0 =\InterColumnSpaceUnit + \multiply\skip0 + \ifx \!tgValue\empty + \InterColumnSpaceFactor % Default integer + \else + \!tgValue % User-specified integer + \fi + \else + \skip0 =\!tgValue % User-specified + \fi + \divide\skip0 by 2 + \ifnum\!taColumnNumber=0 + \!thToksEdef\!taRuleColumnTemplate={% + \the\!taRuleColumnTemplate + \tabskip \the\skip0 } + \else + \!thToksEdef\!taDataColumnTemplate={% + \the\!taDataColumnTemplate + \tabskip \the\skip0 } + \fi + \if!taOnceOnlyTabskip + % % Tabskip used at right of this col only + \else + \!taLastRegularTabskip=\skip0 % Remember this Tabskip, for possible + \fi % restoration after a subsequent"OnceOnly" + \ReadFormatKeys} + + +% SET VRULE: Invoked by the key "|" +\def\!tfSetVrule{% + \!thToksEdef\!taRuleColumnTemplate={% + \noexpand\hfil + \noexpand\vrule + \noexpand\!thWidth + \ifnum \!tgCode=1 + \ifx \!tgValue\empty + \the\LineThicknessFactor % Default integer + \else + \!tgValue % User-specified integer + \fi + \!taLTU % \LineThicknessUnit + \else + \!tgValue % User-specified dimension + \fi + ####% + \noexpand\hfil + \the\!taRuleColumnTemplate} % has \tabskips, when column number=0 + \!tfAdjoinPriorColumn} + +% SET ALTERNATE VRULE: Invoked by the key "\|", in the form +% \|{